summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-08-26 16:46:02 +0000
committerLang Hames <lhames@gmail.com>2018-08-26 16:46:02 +0000
commit60511582d7181e0226455a0b05b921e97156f7e1 (patch)
tree576293de7a946db7a482685bff5b3735da5cdb00
parent6eb2b1354b2cbc32a0f0b044901694cd644425de (diff)
downloadbcm5719-llvm-60511582d7181e0226455a0b05b921e97156f7e1.tar.gz
bcm5719-llvm-60511582d7181e0226455a0b05b921e97156f7e1.zip
[ORC] Do not include non-global symbols in getObjectSymbolFlags.
Private symbols are not visible outside the object file, and so not defined by the object file from ORC's perspective. No test case yet. Ideally this would be a unit test parsing a checked-in binary, but I am not aware of any way to reference the LLVM source root from a unit test. llvm-svn: 340703
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Layer.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
index cbe13002622..7e2f830e4cb 100644
--- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp
@@ -115,17 +115,22 @@ Expected<SymbolFlagsMap> getObjectSymbolFlags(ExecutionSession &ES,
SymbolFlagsMap SymbolFlags;
for (auto &Sym : (*Obj)->symbols()) {
- if (!(Sym.getFlags() & object::BasicSymbolRef::SF_Undefined) &&
- (Sym.getFlags() & object::BasicSymbolRef::SF_Exported)) {
- auto Name = Sym.getName();
- if (!Name)
- return Name.takeError();
- auto InternedName = ES.getSymbolStringPool().intern(*Name);
- auto SymFlags = JITSymbolFlags::fromObjectSymbol(Sym);
- if (!SymFlags)
- return SymFlags.takeError();
- SymbolFlags[InternedName] = std::move(*SymFlags);
- }
+ // Skip symbols not defined in this object file.
+ if (Sym.getFlags() & object::BasicSymbolRef::SF_Undefined)
+ continue;
+
+ // Skip symbols that are not global.
+ if (!(Sym.getFlags() & object::BasicSymbolRef::SF_Global))
+ continue;
+
+ auto Name = Sym.getName();
+ if (!Name)
+ return Name.takeError();
+ auto InternedName = ES.getSymbolStringPool().intern(*Name);
+ auto SymFlags = JITSymbolFlags::fromObjectSymbol(Sym);
+ if (!SymFlags)
+ return SymFlags.takeError();
+ SymbolFlags[InternedName] = std::move(*SymFlags);
}
return SymbolFlags;
OpenPOWER on IntegriCloud