diff options
| author | Timur Iskhodzhanov <timurrrr@google.com> | 2013-12-10 08:30:39 +0000 |
|---|---|---|
| committer | Timur Iskhodzhanov <timurrrr@google.com> | 2013-12-10 08:30:39 +0000 |
| commit | 89a346c2a16ae7a9283fd59f3d96a43321adbeef (patch) | |
| tree | 168cd731974bf0fa0aeb3dcd3824e19bc9def886 | |
| parent | 8e6afd4785f9b0b28e306b883ac939514588c8ea (diff) | |
| download | bcm5719-llvm-89a346c2a16ae7a9283fd59f3d96a43321adbeef.tar.gz bcm5719-llvm-89a346c2a16ae7a9283fd59f3d96a43321adbeef.zip | |
[ASan] Fix StackTrace::SlowUnwindStack on Windows
llvm-svn: 196894
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_win.cc | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc index 0a958bc1e73..7697ff9bb20 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc @@ -148,7 +148,7 @@ static bool MatchPc(uptr cur_pc, uptr trace_pc, uptr threshold) { } void StackTrace::PopStackFrames(uptr count) { - CHECK(count < size); + CHECK_LT(count, size); size -= count; for (uptr i = 0; i < size; ++i) { trace[i] = trace[i + count]; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_win.cc b/compiler-rt/lib/sanitizer_common/sanitizer_win.cc index f975c861bd1..ba9fdc407f7 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cc @@ -382,6 +382,9 @@ void StackTrace::SlowUnwindStack(uptr pc, uptr max_depth) { // FIXME: Look at LLVMUnhandledExceptionFilter in Signals.inc size = CaptureStackBackTrace(2, Min(max_depth, kStackTraceMax), (void**)trace, 0); + if (size == 0) + return; + // Skip the RTL frames by searching for the PC in the stacktrace. uptr pc_location = LocatePcInTrace(pc); PopStackFrames(pc_location); |

