According to GetStackTraceWithPcBpAndContext() implementation:
void GetStackTraceWithPcBpAndContext(StackTrace *stack, uptr max_depth, uptr pc, uptr bp, void *context, bool fast) { #if SANITIZER_WINDOWS stack->Unwind(max_depth, pc, bp, context, 0, 0, fast); #else ... if ((t = GetCurrentThread()) && !t->isUnwinding()) { ... } else if (t == 0 && !fast) { /* If GetCurrentThread() has failed, try to do slow unwind anyways. */ stack->Unwind(max_depth, pc, bp, context, 0, 0, false); } } #endif // SANITIZER_WINDOWS }
if the current thread is in the unwinding state, the 'stack_top' and 'stack_bottom' parameters of the StackTrace::FastUnwindStack() function both set to 0. That, in turn, results in the sanity condition for 'stack_top' within that function always met and thus no call stack is provided.