[Asan][Windows] Fix asan stack traces on Windows.

While implementing inline stack traces on Windows I noticed that the stack
traces in many asan tests included an inlined frame that shouldn't be there.

Currently we get the PC and then do a stack unwind and use the PC to
find the beginning of the stack trace.
In the failing tests the first thing in the stack trace is inside an inline
call site that shouldn't be in the stack trace, so replace it with the PC.

Differential Revision: https://reviews.llvm.org/D89996
This commit is contained in:
Amy Huang 2020-10-23 13:14:14 -07:00
parent 9497e2e7d8
commit 3827effe3a
1 changed files with 4 additions and 0 deletions

View File

@ -37,6 +37,10 @@ void BufferedStackTrace::UnwindSlow(uptr pc, u32 max_depth) {
// Skip the RTL frames by searching for the PC in the stacktrace. // Skip the RTL frames by searching for the PC in the stacktrace.
uptr pc_location = LocatePcInTrace(pc); uptr pc_location = LocatePcInTrace(pc);
PopStackFrames(pc_location); PopStackFrames(pc_location);
// Replace the first frame with the PC because the frame in the
// stacktrace might be incorrect.
trace_buffer[0] = pc;
} }
void BufferedStackTrace::UnwindSlow(uptr pc, void *context, u32 max_depth) { void BufferedStackTrace::UnwindSlow(uptr pc, void *context, u32 max_depth) {