1 //=-- lsan.cc -------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of LeakSanitizer.
11 // Standalone LSan RTL.
13 //===----------------------------------------------------------------------===//
17 #include "sanitizer_common/sanitizer_flags.h"
18 #include "sanitizer_common/sanitizer_stacktrace.h"
19 #include "lsan_allocator.h"
20 #include "lsan_common.h"
21 #include "lsan_thread.h"
25 static void InitializeCommonFlags() {
26 CommonFlags
*cf
= common_flags();
27 cf
->external_symbolizer_path
= GetEnv("LSAN_SYMBOLIZER_PATH");
28 cf
->symbolize
= (cf
->external_symbolizer_path
&&
29 cf
->external_symbolizer_path
[0]);
30 cf
->strip_path_prefix
= "";
31 cf
->fast_unwind_on_malloc
= true;
32 cf
->malloc_context_size
= 30;
34 ParseCommonFlagsFromString(GetEnv("LSAN_OPTIONS"));
42 SanitizerToolName
= "LeakSanitizer";
43 InitializeCommonFlags();
44 InitializeAllocator();
46 InitializeInterceptors();
47 InitializeThreadRegistry();
48 u32 tid
= ThreadCreate(0, 0, true);
50 ThreadStart(tid
, GetTid());
51 SetCurrentThread(tid
);
53 // Start symbolizer process if necessary.
54 const char* external_symbolizer
= common_flags()->external_symbolizer_path
;
55 if (common_flags()->symbolize
&& external_symbolizer
&&
56 external_symbolizer
[0]) {
57 InitializeExternalSymbolizer(external_symbolizer
);