summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-symbolizer
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2019-02-11 18:05:48 +0000
committerJordan Rupprecht <rupprecht@google.com>2019-02-11 18:05:48 +0000
commit5b7ad4272946407d50bd90e1416f6dfbabb0a34a (patch)
tree6067bcf3c4be821f8efd09075ee49824becf97a7 /llvm/tools/llvm-symbolizer
parent2e12dce4068f8d167660865d85003ac9b7080897 (diff)
downloadbcm5719-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.cpp7
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") {
OpenPOWER on IntegriCloud