[llvm-readobj] Dump MachO indirect symbols.
Example output:
File: <stdin>
Format: Mach-O 32-bit i386
Arch: i386
AddressSize: 32bit
Indirect Symbols {
Number: 3
Symbols [
Entry {
Entry Index: 0
Symbol Index: 0x4
}
Entry {
Entry Index: 1
Symbol Index: 0x0
}
Entry {
Entry Index: 2
Symbol Index: 0x1
}
]
}
Differential Revision: http://reviews.llvm.org/D12570
llvm-svn: 246789
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index a7c5d23..80c45de 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -45,6 +45,7 @@
void printMachOVersionMin() override;
void printMachODysymtab() override;
void printMachOSegment() override;
+ void printMachOIndirectSymbols() override;
private:
template<class MachHeader>
@@ -774,3 +775,19 @@
}
}
}
+
+void MachODumper::printMachOIndirectSymbols() {
+ for (const auto &Load : Obj->load_commands()) {
+ if (Load.C.cmd == MachO::LC_DYSYMTAB) {
+ MachO::dysymtab_command DLC = Obj->getDysymtabLoadCommand();
+ DictScope Group(W, "Indirect Symbols");
+ W.printNumber("Number", DLC.nindirectsyms);
+ ListScope D(W, "Symbols");
+ for (unsigned i = 0; i < DLC.nindirectsyms; ++i) {
+ DictScope Group(W, "Entry");
+ W.printNumber("Entry Index", i);
+ W.printHex("Symbol Index", Obj->getIndirectSymbolTableEntry(DLC, i));
+ }
+ }
+ }
+}