[llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/Intercept.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri Jul 28 14:11:45 PDT 2006
Changes in directory llvm/lib/ExecutionEngine/JIT:
Intercept.cpp updated: 1.27 -> 1.28
---
Log message:
Fix handling of asm specifiers for external globals. This unbreaks many programs
on leopard in the jit.
---
Diffs of the changes: (+12 -1)
Intercept.cpp | 13 ++++++++++++-
1 files changed, 12 insertions(+), 1 deletion(-)
Index: llvm/lib/ExecutionEngine/JIT/Intercept.cpp
diff -u llvm/lib/ExecutionEngine/JIT/Intercept.cpp:1.27 llvm/lib/ExecutionEngine/JIT/Intercept.cpp:1.28
--- llvm/lib/ExecutionEngine/JIT/Intercept.cpp:1.27 Wed Jul 26 19:04:14 2006
+++ llvm/lib/ExecutionEngine/JIT/Intercept.cpp Fri Jul 28 16:11:31 2006
@@ -100,9 +100,20 @@
// but print a warning.
if (Name == "__main") return (void*)(intptr_t)&__mainFunc;
+ const char *NameStr = Name.c_str();
+ // If this is an asm specifier, skip the sentinal.
+ if (NameStr[0] == 1) ++NameStr;
+
// If it's an external function, look it up in the process image...
- void *Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(Name);
+ void *Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(NameStr);
if (Ptr) return Ptr;
+
+ // If it wasn't found and if it starts with an underscore ('_') character, and
+ // has an asm specifier, try again without the underscore.
+ if (Name[0] == 1 && NameStr[0] == '_') {
+ Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(NameStr+1);
+ if (Ptr) return Ptr;
+ }
std::cerr << "ERROR: Program used external function '" << Name
<< "' which could not be resolved!\n";
More information about the llvm-commits
mailing list