summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/sanitizer_stacktrace.h
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-11-13 14:46:58 +0000
committerAlexey Samsonov <samsonov@google.com>2013-11-13 14:46:58 +0000
commit1b17f5b79d58c5aff291dde05727ad0b215b81c6 (patch)
tree5ce639a22a08ff9a1b585e1397c01e106ae2d9e9 /lib/sanitizer_common/sanitizer_stacktrace.h
parent348aac42b606dd2d4cec9d68a85bf0144bd7c2f3 (diff)
downloadcompiler-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.h2
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++)