From 536b7f4575d7b8a2dded7d4c1ccfe6c2cfde745b Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 11 Jun 2019 02:32:27 +0000 Subject: [PATCH] Symbolize: Make DWPName a symbolizer option instead of an argument to symbolize{,Inlined}Code. This makes the interface simpler and more consistent with the interface for .dSYM files and fixes a bug where llvm-symbolizer would not read the dwp if it was asked to symbolize data before symbolizing code. Differential Revision: https://reviews.llvm.org/D63114 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363025 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/DebugInfo/Symbolize/Symbolize.h | 9 ++++----- lib/DebugInfo/Symbolize/Symbolize.cpp | 18 ++++++++---------- .../tools/llvm-symbolizer/split-dwarf-dwp.test | 5 +++-- tools/llvm-symbolizer/llvm-symbolizer.cpp | 10 ++++------ 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/include/llvm/DebugInfo/Symbolize/Symbolize.h b/include/llvm/DebugInfo/Symbolize/Symbolize.h index 773b01c8212..c954cc64908 100644 --- a/include/llvm/DebugInfo/Symbolize/Symbolize.h +++ b/include/llvm/DebugInfo/Symbolize/Symbolize.h @@ -42,6 +42,7 @@ public: std::string DefaultArch; std::vector DsymHints; std::string FallbackDebugPath; + std::string DWPName; }; LLVMSymbolizer() = default; @@ -52,12 +53,10 @@ public: } Expected symbolizeCode(const std::string &ModuleName, - object::SectionedAddress ModuleOffset, - StringRef DWPName = ""); + object::SectionedAddress ModuleOffset); Expected symbolizeInlinedCode(const std::string &ModuleName, - object::SectionedAddress ModuleOffset, - StringRef DWPName = ""); + object::SectionedAddress ModuleOffset); Expected symbolizeData(const std::string &ModuleName, object::SectionedAddress ModuleOffset); void flush(); @@ -76,7 +75,7 @@ private: /// only reported once. Subsequent calls to get module info for a module that /// failed to load will return nullptr. Expected - getOrCreateModuleInfo(const std::string &ModuleName, StringRef DWPName = ""); + getOrCreateModuleInfo(const std::string &ModuleName); ObjectFile *lookUpDsymFile(const std::string &Path, const MachOObjectFile *ExeObj, diff --git a/lib/DebugInfo/Symbolize/Symbolize.cpp b/lib/DebugInfo/Symbolize/Symbolize.cpp index 00e4139c0ba..27632a10bad 100644 --- a/lib/DebugInfo/Symbolize/Symbolize.cpp +++ b/lib/DebugInfo/Symbolize/Symbolize.cpp @@ -53,10 +53,9 @@ namespace symbolize { Expected LLVMSymbolizer::symbolizeCode(const std::string &ModuleName, - object::SectionedAddress ModuleOffset, - StringRef DWPName) { + object::SectionedAddress ModuleOffset) { SymbolizableModule *Info; - if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName, DWPName)) + if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName)) Info = InfoOrErr.get(); else return InfoOrErr.takeError(); @@ -80,10 +79,9 @@ LLVMSymbolizer::symbolizeCode(const std::string &ModuleName, Expected LLVMSymbolizer::symbolizeInlinedCode(const std::string &ModuleName, - object::SectionedAddress ModuleOffset, - StringRef DWPName) { + object::SectionedAddress ModuleOffset) { SymbolizableModule *Info; - if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName, DWPName)) + if (auto InfoOrErr = getOrCreateModuleInfo(ModuleName)) Info = InfoOrErr.get(); else return InfoOrErr.takeError(); @@ -378,8 +376,7 @@ LLVMSymbolizer::getOrCreateObject(const std::string &Path, } Expected -LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName, - StringRef DWPName) { +LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) { const auto &I = Modules.find(ModuleName); if (I != Modules.end()) { return I->second.get(); @@ -425,8 +422,9 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName, } } if (!Context) - Context = DWARFContext::create(*Objects.second, nullptr, - DWARFContext::defaultErrorHandler, DWPName); + Context = + DWARFContext::create(*Objects.second, nullptr, + DWARFContext::defaultErrorHandler, Opts.DWPName); assert(Context); auto InfoOrErr = SymbolizableObjectFile::create(Objects.first, std::move(Context)); diff --git a/test/tools/llvm-symbolizer/split-dwarf-dwp.test b/test/tools/llvm-symbolizer/split-dwarf-dwp.test index 71ecca436eb..cadc5592961 100644 --- a/test/tools/llvm-symbolizer/split-dwarf-dwp.test +++ b/test/tools/llvm-symbolizer/split-dwarf-dwp.test @@ -3,8 +3,9 @@ RUN: mkdir -p %t RUN: cp %p/Inputs/split-dwarf-dwp.o %t/split-dwarf-dwp-different-name.o -RUN: llvm-symbolizer --dwp=%p/Inputs/split-dwarf-dwp.o.dwp \ -RUN: --obj=%t/split-dwarf-dwp-different-name.o 0x54 | FileCheck %s +RUN: echo -e 'DATA 0\n0x54' | \ +RUN: llvm-symbolizer --dwp=%p/Inputs/split-dwarf-dwp.o.dwp \ +RUN: --obj=%t/split-dwarf-dwp-different-name.o | FileCheck %s CHECK: f2 CHECK-NEXT: split-dwarf-dwp.cpp:3:3 diff --git a/tools/llvm-symbolizer/llvm-symbolizer.cpp b/tools/llvm-symbolizer/llvm-symbolizer.cpp index 93270e61b27..00b8931c740 100644 --- a/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -224,8 +224,7 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer, Printer << (error(ResOrErr) ? DIGlobal() : ResOrErr.get()); } else if (ClPrintInlining) { auto ResOrErr = Symbolizer.symbolizeInlinedCode( - ModuleName, {Offset, object::SectionedAddress::UndefSection}, - ClDwpName); + ModuleName, {Offset, object::SectionedAddress::UndefSection}); Printer << (error(ResOrErr) ? DIInliningInfo() : ResOrErr.get()); } else if (ClOutputStyle == DIPrinter::OutputStyle::GNU) { // With ClPrintFunctions == FunctionNameKind::LinkageName (default) @@ -235,13 +234,11 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer, // behavior of addr2line. Symbolizer.symbolizeInlinedCode() overrides only // the topmost function, which suits our needs better. auto ResOrErr = Symbolizer.symbolizeInlinedCode( - ModuleName, {Offset, object::SectionedAddress::UndefSection}, - ClDwpName); + ModuleName, {Offset, object::SectionedAddress::UndefSection}); Printer << (error(ResOrErr) ? DILineInfo() : ResOrErr.get().getFrame(0)); } else { auto ResOrErr = Symbolizer.symbolizeCode( - ModuleName, {Offset, object::SectionedAddress::UndefSection}, - ClDwpName); + ModuleName, {Offset, object::SectionedAddress::UndefSection}); Printer << (error(ResOrErr) ? DILineInfo() : ResOrErr.get()); } if (ClOutputStyle == DIPrinter::OutputStyle::LLVM) @@ -275,6 +272,7 @@ int main(int argc, char **argv) { Opts.RelativeAddresses = ClUseRelativeAddress; Opts.DefaultArch = ClDefaultArch; Opts.FallbackDebugPath = ClFallbackDebugPath; + Opts.DWPName = ClDwpName; for (const auto &hint : ClDsymHint) { if (sys::path::extension(hint) == ".dSYM") { -- 2.40.0