diff --git a/compiler-rt/lib/asan/asan_stack.cc b/compiler-rt/lib/asan/asan_stack.cc --- a/compiler-rt/lib/asan/asan_stack.cc +++ b/compiler-rt/lib/asan/asan_stack.cc @@ -65,16 +65,16 @@ if (!unwind_scope.CanUnwind()) return; if (request_fast) { - if (t) { - Unwind(max_depth, pc, bp, nullptr, t->stack_top(), t->stack_bottom(), - true); - } + if (t) + UnwindFast(pc, bp, t->stack_top(), t->stack_bottom(), max_depth); return; } if (SANITIZER_MIPS && t && !IsValidFrame(bp, t->stack_top(), t->stack_bottom())) return; - Unwind(max_depth, pc, bp, context, 0, 0, false); +#if SANITIZER_CAN_SLOW_UNWIND + UnwindSlowWithOptionalContext(pc, context, max_depth); +#endif } // ------------------ Interface -------------- {{{1 diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h --- a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h @@ -134,6 +134,13 @@ void UnwindSlow(uptr pc, u32 max_depth); void UnwindSlow(uptr pc, void *context, u32 max_depth); + void UnwindSlowWithOptionalContext(uptr pc, void *context, u32 max_depth) { + if (context) + UnwindSlow(pc, context, max_depth); + else + UnwindSlow(pc, max_depth); + } + void PopStackFrames(uptr count); uptr LocatePcInTrace(uptr pc);