diff options
-rw-r--r-- | llvm/test/tools/sanstats/elf.test | 10 | ||||
-rw-r--r-- | llvm/tools/sanstats/sanstats.cpp | 8 |
2 files changed, 17 insertions, 1 deletions
diff --git a/llvm/test/tools/sanstats/elf.test b/llvm/test/tools/sanstats/elf.test index 44a1268a320..54878a1d526 100644 --- a/llvm/test/tools/sanstats/elf.test +++ b/llvm/test/tools/sanstats/elf.test @@ -25,6 +25,16 @@ # RUN: sanstats %t.stats | FileCheck %s +# Test that if binaries are not in the original location then sanstats +# searches them next to the stats file. +# RUN: mkdir -p %t.dir +# RUN: mv -f %t1.o %t2.o %t.dir +# RUN: sanstats %t.stats | FileCheck %s --check-prefix=INVALID +# RUN: mv -f %t.stats %t.dir/copy.stats +# RUN: cd %t.dir && sanstats copy.stats | FileCheck %s + +# INVALID: <invalid> +# CHECK-NOT: <invalid> # CHECK: 0x0000000000000000 /tmp{{[/\\]}}f.c:1 f1 cfi-vcall 1 # CHECK: 0x0000000000000010 /tmp{{[/\\]}}f.c:2 f2 cfi-nvcall 2 # CHECK: 0x0000000000000020 /tmp{{[/\\]}}f.c:3 f3 cfi-derived-cast 3 diff --git a/llvm/tools/sanstats/sanstats.cpp b/llvm/tools/sanstats/sanstats.cpp index 214aeeab5ab..a345e9f06be 100644 --- a/llvm/tools/sanstats/sanstats.cpp +++ b/llvm/tools/sanstats/sanstats.cpp @@ -15,7 +15,9 @@ #include "llvm/DebugInfo/Symbolize/Symbolize.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorOr.h" +#include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/Path.h" #include "llvm/Transforms/Utils/SanitizerStats.h" #include <stdint.h> @@ -52,7 +54,11 @@ const char *ReadModule(char SizeofPtr, const char *Begin, const char *End) { ++Begin; if (Begin == End) return nullptr; - StringRef Filename(FilenameBegin, Begin - FilenameBegin); + std::string Filename(FilenameBegin, Begin - FilenameBegin); + + if (!llvm::sys::fs::exists(Filename)) + Filename = std::string(llvm::sys::path::parent_path(ClInputFile)) + + std::string(llvm::sys::path::filename(Filename)); ++Begin; if (Begin == End) |