[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
This commit is contained in:
Davide Italiano
2017-07-13 00:49:03 +00:00
parent dd70def46c
commit b0e9b49e0d
3 changed files with 8 additions and 1 deletions

Binary file not shown.

View File

@@ -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

View File

@@ -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<DILineInfo> LineInfo =
Symbolizer.symbolizeCode(Filename, Addr)) {
Symbolizer.symbolizeCode(Filename, Addr - 1)) {
llvm::outs() << LineInfo->FileName << ':' << LineInfo->Line << ' '
<< LineInfo->FunctionName << ' ';
} else {