aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2024-12-03 07:12:34 +0000
committerLang Hames <lhames@gmail.com>2024-12-03 08:00:29 +0000
commitd09707070c7460d0887eae8f7022e816510d5eb1 (patch)
treedda4397332d9bca83e0b7b62e7652f44dd1ee6e3 /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
parent9692242f51eda6a8c33860d2879ffa291a27e3ca (diff)
downloadllvm-d09707070c7460d0887eae8f7022e816510d5eb1.zip
llvm-d09707070c7460d0887eae8f7022e816510d5eb1.tar.gz
llvm-d09707070c7460d0887eae8f7022e816510d5eb1.tar.bz2
Re-apply "[ORC][JITLink] Add jitlink::Scope::SideEffectsOnly" with fixes.
This reapplies aba6bb0820b, which was reverted in 28e2a891210 due to bot failures. It contains fixes to silence warnings for uncovered switches, and for incorrect initializer-symbol handling on ELF and COFF.
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
index c1c5540..c5342c4 100644
--- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
@@ -65,6 +65,8 @@ JITSymbolFlags getJITSymbolFlagsForSymbol(Symbol &Sym) {
if (Sym.getScope() == Scope::Default)
Flags |= JITSymbolFlags::Exported;
+ else if (Sym.getScope() == Scope::SideEffectsOnly)
+ Flags |= JITSymbolFlags::MaterializationSideEffectsOnly;
if (Sym.isCallable())
Flags |= JITSymbolFlags::Callable;
@@ -236,7 +238,7 @@ public:
SymbolMap InternedResult;
for (auto *Sym : G.defined_symbols())
- if (Sym->getScope() != Scope::Local) {
+ if (Sym->getScope() < Scope::SideEffectsOnly) {
auto InternedName = ES.intern(Sym->getName());
auto Ptr = getJITSymbolPtrForSymbol(*Sym, G.getTargetTriple());
auto Flags = getJITSymbolFlagsForSymbol(*Sym);
@@ -249,7 +251,7 @@ public:
}
for (auto *Sym : G.absolute_symbols())
- if (Sym->getScope() != Scope::Local) {
+ if (Sym->getScope() < Scope::SideEffectsOnly) {
auto InternedName = ES.intern(Sym->getName());
auto Ptr = getJITSymbolPtrForSymbol(*Sym, G.getTargetTriple());
auto Flags = getJITSymbolFlagsForSymbol(*Sym);
@@ -281,11 +283,9 @@ public:
// If this is a materialization-side-effects only symbol then bump
// the counter and remove in from the result, otherwise make sure that
// it's defined.
- if (Flags.hasMaterializationSideEffectsOnly()) {
+ if (Flags.hasMaterializationSideEffectsOnly())
++NumMaterializationSideEffectsOnlySymbols;
- InternedResult.erase(Sym);
- continue;
- } else if (I == InternedResult.end())
+ else if (I == InternedResult.end())
MissingSymbols.push_back(Sym);
else if (Layer.OverrideObjectFlags)
I->second.setFlags(Flags);