[compiler-rt] r174516 - [TSan] skip multiple internal frames, if necessary
Kostya Serebryany
kcc at google.com
Wed Feb 6 08:35:19 PST 2013
Can we actually have more than one internal frame in tsan?
When does this happen?
On Wed, Feb 6, 2013 at 8:28 PM, Alexey Samsonov <samsonov at google.com> wrote:
> Author: samsonov
> Date: Wed Feb 6 10:28:05 2013
> New Revision: 174516
>
> URL: http://llvm.org/viewvc/llvm-project?rev=174516&view=rev
> Log:
> [TSan] skip multiple internal frames, if necessary
>
> Modified:
> compiler-rt/trunk/lib/tsan/rtl/tsan_report.cc
> compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
> compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
>
> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_report.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_report.cc?rev=174516&r1=174515&r2=174516&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_report.cc (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_report.cc Wed Feb 6 10:28:05 2013
> @@ -167,9 +167,9 @@ static ReportStack *ChooseSummaryStack(c
> return 0;
> }
>
> -static ReportStack *SkipTsanInternalFrame(ReportStack *ent) {
> - if (FrameIsInternal(ent) && ent->next)
> - return ent->next;
> +ReportStack *SkipTsanInternalFrames(ReportStack *ent) {
> + while (FrameIsInternal(ent) && ent->next)
> + ent = ent->next;
> return ent;
> }
>
> @@ -199,7 +199,7 @@ void PrintReport(const ReportDesc *rep)
> for (uptr i = 0; i < rep->threads.Size(); i++)
> PrintThread(rep->threads[i]);
>
> - if (ReportStack *ent = SkipTsanInternalFrame(ChooseSummaryStack(rep)))
> + if (ReportStack *ent = SkipTsanInternalFrames(ChooseSummaryStack(rep)))
> ReportErrorSummary(rep_typ_str, ent->file, ent->line, ent->func);
>
> Printf("==================\n");
>
> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h?rev=174516&r1=174515&r2=174516&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h Wed Feb 6 10:28:05 2013
> @@ -560,6 +560,7 @@ bool IsFiredSuppression(Context *ctx,
> const StackTrace &trace);
> bool IsExpectedReport(uptr addr, uptr size);
> bool FrameIsInternal(const ReportStack *frame);
> +ReportStack *SkipTsanInternalFrames(ReportStack *ent);
>
> #if defined(TSAN_DEBUG_OUTPUT) && TSAN_DEBUG_OUTPUT >= 1
> # define DPrintf Printf
>
> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc?rev=174516&r1=174515&r2=174516&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc Wed Feb 6 10:28:05
> 2013
> @@ -520,17 +520,14 @@ static bool IsJavaNonsense(const ReportD
> && frame->module == 0)) {
> return true;
> }
> - if (FrameIsInternal(frame)) {
> - frame = frame->next;
> - if (frame == 0
> - || (frame->func == 0 && frame->file == 0 && frame->line == 0
> - && frame->module == 0)) {
> - if (frame) {
> - FiredSuppression supp = {rep->typ, frame->pc};
> - CTX()->fired_suppressions.PushBack(supp);
> - }
> - return true;
> - }
> + frame = SkipTsanInternalFrames(frame);
> + if (frame->next == 0
> + || (frame->func == 0 && frame->file == 0 && frame->line == 0
> + && frame->module == 0)) {
> + CHECK(frame);
> + FiredSuppression supp = {rep->typ, frame->pc};
> + CTX()->fired_suppressions.PushBack(supp);
> + return true;
> }
> }
> return false;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130206/ba6197b4/attachment.html>
More information about the llvm-commits
mailing list