[ASan] Move ASan runtime library self-checks to a more appropriate place.
authorYury Gribov <y.gribov@samsung.com>
Thu, 4 Jun 2015 07:23:09 +0000 (07:23 +0000)
committerYury Gribov <y.gribov@samsung.com>
Thu, 4 Jun 2015 07:23:09 +0000 (07:23 +0000)
llvm-svn: 239018

compiler-rt/lib/asan/asan_linux.cc
compiler-rt/lib/asan/asan_rtl.cc

index f4f187f..9580fc7 100644 (file)
@@ -113,6 +113,9 @@ static void ReportIncompatibleRT() {
 }
 
 void AsanCheckDynamicRTPrereqs() {
+  if (!ASAN_DYNAMIC)
+    return;
+
   // Ensure that dynamic RT is the first DSO in the list
   const char *first_dso_name = 0;
   dl_iterate_phdr(FindFirstDSOCallback, &first_dso_name);
index b829619..b085166 100644 (file)
@@ -367,6 +367,9 @@ static void AsanInitInternal() {
   // initialization steps look at flags().
   InitializeFlags();
 
+  AsanCheckIncompatibleRT();
+  AsanCheckDynamicRTPrereqs();
+
   SetCanPoisonMemory(flags()->poison_heap);
   SetMallocContextSize(common_flags()->malloc_context_size);
 
@@ -514,13 +517,11 @@ void AsanInitFromRtl() {
 
 #if ASAN_DYNAMIC
 // Initialize runtime in case it's LD_PRELOAD-ed into unsanitized executable
-// (and thus normal initializer from .preinit_array haven't run).
+// (and thus normal initializers from .preinit_array or modules haven't run).
 
 class AsanInitializer {
 public:  // NOLINT
   AsanInitializer() {
-    AsanCheckIncompatibleRT();
-    AsanCheckDynamicRTPrereqs();
     AsanInitFromRtl();
   }
 };
@@ -572,7 +573,6 @@ void NOINLINE __asan_set_death_callback(void (*callback)(void)) {
 // Initialize as requested from instrumented application code.
 // We use this call as a trigger to wake up ASan from deactivated state.
 void __asan_init() {
-  AsanCheckIncompatibleRT();
   AsanActivate();
   AsanInitInternal();
 }