[compiler-rt] r182384 - [asan] LSan hooks in asan_rtl.

Sergey Matveev earthdok at google.com
Tue May 21 07:15:35 PDT 2013


Author: smatveev
Date: Tue May 21 09:15:35 2013
New Revision: 182384

URL: http://llvm.org/viewvc/llvm-project?rev=182384&view=rev
Log:
[asan] LSan hooks in asan_rtl.

Modified:
    compiler-rt/trunk/lib/asan/asan_flags.h
    compiler-rt/trunk/lib/asan/asan_rtl.cc

Modified: compiler-rt/trunk/lib/asan/asan_flags.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_flags.h?rev=182384&r1=182383&r2=182384&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_flags.h (original)
+++ compiler-rt/trunk/lib/asan/asan_flags.h Tue May 21 09:15:35 2013
@@ -108,6 +108,8 @@ struct Flags {
   // If true, assume that dynamic initializers can never access globals from
   // other modules, even if the latter are already initialized.
   bool strict_init_order;
+  // Invoke LeakSanitizer at process exit.
+  bool detect_leaks;
 };
 
 extern Flags asan_flags_dont_use_directly;

Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=182384&r1=182383&r2=182384&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Tue May 21 09:15:35 2013
@@ -24,6 +24,7 @@
 #include "sanitizer_common/sanitizer_flags.h"
 #include "sanitizer_common/sanitizer_libc.h"
 #include "sanitizer_common/sanitizer_symbolizer.h"
+#include "lsan/lsan_common.h"
 
 namespace __asan {
 
@@ -124,6 +125,7 @@ static void ParseFlagsFromString(Flags *
   ParseFlag(str, &f->use_stack_depot, "use_stack_depot");
   ParseFlag(str, &f->strict_memcmp, "strict_memcmp");
   ParseFlag(str, &f->strict_init_order, "strict_init_order");
+  ParseFlag(str, &f->detect_leaks, "detect_leaks");
 }
 
 void InitializeFlags(Flags *f, const char *env) {
@@ -171,6 +173,7 @@ void InitializeFlags(Flags *f, const cha
   f->use_stack_depot = true;
   f->strict_memcmp = true;
   f->strict_init_order = false;
+  f->detect_leaks = false;
 
   // Override from compile definition.
   ParseFlagsFromString(f, MaybeUseAsanDefaultOptionsCompileDefiniton());
@@ -184,6 +187,20 @@ void InitializeFlags(Flags *f, const cha
 
   // Override from command line.
   ParseFlagsFromString(f, env);
+
+#if !CAN_SANITIZE_LEAKS
+  if (f->detect_leaks) {
+    Report("%s: detect_leaks is not supported on this platform.\n",
+           SanitizerToolName);
+    f->detect_leaks = false;
+  }
+#endif
+
+  if (f->detect_leaks && !f->use_stack_depot) {
+    Report("%s: detect_leaks is ignored (requires use_stack_depot).\n",
+           SanitizerToolName);
+    f->detect_leaks = false;
+  }
 }
 
 // -------------------------- Globals --------------------- {{{1
@@ -448,6 +465,10 @@ void __asan_init() {
     Atexit(asan_atexit);
   }
 
+  if (flags()->detect_leaks) {
+    Atexit(__lsan::DoLeakCheck);
+  }
+
   // interceptors
   InitializeAsanInterceptors();
 
@@ -527,6 +548,8 @@ void __asan_init() {
   main_thread->ThreadStart(internal_getpid());
   force_interface_symbols();  // no-op.
 
+  __lsan::InitCommonLsan();
+
   InitializeAllocator();
 
   if (flags()->verbosity) {





More information about the llvm-commits mailing list