summaryrefslogtreecommitdiff
path: root/lib/lsan/lsan.cc
diff options
context:
space:
mode:
authorSergey Matveev <earthdok@google.com>2013-05-20 11:04:43 +0000
committerSergey Matveev <earthdok@google.com>2013-05-20 11:04:43 +0000
commite96c62a9f60c615fae16b1d645cd4afb29a4e87a (patch)
tree1dbf6a3233b29b5834088ff06d4f6ffffe25d969 /lib/lsan/lsan.cc
parent7ea7d20ea31f2146817967512356652cc1f72004 (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.cc61
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