Index: tools/llvm-readobj/MachODumper.cpp =================================================================== --- tools/llvm-readobj/MachODumper.cpp +++ tools/llvm-readobj/MachODumper.cpp @@ -45,6 +45,7 @@ void printMachOVersionMin() override; void printMachODysymtab() override; void printMachOSegment() override; + void printMachOIndirectSymbols() override; private: template @@ -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)); + } + } + } +} Index: tools/llvm-readobj/ObjDumper.h =================================================================== --- tools/llvm-readobj/ObjDumper.h +++ tools/llvm-readobj/ObjDumper.h @@ -60,6 +60,7 @@ virtual void printMachOVersionMin() { } virtual void printMachODysymtab() { } virtual void printMachOSegment() { } + virtual void printMachOIndirectSymbols() { } virtual void printStackMap() const = 0; Index: tools/llvm-readobj/llvm-readobj.cpp =================================================================== --- tools/llvm-readobj/llvm-readobj.cpp +++ tools/llvm-readobj/llvm-readobj.cpp @@ -187,6 +187,11 @@ MachODataInCode("macho-data-in-code", cl::desc("Display MachO Data in Code command")); + // -macho-indirect-symbols + cl::opt + MachOIndirectSymbols("macho-indirect-symbols", + cl::desc("Display MachO indirect symbols")); + // -macho-segment cl::opt MachOSegment("macho-segment", @@ -336,6 +341,8 @@ if (Obj->isMachO()) { if (opts::MachODataInCode) Dumper->printMachODataInCode(); + if (opts::MachOIndirectSymbols) + Dumper->printMachOIndirectSymbols(); if (opts::MachOSegment) Dumper->printMachOSegment(); if (opts::MachOVersionMin)