summaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2012-09-05 16:50:40 +0000
committerJim Grosbach <grosbach@apple.com>2012-09-05 16:50:40 +0000
commit35ed842773da41779d57d3ed23f440202d0be198 (patch)
tree1145a37b7143d8a20323ad54629e7cf3d9c14500 /lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
parent706f03a35db7029b2dbd2925552eb0d0472dcbb4 (diff)
downloadllvm-35ed842773da41779d57d3ed23f440202d0be198.tar.gz
llvm-35ed842773da41779d57d3ed23f440202d0be198.tar.bz2
llvm-35ed842773da41779d57d3ed23f440202d0be198.tar.xz
MCJIT: getPointerToFunction() references target address space.
Make sure to return a pointer into the target memory, not the local memory. Often they are the same, but we can't assume that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163217 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h')
-rw-r--r--lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
index 4b998eacfe..d5df732b91 100644
--- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
+++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
@@ -177,6 +177,10 @@ protected:
return true;
}
+ uint64_t getSectionLoadAddress(unsigned SectionID) {
+ return Sections[SectionID].LoadAddress;
+ }
+
uint8_t *getSectionAddress(unsigned SectionID) {
return (uint8_t*)Sections[SectionID].Address;
}
@@ -270,6 +274,15 @@ public:
return getSectionAddress(Loc.first) + Loc.second;
}
+ uint64_t getSymbolLoadAddress(StringRef Name) {
+ // FIXME: Just look up as a function for now. Overly simple of course.
+ // Work in progress.
+ if (GlobalSymbolTable.find(Name) == GlobalSymbolTable.end())
+ return 0;
+ SymbolLoc Loc = GlobalSymbolTable.lookup(Name);
+ return getSectionLoadAddress(Loc.first) + Loc.second;
+ }
+
void resolveRelocations();
void reassignSectionAddress(unsigned SectionID, uint64_t Addr);