diff options
author | Sergey Matveev <earthdok@google.com> | 2013-05-20 11:04:43 +0000 |
---|---|---|
committer | Sergey Matveev <earthdok@google.com> | 2013-05-20 11:04:43 +0000 |
commit | e96c62a9f60c615fae16b1d645cd4afb29a4e87a (patch) | |
tree | 1dbf6a3233b29b5834088ff06d4f6ffffe25d969 /lib/lsan/lsan.cc | |
parent | 7ea7d20ea31f2146817967512356652cc1f72004 (diff) |
[lsan] Standalone LSan initialization.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@182248 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/lsan/lsan.cc')
-rw-r--r-- | lib/lsan/lsan.cc | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/lsan/lsan.cc b/lib/lsan/lsan.cc new file mode 100644 index 000000000..84466a1e2 --- /dev/null +++ b/lib/lsan/lsan.cc @@ -0,0 +1,61 @@ +//=-- lsan.cc -------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file is a part of LeakSanitizer. +// Standalone LSan RTL. +// +//===----------------------------------------------------------------------===// + +#include "lsan.h" + +#include "sanitizer_common/sanitizer_flags.h" +#include "sanitizer_common/sanitizer_stacktrace.h" +#include "lsan_allocator.h" +#include "lsan_common.h" +#include "lsan_thread.h" + +namespace __lsan { + +static void InitializeCommonFlags() { + CommonFlags *cf = common_flags(); + cf->external_symbolizer_path = GetEnv("LSAN_SYMBOLIZER_PATH"); + cf->symbolize = (cf->external_symbolizer_path && + cf->external_symbolizer_path[0]); + cf->strip_path_prefix = ""; + cf->fast_unwind_on_malloc = true; + cf->malloc_context_size = 30; + + ParseCommonFlagsFromString(GetEnv("LSAN_OPTIONS")); +} + +void Init() { + static bool inited; + if (inited) + return; + inited = true; + SanitizerToolName = "LeakSanitizer"; + InitializeCommonFlags(); + InitializeAllocator(); + InitCommonLsan(); + InitTlsSize(); + InitializeInterceptors(); + InitializeThreadRegistry(); + u32 tid = ThreadCreate(0, 0, true); + CHECK_EQ(tid, 0); + ThreadStart(tid, GetTid()); + + // Start symbolizer process if necessary. + const char* external_symbolizer = common_flags()->external_symbolizer_path; + if (common_flags()->symbolize && external_symbolizer && + external_symbolizer[0]) { + InitializeExternalSymbolizer(external_symbolizer); + } +} + +} // namespace __lsan |