summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuba Brecka <kuba.brecka@gmail.com>2016-03-21 12:12:44 +0000
committerKuba Brecka <kuba.brecka@gmail.com>2016-03-21 12:12:44 +0000
commit4b3833df7d0a2e23896f030086d92c1bd86a1328 (patch)
tree7eea3454a4778d013a6398af778eaac6783ecd17
parent26bad433f901d8c55bc2af3992af0897d12a1388 (diff)
downloadbcm5719-llvm-4b3833df7d0a2e23896f030086d92c1bd86a1328.tar.gz
bcm5719-llvm-4b3833df7d0a2e23896f030086d92c1bd86a1328.zip
[tsan] Add some NULL pointer checks into the debugging API
`__tsan_get_report_thread` and others can crash if a stack trace is missing, let's add the missing checks. Differential Revision: http://reviews.llvm.org/D18306 llvm-svn: 263939
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_debugging.cc10
1 files changed, 5 insertions, 5 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_debugging.cc b/compiler-rt/lib/tsan/rtl/tsan_debugging.cc
index 16d52a979fe..60757441671 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_debugging.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_debugging.cc
@@ -86,8 +86,8 @@ int __tsan_get_report_stack(void *report, uptr idx, void **trace,
const ReportDesc *rep = (ReportDesc *)report;
CHECK_LT(idx, rep->stacks.Size());
ReportStack *stack = rep->stacks[idx];
- CopyTrace(stack->frames, trace, trace_size);
- return 1;
+ if (stack) CopyTrace(stack->frames, trace, trace_size);
+ return stack ? 1 : 0;
}
SANITIZER_INTERFACE_ATTRIBUTE
@@ -102,7 +102,7 @@ int __tsan_get_report_mop(void *report, uptr idx, int *tid, void **addr,
*size = mop->size;
*write = mop->write ? 1 : 0;
*atomic = mop->atomic ? 1 : 0;
- CopyTrace(mop->stack->frames, trace, trace_size);
+ if (mop->stack) CopyTrace(mop->stack->frames, trace, trace_size);
return 1;
}
@@ -134,7 +134,7 @@ int __tsan_get_report_mutex(void *report, uptr idx, uptr *mutex_id, void **addr,
*mutex_id = mutex->id;
*addr = (void *)mutex->addr;
*destroyed = mutex->destroyed;
- CopyTrace(mutex->stack->frames, trace, trace_size);
+ if (mutex->stack) CopyTrace(mutex->stack->frames, trace, trace_size);
return 1;
}
@@ -150,7 +150,7 @@ int __tsan_get_report_thread(void *report, uptr idx, int *tid, uptr *pid,
*running = thread->running;
*name = thread->name;
*parent_tid = thread->parent_tid;
- CopyTrace(thread->stack->frames, trace, trace_size);
+ if (thread->stack) CopyTrace(thread->stack->frames, trace, trace_size);
return 1;
}
OpenPOWER on IntegriCloud