diff options
author | Sergey Matveev <earthdok@google.com> | 2014-08-26 12:52:41 +0000 |
---|---|---|
committer | Sergey Matveev <earthdok@google.com> | 2014-08-26 12:52:41 +0000 |
commit | 93a2906e80280b879aa0f932b7b6dd52936f471e (patch) | |
tree | 09ced138695a359db93953c481af210fb9b99175 /compiler-rt/lib/lsan/lsan.h | |
parent | arm_acle: Add mappings for dbg intrinsic (diff) | |
download | llvm-project-93a2906e80280b879aa0f932b7b6dd52936f471e.tar.gz llvm-project-93a2906e80280b879aa0f932b7b6dd52936f471e.tar.bz2 llvm-project-93a2906e80280b879aa0f932b7b6dd52936f471e.zip |
[lsan] Implement __sanitizer_print_stack_trace() in standalone LSan.
llvm-svn: 216454
Diffstat (limited to 'compiler-rt/lib/lsan/lsan.h')
-rw-r--r-- | compiler-rt/lib/lsan/lsan.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/compiler-rt/lib/lsan/lsan.h b/compiler-rt/lib/lsan/lsan.h index 3e7f76b08193..d9dd63ab8c57 100644 --- a/compiler-rt/lib/lsan/lsan.h +++ b/compiler-rt/lib/lsan/lsan.h @@ -15,6 +15,26 @@ #include "sanitizer_common/sanitizer_flags.h" #include "sanitizer_common/sanitizer_stacktrace.h" +#define GET_STACK_TRACE(max_size, fast) \ + StackTrace stack; \ + { \ + uptr stack_top = 0, stack_bottom = 0; \ + ThreadContext *t; \ + if (fast && (t = CurrentThreadContext())) { \ + stack_top = t->stack_end(); \ + stack_bottom = t->stack_begin(); \ + } \ + stack.Unwind(max_size, StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), \ + /* context */ 0, stack_top, stack_bottom, fast); \ + } + +#define GET_STACK_TRACE_FATAL \ + GET_STACK_TRACE(kStackTraceMax, common_flags()->fast_unwind_on_fatal) + +#define GET_STACK_TRACE_MALLOC \ + GET_STACK_TRACE(__sanitizer::common_flags()->malloc_context_size, \ + common_flags()->fast_unwind_on_malloc) + namespace __lsan { void InitializeInterceptors(); |