From: Davide Italiano Date: Thu, 13 Jul 2017 00:49:03 +0000 (+0000) Subject: [sanstats] Print the correct line information. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b0e9b49e0d5b044734b745f96593955c06408437;p=llvm [sanstats] Print the correct line information. The instrumentation tracks the return address and not that of the call so we remove one to compensate. Thanks for Peter Collingbourne for confirming the analysis of the problem. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307871 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/sanstats/Inputs/debuginfo.stats b/test/tools/sanstats/Inputs/debuginfo.stats new file mode 100644 index 00000000000..45de79be3a7 Binary files /dev/null and b/test/tools/sanstats/Inputs/debuginfo.stats differ diff --git a/test/tools/sanstats/debuginfo.test b/test/tools/sanstats/debuginfo.test new file mode 100644 index 00000000000..6585ff75310 --- /dev/null +++ b/test/tools/sanstats/debuginfo.test @@ -0,0 +1,4 @@ +# RUN: sanstats %p/Inputs/debuginfo.stats | FileCheck %s + +# CHECK: stats.cpp:23 vcall.cfi cfi-vcall 37 +# CHECK: stats.cpp:28 nvcall.cfi cfi-nvcall 51 diff --git a/tools/sanstats/sanstats.cpp b/tools/sanstats/sanstats.cpp index b2216eab119..4463c0f0e48 100644 --- a/tools/sanstats/sanstats.cpp +++ b/tools/sanstats/sanstats.cpp @@ -76,8 +76,11 @@ const char *ReadModule(char SizeofPtr, const char *Begin, const char *End) { if (Begin == End) return nullptr; + // As the instrumentation tracks the return address and not + // the address of the call to `__sanitizer_stats_report` we + // remove one from the address to get the correct DI. if (Expected LineInfo = - Symbolizer.symbolizeCode(Filename, Addr)) { + Symbolizer.symbolizeCode(Filename, Addr - 1)) { llvm::outs() << LineInfo->FileName << ':' << LineInfo->Line << ' ' << LineInfo->FunctionName << ' '; } else {