From: Evgeniy Stepanov Date: Tue, 19 Feb 2013 12:43:18 +0000 (+0000) Subject: [msan] Use slow stack unwinder in UMR reports. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=76dc3a81eabca1f5d326ab6246423b1b28d2f544;p=platform%2Fupstream%2Fllvm.git [msan] Use slow stack unwinder in UMR reports. llvm-svn: 175510 --- diff --git a/compiler-rt/lib/msan/msan.cc b/compiler-rt/lib/msan/msan.cc index d28d83c..ba27234 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 d612bfb..2150c83 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