summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2019-06-11 02:32:27 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2019-06-11 02:32:27 +0000
commite5bdedac9dc5ecb240a56dcb19e5fd923af6c353 (patch)
tree226ae5799cf45deecdfcf6178bfeef381f480389
parenta2048f868dd2c7b642131005a4c031722de073d6 (diff)
downloadbcm5719-llvm-e5bdedac9dc5ecb240a56dcb19e5fd923af6c353.tar.gz
bcm5719-llvm-e5bdedac9dc5ecb240a56dcb19e5fd923af6c353.zip
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 llvm-svn: 363025
-rw-r--r--llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h9
-rw-r--r--llvm/lib/DebugInfo/Symbolize/Symbolize.cpp18
-rw-r--r--llvm/test/tools/llvm-symbolizer/split-dwarf-dwp.test5
-rw-r--r--llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp10
4 files changed, 19 insertions, 23 deletions
diff --git a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
index 773b01c8212..c954cc64908 100644
--- a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
+++ b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
@@ -42,6 +42,7 @@ public:
std::string DefaultArch;
std::vector<std::string> DsymHints;
std::string FallbackDebugPath;
+ std::string DWPName;
};
LLVMSymbolizer() = default;
@@ -52,12 +53,10 @@ public:
}
Expected<DILineInfo> symbolizeCode(const std::string &ModuleName,
- object::SectionedAddress ModuleOffset,
- StringRef DWPName = "");
+ object::SectionedAddress ModuleOffset);
Expected<DIInliningInfo>
symbolizeInlinedCode(const std::string &ModuleName,
- object::SectionedAddress ModuleOffset,
- StringRef DWPName = "");
+ object::SectionedAddress ModuleOffset);
Expected<DIGlobal> 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<SymbolizableModule *>
- getOrCreateModuleInfo(const std::string &ModuleName, StringRef DWPName = "");
+ getOrCreateModuleInfo(const std::string &ModuleName);
ObjectFile *lookUpDsymFile(const std::string &Path,
const MachOObjectFile *ExeObj,
diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
index 00e4139c0ba..27632a10bad 100644
--- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
+++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
@@ -53,10 +53,9 @@ namespace symbolize {
Expected<DILineInfo>
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<DIInliningInfo>
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<SymbolizableModule *>
-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/llvm/test/tools/llvm-symbolizer/split-dwarf-dwp.test b/llvm/test/tools/llvm-symbolizer/split-dwarf-dwp.test
index 71ecca436eb..cadc5592961 100644
--- a/llvm/test/tools/llvm-symbolizer/split-dwarf-dwp.test
+++ b/llvm/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/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index 93270e61b27..00b8931c740 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/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") {
OpenPOWER on IntegriCloud