Add detection of __dso_handle presence during configure. Use this information in the
authorAnton Korobeynikov <asl@math.spbu.ru>
Mon, 30 Jul 2007 20:02:02 +0000 (20:02 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Mon, 30 Jul 2007 20:02:02 +0000 (20:02 +0000)
JITer (short path is added for darwin). This is needed to properly JIT llvm-gcc-4.2-built
binaries, since cxa_atexit is enabled by default on much more targets.

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

autoconf/configure.ac
include/llvm/Config/config.h.in
lib/ExecutionEngine/JIT/JIT.cpp

index 23897d5fd8a0711e286e73459364d230cc99308a..5ba07c830a25ecf1f79b5433c5416148e95ce24b 100644 (file)
@@ -766,6 +766,9 @@ dnl=== SECTION 9: Additional checks, variables, etc.
 dnl===
 dnl===-----------------------------------------------------------------------===
 
+dnl Check, whether __dso_handle is present
+AC_CHECK_FUNCS([__dso_handle])
+
 dnl See if the llvm-gcc executable can compile to LLVM assembly
 AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
 [llvm_cv_llvmgcc_sanity="no"
index 80b443f6c7c9b317b3f32b3b86ff8fa09a0ec518..ae4116a9325739711c127448e7da4b62ed6201d1 100644 (file)
 /* Define to 1 if you have the <windows.h> header file. */
 #undef HAVE_WINDOWS_H
 
+/* Define to 1 if you have the `__dso_handle' function. */
+#undef HAVE___DSO_HANDLE
+
 /* Installation directory for binary executables */
 #undef LLVM_BINDIR
 
index 603f8ec14adeaeebd57d1729ea6a0ba901908569..926142f4637019d524d2d8e9bd9ce8ccd462ea3d 100644 (file)
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetJITInfo.h"
+
+#include "llvm/Config/config.h"
+
 using namespace llvm;
 
 #ifdef __APPLE__ 
-#include <AvailabilityMacros.h>
-#if defined(MAC_OS_X_VERSION_10_4) && \
-    ((MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4) || \
-     (MAC_OS_X_VERSION_MIN_REQUIRED == MAC_OS_X_VERSION_10_4 && \
-      __APPLE_CC__ >= 5330))
-// __dso_handle is resolved by Mac OS X dynamic linker.
-extern void *__dso_handle __attribute__ ((__visibility__ ("hidden")));
+// Apple gcc defaults to -fuse-cxa-atexit (i.e. calls __cxa_atexit instead
+// of atexit). It passes the address of linker generated symbol __dso_handle
+// to the function.
+// This configuration change happened at version 5330.
+# include <AvailabilityMacros.h>
+# if defined(MAC_OS_X_VERSION_10_4) && \
+     ((MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4) || \
+      (MAC_OS_X_VERSION_MIN_REQUIRED == MAC_OS_X_VERSION_10_4 && \
+       __APPLE_CC__ >= 5330))
+#  ifndef HAVE___DSO_HANDLE
+#   define HAVE___DSO_HANDLE 1
+#  endif
+# endif
 #endif
+
+#if HAVE___DSO_HANDLE
+extern void *__dso_handle __attribute__ ((__visibility__ ("hidden")));
 #endif
 
 static struct RegisterJIT {
@@ -302,14 +314,7 @@ void *JIT::getOrEmitGlobalVariable(const GlobalVariable *GV) {
 
   // If the global is external, just remember the address.
   if (GV->isDeclaration()) {
-#if defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_4) && \
-    ((MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4) || \
-     (MAC_OS_X_VERSION_MIN_REQUIRED == MAC_OS_X_VERSION_10_4 && \
-      __APPLE_CC__ >= 5330))
-    // Apple gcc defaults to -fuse-cxa-atexit (i.e. calls __cxa_atexit instead
-    // of atexit). It passes the address of linker generated symbol __dso_handle
-    // to the function.
-    // This configuration change happened at version 5330.
+#if HAVE___DSO_HANDLE
     if (GV->getName() == "__dso_handle")
       return (void*)&__dso_handle;
 #endif