diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-09-15 08:11:53 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-09-15 08:11:53 +0000 |
commit | 3ed5043d1ed3d45009d3a2cbb3deca8f334f1318 (patch) | |
tree | b6c189a7e52564839a99299d9af96332a6957dc2 /lib/ubsan | |
parent | 2187d5ac003476a5b5c6596a92c0686dec7802be (diff) |
[ubsan] Extract GetStackTraceWithPcBpAndContext similar to asan version
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@313350 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ubsan')
-rw-r--r-- | lib/ubsan/ubsan_diag.cc | 20 | ||||
-rw-r--r-- | lib/ubsan/ubsan_diag.h | 4 |
2 files changed, 16 insertions, 8 deletions
diff --git a/lib/ubsan/ubsan_diag.cc b/lib/ubsan/ubsan_diag.cc index f039a317f..e73fe9042 100644 --- a/lib/ubsan/ubsan_diag.cc +++ b/lib/ubsan/ubsan_diag.cc @@ -26,21 +26,25 @@ using namespace __ubsan; +void __ubsan::GetStackTraceWithPcBpAndContext(BufferedStackTrace *stack, + uptr max_depth, uptr pc, uptr bp, + void *context, bool fast) { + uptr top = 0; + uptr bottom = 0; + if (fast) + GetThreadStackTopAndBottom(false, &top, &bottom); + stack->Unwind(max_depth, pc, bp, context, top, bottom, fast); +} + static void MaybePrintStackTrace(uptr pc, uptr bp) { // We assume that flags are already parsed, as UBSan runtime // will definitely be called when we print the first diagnostics message. if (!flags()->print_stacktrace) return; - uptr top = 0; - uptr bottom = 0; - bool request_fast_unwind = common_flags()->fast_unwind_on_fatal; - if (request_fast_unwind) - __sanitizer::GetThreadStackTopAndBottom(false, &top, &bottom); - BufferedStackTrace stack; - stack.Unwind(kStackTraceMax, pc, bp, nullptr, top, bottom, - request_fast_unwind); + GetStackTraceWithPcBpAndContext(&stack, kStackTraceMax, pc, bp, nullptr, + common_flags()->fast_unwind_on_fatal); stack.Print(); } diff --git a/lib/ubsan/ubsan_diag.h b/lib/ubsan/ubsan_diag.h index 3edb67a03..2e1983947 100644 --- a/lib/ubsan/ubsan_diag.h +++ b/lib/ubsan/ubsan_diag.h @@ -231,6 +231,10 @@ bool ignoreReport(SourceLocation SLoc, ReportOptions Opts, ErrorType ET); GET_CALLER_PC_BP; \ ReportOptions Opts = {unrecoverable_handler, pc, bp} +void GetStackTraceWithPcBpAndContext(BufferedStackTrace *stack, uptr max_depth, + uptr pc, uptr bp, void *context, + bool fast); + /// \brief Instantiate this class before printing diagnostics in the error /// report. This class ensures that reports from different threads and from /// different sanitizers won't be mixed. |