[compiler-rt] r224022 - tsan: don't subtract one from fake PCs
Kostya Serebryany
kcc at google.com
Fri Dec 12 12:39:56 PST 2014
is this testable?
On Thu, Dec 11, 2014 at 8:12 AM, Dmitry Vyukov <dvyukov at google.com> wrote:
> Author: dvyukov
> Date: Thu Dec 11 10:12:16 2014
> New Revision: 224022
>
> URL: http://llvm.org/viewvc/llvm-project?rev=224022&view=rev
> Log:
> tsan: don't subtract one from fake PCs
>
> These are fake and not actual PCs, more like function IDs.
> Pass them to external symbolizer untouched.
>
>
> Modified:
> compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
> compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc
> compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.h
>
> 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=224022&r1=224021&r2=224022&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc Thu Dec 11 10:12:16
> 2014
> @@ -111,13 +111,14 @@ static ReportStack *SymbolizeStack(Stack
> SymbolizedStack *top = nullptr;
> for (uptr si = 0; si < trace.size; si++) {
> const uptr pc = trace.trace[si];
> + uptr pc1 = pc;
> #ifndef SANITIZER_GO
> // We obtain the return address, but we're interested in the previous
> // instruction.
> - const uptr pc1 = StackTrace::GetPreviousInstructionPc(pc);
> + if ((pc & kExternalPCBit) == 0)
> + pc1 = StackTrace::GetPreviousInstructionPc(pc);
> #else
> // FIXME(dvyukov): Go sometimes uses address of a function as top pc.
> - uptr pc1 = pc;
> if (si != trace.size - 1)
> pc1 -= 1;
> #endif
>
> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc?rev=224022&r1=224021&r2=224022&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc Thu Dec 11 10:12:16
> 2014
> @@ -36,10 +36,6 @@ void ExitSymbolizer() {
> thr->ignore_interceptors--;
> }
>
> -// Denotes fake PC values that come from JIT/JAVA/etc.
> -// For such PC values __tsan_symbolize_external() will be called.
> -const uptr kExternalPCBit = 1ULL << 60;
> -
> // May be overriden by JIT/JAVA/etc,
> // whatever produces PCs marked with kExternalPCBit.
> extern "C" bool __tsan_symbolize_external(uptr pc,
>
> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.h?rev=224022&r1=224021&r2=224022&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.h (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.h Thu Dec 11 10:12:16
> 2014
> @@ -18,6 +18,10 @@
>
> namespace __tsan {
>
> +// Denotes fake PC values that come from JIT/JAVA/etc.
> +// For such PC values __tsan_symbolize_external() will be called.
> +const uptr kExternalPCBit = 1ULL << 60;
> +
> void EnterSymbolizer();
> void ExitSymbolizer();
> SymbolizedStack *SymbolizeCode(uptr addr);
>
>
> _______________________________________________
> 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/20141212/ad98c74e/attachment.html>
More information about the llvm-commits
mailing list