summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-02-19 12:43:18 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-02-19 12:43:18 +0000
commit76dc3a81eabca1f5d326ab6246423b1b28d2f544 (patch)
tree95657e1204e31cd62e643cfa2537fc4a92099b26
parentf940f0c417d196f037763e0425873ba2e0acf475 (diff)
downloadbcm5719-llvm-76dc3a81eabca1f5d326ab6246423b1b28d2f544.tar.gz
bcm5719-llvm-76dc3a81eabca1f5d326ab6246423b1b28d2f544.zip
[msan] Use slow stack unwinder in UMR reports.
llvm-svn: 175510
-rw-r--r--compiler-rt/lib/msan/msan.cc10
-rw-r--r--compiler-rt/lib/msan/msan.h6
2 files changed, 11 insertions, 5 deletions
diff --git a/compiler-rt/lib/msan/msan.cc b/compiler-rt/lib/msan/msan.cc
index d28d83ce2f0..ba272343377 100644
--- a/compiler-rt/lib/msan/msan.cc
+++ b/compiler-rt/lib/msan/msan.cc
@@ -151,7 +151,11 @@ static void GetCurrentStackBounds(uptr *stack_top, uptr *stack_bottom) {
*stack_bottom = __msan_stack_bounds.stack_bottom;
}
-void GetStackTrace(StackTrace *stack, uptr max_s, uptr pc, uptr bp) {
+void GetStackTrace(StackTrace *stack, uptr max_s, uptr pc, uptr bp,
+ bool fast) {
+ if (!fast)
+ return stack->SlowUnwindStack(pc, max_s);
+
uptr stack_top, stack_bottom;
GetCurrentStackBounds(&stack_top, &stack_bottom);
stack->size = 0;
@@ -179,7 +183,7 @@ void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin) {
++msan_report_count;
StackTrace stack;
- GetStackTrace(&stack, kStackTraceMax, pc, bp);
+ GetStackTrace(&stack, kStackTraceMax, pc, bp, /*fast*/false);
u32 report_origin =
(__msan_track_origins && OriginIsValid(origin)) ? origin : 0;
@@ -277,7 +281,7 @@ void __msan_set_expect_umr(int expect_umr) {
GET_CALLER_PC_BP_SP;
(void)sp;
StackTrace stack;
- GetStackTrace(&stack, kStackTraceMax, pc, bp);
+ GetStackTrace(&stack, kStackTraceMax, pc, bp, /*fast*/false);
ReportExpectedUMRNotFound(&stack);
Die();
}
diff --git a/compiler-rt/lib/msan/msan.h b/compiler-rt/lib/msan/msan.h
index d612bfb287d..2150c83e8e8 100644
--- a/compiler-rt/lib/msan/msan.h
+++ b/compiler-rt/lib/msan/msan.h
@@ -54,7 +54,8 @@ void MsanDie();
void PrintWarning(uptr pc, uptr bp);
void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin);
-void GetStackTrace(StackTrace *stack, uptr max_s, uptr pc, uptr bp);
+void GetStackTrace(StackTrace *stack, uptr max_s, uptr pc, uptr bp,
+ bool fast);
void ReportUMR(StackTrace *stack, u32 origin);
void ReportExpectedUMRNotFound(StackTrace *stack);
@@ -65,7 +66,8 @@ void ReportAtExitStatistics();
stack.size = 0; \
if (__msan_get_track_origins() && msan_inited) \
GetStackTrace(&stack, flags()->num_callers, \
- StackTrace::GetCurrentPc(), GET_CURRENT_FRAME())
+ StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), \
+ /* fast */ true)
} // namespace __msan
OpenPOWER on IntegriCloud