Unbreak all of the darwin/ppc32 JIT failures having to do
authorChris Lattner <sabre@nondot.org>
Tue, 27 Nov 2007 20:41:32 +0000 (20:41 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 27 Nov 2007 20:41:32 +0000 (20:41 +0000)
with not being able to find printf.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44373 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/JIT/Intercept.cpp

index 318d6067d6c01351bf1273f1e9e8e08b87e19028..6d5e7da772f77e2b15fa860e240eef58e1eb576e 100644 (file)
@@ -102,6 +102,16 @@ void *JIT::getPointerToNamedFunction(const std::string &Name) {
     if (Ptr) return Ptr;
   }
   
+  // darwin/ppc adds $LDBLStub suffixes to various symbols like printf.  These
+  // are references to hidden visibility symbols that dlsym cannot resolve.  If
+  // we have one of these, strip off $LDBLStub and try again.
+#if defined(__APPLE__) && defined(__ppc__)
+  if (Name.size() > 9 && Name[Name.size()-9] == '$' &&
+      memcmp(&Name[Name.size()-8], "LDBLStub", 8) == 0)
+    return getPointerToNamedFunction(std::string(Name.begin(),
+                                                 Name.end()-9));
+#endif
+  
   /// If a LazyFunctionCreator is installed, use it to get/create the function. 
   if (LazyFunctionCreator)
     if (void *RP = LazyFunctionCreator(Name))