diff options
author | Lang Hames <lhames@gmail.com> | 2014-10-20 23:39:54 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2014-10-20 23:39:54 +0000 |
commit | 84801c217c69d31c24d0f1f5c7623fba5ce00536 (patch) | |
tree | 40a565b546452151459ab30a8a751ba79003e67a /llvm/lib/ExecutionEngine/RuntimeDyld | |
parent | ab506adf7d3ced6abcaf42f92de3d6cd15fa19e8 (diff) | |
download | bcm5719-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/ExecutionEngine/RuntimeDyld')
-rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 6 |
1 files changed, 5 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"); |