From 7225461edfe243137b2a0efdbd0176ac312ec310 Mon Sep 17 00:00:00 2001 From: Misha Brukman Date: Tue, 15 Jul 2003 15:55:32 +0000 Subject: [PATCH] On Sparc/Solaris, the special handle RTLD_SELF is used as a handle referring to the program's executing image, not 0 as it is on Linux/x86 and possibly other systems. llvm-svn: 7176 --- llvm/lib/ExecutionEngine/ExecutionEngine.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/llvm/lib/ExecutionEngine/ExecutionEngine.cpp b/llvm/lib/ExecutionEngine/ExecutionEngine.cpp index 532f8fd49b21..a661dd49b51d 100644 --- a/llvm/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/llvm/lib/ExecutionEngine/ExecutionEngine.cpp @@ -361,8 +361,13 @@ void ExecutionEngine::emitGlobals() { } else { // External variable reference, try to use dlsym to get a pointer to it in // the LLI image. - if (void *SymAddr = dlsym(0, I->getName().c_str())) +#if defined(sparc) || defined(__sparc__) || defined(__sparcv9) + if (void *SymAddr = dlsym(RTLD_SELF, I->getName().c_str())) GlobalAddress[I] = SymAddr; +#else + if (void *SymAddr = dlsym(0, I->getName().c_str())) + GlobalAddress[I] = SymAddr; +#endif else { std::cerr << "Could not resolve external global address: " << I->getName() << "\n";