summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2014-10-20 23:39:54 +0000
committerLang Hames <lhames@gmail.com>2014-10-20 23:39:54 +0000
commit84801c217c69d31c24d0f1f5c7623fba5ce00536 (patch)
tree40a565b546452151459ab30a8a751ba79003e67a /llvm/lib
parentab506adf7d3ced6abcaf42f92de3d6cd15fa19e8 (diff)
downloadbcm5719-llvm-84801c217c69d31c24d0f1f5c7623fba5ce00536.tar.gz
bcm5719-llvm-84801c217c69d31c24d0f1f5c7623fba5ce00536.zip
[MCJIT] Make MCJIT honor symbol visibility settings when populating the global
symbol table. Patch by Anthony Pesch. Thanks Anthony! llvm-svn: 220245
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp6
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp3
2 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
index 488130112de..5c16f0ab712 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
@@ -205,10 +205,14 @@ RuntimeDyldImpl::loadObject(std::unique_ptr<ObjectImage> Obj) {
bool IsCode = SI->isText();
unsigned SectionID =
findOrEmitSection(*Obj, *SI, IsCode, LocalSections);
+ // Add the symbol to the local symbol table for this module.
LocalSymbols[Name.data()] = SymbolLoc(SectionID, SectOffset);
DEBUG(dbgs() << "\tOffset: " << format("%p", (uintptr_t)SectOffset)
<< " flags: " << Flags << " SID: " << SectionID);
- GlobalSymbolTable[Name] = SymbolLoc(SectionID, SectOffset);
+ // If exported, add to the global symbol table for other modules to also link in.
+ if (Flags & SymbolRef::SF_Exported) {
+ GlobalSymbolTable[Name] = SymbolLoc(SectionID, SectOffset);
+ }
}
}
DEBUG(dbgs() << "\tType: " << SymType << " Name: " << Name << "\n");
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 6e83d8182a4..91aa13f7130 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -454,6 +454,9 @@ uint32_t MachOObjectFile::getSymbolFlags(DataRefImpl DRI) const {
if (Value && Value != UnknownAddressOrSize)
Result |= SymbolRef::SF_Common;
}
+
+ if (!(MachOType & MachO::N_PEXT))
+ Result |= SymbolRef::SF_Exported;
}
if (MachOFlags & (MachO::N_WEAK_REF | MachO::N_WEAK_DEF))
OpenPOWER on IntegriCloud