Skip to content

Commit 35eebe1

Browse files
committedAug 31, 2015
[llvm-readobj] Dump MachO Dysymtab command.
Example output: File: <stdin> Format: Mach-O 64-bit x86-64 Arch: x86_64 AddressSize: 64bit Dysymtab { ilocalsym: 0 nlocalsym: 6 iextdefsym: 6 nextdefsym: 2 iundefsym: 8 nundefsym: 0 tocoff: 0 ntoc: 0 modtaboff: 0 nmodtab: 0 extrefsymoff: 0 nextrefsyms: 0 indirectsymoff: 0 nindirectsyms: 0 extreloff: 0 nextrel: 0 locreloff: 0 nlocrel: 0 } Differential Revision: http://reviews.llvm.org/D12496 llvm-svn: 246474
1 parent c53c5b1 commit 35eebe1

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed
 

‎llvm/tools/llvm-readobj/MachODumper.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class MachODumper : public ObjDumper {
4343
// MachO-specific.
4444
void printMachODataInCode() override;
4545
void printMachOVersionMin() override;
46+
void printMachODysymtab() override;
4647

4748
private:
4849
template<class MachHeader>
@@ -663,3 +664,30 @@ void MachODumper::printMachOVersionMin() {
663664
}
664665
}
665666
}
667+
668+
void MachODumper::printMachODysymtab() {
669+
for (const auto &Load : Obj->load_commands()) {
670+
if (Load.C.cmd == MachO::LC_DYSYMTAB) {
671+
MachO::dysymtab_command DLC = Obj->getDysymtabLoadCommand();
672+
DictScope Group(W, "Dysymtab");
673+
W.printNumber("ilocalsym", DLC.ilocalsym);
674+
W.printNumber("nlocalsym", DLC.nlocalsym);
675+
W.printNumber("iextdefsym", DLC.iextdefsym);
676+
W.printNumber("nextdefsym", DLC.nextdefsym);
677+
W.printNumber("iundefsym", DLC.iundefsym);
678+
W.printNumber("nundefsym", DLC.nundefsym);
679+
W.printNumber("tocoff", DLC.tocoff);
680+
W.printNumber("ntoc", DLC.ntoc);
681+
W.printNumber("modtaboff", DLC.modtaboff);
682+
W.printNumber("nmodtab", DLC.nmodtab);
683+
W.printNumber("extrefsymoff", DLC.extrefsymoff);
684+
W.printNumber("nextrefsyms", DLC.nextrefsyms);
685+
W.printNumber("indirectsymoff", DLC.indirectsymoff);
686+
W.printNumber("nindirectsyms", DLC.nindirectsyms);
687+
W.printNumber("extreloff", DLC.extreloff);
688+
W.printNumber("nextrel", DLC.nextrel);
689+
W.printNumber("locreloff", DLC.locreloff);
690+
W.printNumber("nlocrel", DLC.nlocrel);
691+
}
692+
}
693+
}

‎llvm/tools/llvm-readobj/ObjDumper.h

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ObjDumper {
5858
// Only implemented for MachO.
5959
virtual void printMachODataInCode() { }
6060
virtual void printMachOVersionMin() { }
61+
virtual void printMachODysymtab() { }
6162

6263
virtual void printStackMap() const = 0;
6364

‎llvm/tools/llvm-readobj/llvm-readobj.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ namespace opts {
191191
cl::opt<bool>
192192
MachOVersionMin("macho-version-min",
193193
cl::desc("Display MachO version min command"));
194+
195+
// -macho-dysymtab
196+
cl::opt<bool>
197+
MachODysymtab("macho-dysymtab",
198+
cl::desc("Display MachO Dysymtab command"));
199+
194200
// -stackmap
195201
cl::opt<bool>
196202
PrintStackMap("stackmap",
@@ -327,6 +333,8 @@ static void dumpObject(const ObjectFile *Obj) {
327333
Dumper->printMachODataInCode();
328334
if (opts::MachOVersionMin)
329335
Dumper->printMachOVersionMin();
336+
if (opts::MachODysymtab)
337+
Dumper->printMachODysymtab();
330338
}
331339
if (opts::PrintStackMap)
332340
Dumper->printStackMap();

0 commit comments

Comments
 (0)
Please sign in to comment.