[Sanitizer] Introduce SANITIZER_CAN_USE_PREINIT_ARRAY definition and use it across...
authorAlexey Samsonov <vonosmas@gmail.com>
Fri, 25 Jul 2014 22:05:02 +0000 (22:05 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Fri, 25 Jul 2014 22:05:02 +0000 (22:05 +0000)
Get rid of ASAN_USE_PREINIT_ARRAY and LSAN_USE_PREINIT_ARRAY - just always
use .preinit_array if it's available. This mode seems stable enough, and
we've been relying on default values of these macro for a long time.

llvm-svn: 213980

compiler-rt/lib/asan/asan_internal.h
compiler-rt/lib/asan/asan_preinit.cc
compiler-rt/lib/dfsan/dfsan.cc
compiler-rt/lib/lsan/lsan_preinit.cc
compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h

index 0782789..38eb6a3 100644 (file)
 # endif
 #endif
 
-#ifndef ASAN_USE_PREINIT_ARRAY
-# define ASAN_USE_PREINIT_ARRAY (SANITIZER_LINUX && !SANITIZER_ANDROID)
-#endif
-
 #ifndef ASAN_DYNAMIC
 # ifdef PIC
 #  define ASAN_DYNAMIC 1
index 586f551..0dd0a09 100644 (file)
 // This file is a part of AddressSanitizer, an address sanity checker.
 //
 // Call __asan_init at the very early stage of process startup.
-// On Linux we use .preinit_array section (unless PIC macro is defined).
 //===----------------------------------------------------------------------===//
 #include "asan_internal.h"
 
-#if ASAN_USE_PREINIT_ARRAY && !defined(PIC)
-  // On Linux, we force __asan_init to be called before anyone else
-  // by placing it into .preinit_array section.
-  // FIXME: do we have anything like this on Mac?
+#if SANITIZER_CAN_USE_PREINIT_ARRAY
   // The symbol is called __local_asan_preinit, because it's not intended to be
   // exported.
   __attribute__((section(".preinit_array"), used))
index 076ec58..2a66831 100644 (file)
@@ -269,7 +269,7 @@ static void dfsan_init(int argc, char **argv, char **envp) {
   InitializeInterceptors();
 }
 
-#ifndef DFSAN_NOLIBC
+#ifndef DFSAN_NOLIBC && SANITIZER_CAN_USE_PREINIT_ARRAY
 __attribute__((section(".preinit_array"), used))
 static void (*dfsan_init_ptr)(int, char **, char **) = dfsan_init;
 #endif
index e663951..5a19095 100644 (file)
 
 #include "lsan.h"
 
-#ifndef LSAN_USE_PREINIT_ARRAY
-#define LSAN_USE_PREINIT_ARRAY 1
-#endif
-
-#if LSAN_USE_PREINIT_ARRAY && !defined(PIC)
+#if SANITIZER_CAN_USE_PREINIT_ARRAY
   // We force __lsan_init to be called before anyone else by placing it into
   // .preinit_array section.
   __attribute__((section(".preinit_array"), used))
index c8985b4..d77ca8f 100644 (file)
 # define SANITIZER_SUPPORTS_WEAK_HOOKS 0
 #endif
 
+// We can use .preinit_array section on Linux to call sanitizer initialization
+// functions very early in the process startup (unless PIC macro is defined).
+// FIXME: do we have anything like this on Mac?
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !defined(PIC)
+# define SANITIZER_CAN_USE_PREINIT_ARRAY 1
+#else
+# define SANITIZER_CAN_USE_PREINIT_ARRAY 0
+#endif
+
 // GCC does not understand __has_feature
 #if !defined(__has_feature)
 # define __has_feature(x) 0