aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-readobj/MachODumper.cpp
diff options
context:
space:
mode:
authorNico Rieck <nico.rieck@gmail.com>2013-04-12 04:01:52 +0000
committerNico Rieck <nico.rieck@gmail.com>2013-04-12 04:01:52 +0000
commitf3f0b79704c57e05e2f2a859c2f6e06cbf684e5a (patch)
treef547a3b180c35bef20e0777132c7577ea2a9519d /llvm/tools/llvm-readobj/MachODumper.cpp
parent9d08f86b9517eaebeaeb9e695e4524b92b16402d (diff)
downloadllvm-f3f0b79704c57e05e2f2a859c2f6e06cbf684e5a.zip
llvm-f3f0b79704c57e05e2f2a859c2f6e06cbf684e5a.tar.gz
llvm-f3f0b79704c57e05e2f2a859c2f6e06cbf684e5a.tar.bz2
Add -expand-relocs to llvm-readobj
This option expands shown relocations from single line to a dictionary format: Relocation { Offset: 0x4 Type: R_386_32 (1) Symbol: sym Info: 0x0 } llvm-svn: 179359
Diffstat (limited to 'llvm/tools/llvm-readobj/MachODumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/MachODumper.cpp38
1 files changed, 26 insertions, 12 deletions
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index a13593b..69f1d63 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -341,18 +341,32 @@ void MachODumper::printRelocation(section_iterator SecI,
const MachOObjectFileBase::RelocationEntry *RE = Obj->getRelocation(DR);
bool IsScattered = Obj->isScattered(RE);
- raw_ostream& OS = W.startLine();
- OS << W.hex(Offset)
- << " " << Obj->isPCRel(RE)
- << " " << Obj->getLength(RE);
- if (IsScattered)
- OS << " n/a";
- else
- OS << " " << RE->getExternal();
- OS << " " << RelocName
- << " " << IsScattered
- << " " << (SymbolName.size() > 0 ? SymbolName : "-")
- << "\n";
+ if (opts::ExpandRelocs) {
+ DictScope Group(W, "Relocation");
+ W.printHex("Offset", Offset);
+ W.printNumber("PCRel", Obj->isPCRel(RE));
+ W.printNumber("Length", Obj->getLength(RE));
+ if (IsScattered)
+ W.printString("Extern", StringRef("N/A"));
+ else
+ W.printNumber("Extern", RE->getExternal());
+ W.printNumber("Type", RelocName, RE->getType());
+ W.printString("Symbol", SymbolName.size() > 0 ? SymbolName : "-");
+ W.printNumber("Scattered", IsScattered);
+ } else {
+ raw_ostream& OS = W.startLine();
+ OS << W.hex(Offset)
+ << " " << Obj->isPCRel(RE)
+ << " " << Obj->getLength(RE);
+ if (IsScattered)
+ OS << " n/a";
+ else
+ OS << " " << RE->getExternal();
+ OS << " " << RelocName
+ << " " << IsScattered
+ << " " << (SymbolName.size() > 0 ? SymbolName : "-")
+ << "\n";
+ }
}
void MachODumper::printSymbols() {