diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2019-02-11 18:05:48 +0000 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2019-02-11 18:05:48 +0000 |
commit | 5b7ad4272946407d50bd90e1416f6dfbabb0a34a (patch) | |
tree | 6067bcf3c4be821f8efd09075ee49824becf97a7 /llvm/tools/llvm-symbolizer | |
parent | 2e12dce4068f8d167660865d85003ac9b7080897 (diff) | |
download | bcm5719-llvm-5b7ad4272946407d50bd90e1416f6dfbabb0a34a.tar.gz bcm5719-llvm-5b7ad4272946407d50bd90e1416f6dfbabb0a34a.zip |
[DebugInfo] Fix /usr/lib/debug llvm-symbolizer lookup with relative paths
Summary:
rL189250 added a realpath call, and rL352916 because realpath breaks assumptions with some build systems. However, the /usr/lib/debug case has been clarified, falling back to /usr/lib/debug is currently broken if the obj passed in is a relative path. Adding a call to use absolute paths when falling back to /usr/lib/debug fixes that while still not making any realpath assumptions.
This also adds a --fallback-debug-path command line flag for testing (since we probably can't write to /usr/lib/debug from buildbot environments), but was also verified manually:
```
$ rm -f path/to/dwarfdump-test.elf-x86-64
$ strace llvm-symbolizer --obj=relative/path/to/dwarfdump-test.elf-x86-64.debuglink 0x40113f |& grep dwarfdump
```
Lookups went to relative/path/to/dwarfdump-test.elf-x86-64, relative/path/to/.debug/dwarfdump-test.elf-x86-64, and then finally /usr/lib/debug/absolute/path/to/dwarfdump-test.elf-x86-64.
Reviewers: dblaikie, samsonov
Reviewed By: dblaikie
Subscribers: krytarowski, aprantl, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D57916
llvm-svn: 353730
Diffstat (limited to 'llvm/tools/llvm-symbolizer')
-rw-r--r-- | llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp index 0b0b8a68a4a..8ff7a22a71a 100644 --- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -143,6 +143,10 @@ static cl::list<std::string> ClInputAddresses(cl::Positional, cl::desc("<input addresses>..."), cl::ZeroOrMore); +static cl::opt<std::string> + ClFallbackDebugPath("fallback-debug-path", cl::init(""), + cl::desc("Fallback path for debug binaries.")); + template<typename T> static bool error(Expected<T> &ResOrErr) { if (ResOrErr) @@ -234,7 +238,8 @@ int main(int argc, char **argv) { ClDemangle = !ClNoDemangle; LLVMSymbolizer::Options Opts(ClPrintFunctions, ClUseSymbolTable, ClDemangle, - ClUseRelativeAddress, ClDefaultArch); + ClUseRelativeAddress, ClDefaultArch, + ClFallbackDebugPath); for (const auto &hint : ClDsymHint) { if (sys::path::extension(hint) == ".dSYM") { |