diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-11-13 14:46:58 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-11-13 14:46:58 +0000 |
commit | 1b17f5b79d58c5aff291dde05727ad0b215b81c6 (patch) | |
tree | 5ce639a22a08ff9a1b585e1397c01e106ae2d9e9 /lib/sanitizer_common/sanitizer_stacktrace.h | |
parent | 348aac42b606dd2d4cec9d68a85bf0144bd7c2f3 (diff) | |
download | compiler-rt-1b17f5b79d58c5aff291dde05727ad0b215b81c6.tar.gz |
[ASan] Do not rely on malloc context in allocator reports.
Invoke a fatal stack trace unwinder when ASan prints allocator-relevant
error reports (double-free, alloc-dealloc-mismatch, invalid-free).
Thus we'll be able to print complete stack trace even if allocation/free
stacks are not stored (malloc_context_size=0).
Based on the patch by Yuri Gribov!
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@194579 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_stacktrace.h')
-rw-r--r-- | lib/sanitizer_common/sanitizer_stacktrace.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_stacktrace.h b/lib/sanitizer_common/sanitizer_stacktrace.h index 408063c18..88f0a03b1 100644 --- a/lib/sanitizer_common/sanitizer_stacktrace.h +++ b/lib/sanitizer_common/sanitizer_stacktrace.h @@ -33,6 +33,7 @@ static const uptr kStackTraceMax = 256; struct StackTrace { typedef bool (*SymbolizeCallback)(const void *pc, char *out_buffer, int out_size); + uptr top_frame_bp; uptr size; uptr trace[kStackTraceMax]; @@ -41,6 +42,7 @@ struct StackTrace { SymbolizeCallback symbolize_callback = 0); void CopyFrom(const uptr *src, uptr src_size) { + top_frame_bp = 0; size = src_size; if (size > kStackTraceMax) size = kStackTraceMax; for (uptr i = 0; i < size; i++) |