aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
diff options
context:
space:
mode:
authorStefan Gränitz <stefan.graenitz@gmail.com>2023-03-22 20:21:59 +0100
committerStefan Gränitz <stefan.graenitz@gmail.com>2023-03-22 20:44:43 +0100
commitcf8dc9dfe9eb66621cb7c860bf81b29699415c66 (patch)
tree471c994faaab216cada8dcf0d43a48598d9edcb9 /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
parent587b3713309b03f73d2affba8a9a992a70aff174 (diff)
downloadllvm-cf8dc9dfe9eb66621cb7c860bf81b29699415c66.zip
llvm-cf8dc9dfe9eb66621cb7c860bf81b29699415c66.tar.gz
llvm-cf8dc9dfe9eb66621cb7c860bf81b29699415c66.tar.bz2
[JITLink] Introduce target flags for Symbol and prepare ObjectLinkingLayer to account for them
AArch32 branch offsets explicitly encode the target instruction subset (Arm/Thumb) in their least significant bit. We want this bit set (or clear) in addreses we hand out, but the addresses in the LinkGraph should be the real/physical addresses. This patch allows ELFLinkGraphBuilder's to set target-specific flags in jitlink::Symbol and prepares ObjectLinkingLayer to account for them. Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D146641
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
index e7356e5..2c270cd 100644
--- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
@@ -39,6 +39,10 @@ bool hasInitializerSection(jitlink::LinkGraph &G) {
return false;
}
+JITTargetAddress getJITSymbolPtrForSymbol(Symbol &Sym) {
+ return Sym.getAddress().getValue();
+}
+
JITSymbolFlags getJITSymbolFlagsForSymbol(Symbol &Sym) {
JITSymbolFlags Flags;
@@ -215,10 +219,9 @@ public:
for (auto *Sym : G.defined_symbols())
if (Sym->hasName() && Sym->getScope() != Scope::Local) {
auto InternedName = ES.intern(Sym->getName());
+ auto Ptr = getJITSymbolPtrForSymbol(*Sym);
auto Flags = getJITSymbolFlagsForSymbol(*Sym);
-
- InternedResult[InternedName] =
- JITEvaluatedSymbol(Sym->getAddress().getValue(), Flags);
+ InternedResult[InternedName] = JITEvaluatedSymbol(Ptr, Flags);
if (AutoClaim && !MR->getSymbols().count(InternedName)) {
assert(!ExtraSymbolsToClaim.count(InternedName) &&
"Duplicate symbol to claim?");
@@ -229,9 +232,9 @@ public:
for (auto *Sym : G.absolute_symbols())
if (Sym->hasName() && Sym->getScope() != Scope::Local) {
auto InternedName = ES.intern(Sym->getName());
+ auto Ptr = getJITSymbolPtrForSymbol(*Sym);
auto Flags = getJITSymbolFlagsForSymbol(*Sym);
- InternedResult[InternedName] =
- JITEvaluatedSymbol(Sym->getAddress().getValue(), Flags);
+ InternedResult[InternedName] = JITEvaluatedSymbol(Ptr, Flags);
if (AutoClaim && !MR->getSymbols().count(InternedName)) {
assert(!ExtraSymbolsToClaim.count(InternedName) &&
"Duplicate symbol to claim?");