[MCJIT] Make MCJIT honor symbol visibility settings when populating the global
[oota-llvm.git] / include / llvm / Object / ELFObjectFile.h
index 4676ae8bdbc09261b43e29daa786ca0dab6e0e03..bb7c90ac34897e7824ccc9fddc7bc2e593ade4a3 100644 (file)
@@ -177,6 +177,19 @@ protected:
     return DRI;
   }
 
+  bool isExportedToOtherDSO(const Elf_Sym *ESym) const {
+    unsigned char Binding = ESym->getBinding();
+    unsigned char Visibility = ESym->getVisibility();
+
+    if (Binding != ELF::STB_GLOBAL && Binding != ELF::STB_WEAK)
+      return false;
+
+    if (Visibility != ELF::STV_DEFAULT && Visibility != ELF::STV_PROTECTED)
+      return false;
+
+    return true;
+  }
+
   // This flag is used for classof, to distinguish ELFObjectFile from
   // its subclass. If more subclasses will be created, this flag will
   // have to become an enum.
@@ -373,6 +386,9 @@ uint32_t ELFObjectFile<ELFT>::getSymbolFlags(DataRefImpl Symb) const {
       EF.getSymbolTableIndex(ESym) == ELF::SHN_COMMON)
     Result |= SymbolRef::SF_Common;
 
+  if (isExportedToOtherDSO(ESym))
+    Result |= SymbolRef::SF_Exported;
+
   return Result;
 }