Skip to content

Commit

Permalink
[llvm-readobj] Dump MachO Dysymtab command.
Browse files Browse the repository at this point in the history
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
dcci committed Aug 31, 2015
1 parent c53c5b1 commit 35eebe1
Showing 3 changed files with 37 additions and 0 deletions.
28 changes: 28 additions & 0 deletions llvm/tools/llvm-readobj/MachODumper.cpp
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ class MachODumper : public ObjDumper {
// MachO-specific.
void printMachODataInCode() override;
void printMachOVersionMin() override;
void printMachODysymtab() override;

private:
template<class MachHeader>
@@ -663,3 +664,30 @@ void MachODumper::printMachOVersionMin() {
}
}
}

void MachODumper::printMachODysymtab() {
for (const auto &Load : Obj->load_commands()) {
if (Load.C.cmd == MachO::LC_DYSYMTAB) {
MachO::dysymtab_command DLC = Obj->getDysymtabLoadCommand();
DictScope Group(W, "Dysymtab");
W.printNumber("ilocalsym", DLC.ilocalsym);
W.printNumber("nlocalsym", DLC.nlocalsym);
W.printNumber("iextdefsym", DLC.iextdefsym);
W.printNumber("nextdefsym", DLC.nextdefsym);
W.printNumber("iundefsym", DLC.iundefsym);
W.printNumber("nundefsym", DLC.nundefsym);
W.printNumber("tocoff", DLC.tocoff);
W.printNumber("ntoc", DLC.ntoc);
W.printNumber("modtaboff", DLC.modtaboff);
W.printNumber("nmodtab", DLC.nmodtab);
W.printNumber("extrefsymoff", DLC.extrefsymoff);
W.printNumber("nextrefsyms", DLC.nextrefsyms);
W.printNumber("indirectsymoff", DLC.indirectsymoff);
W.printNumber("nindirectsyms", DLC.nindirectsyms);
W.printNumber("extreloff", DLC.extreloff);
W.printNumber("nextrel", DLC.nextrel);
W.printNumber("locreloff", DLC.locreloff);
W.printNumber("nlocrel", DLC.nlocrel);
}
}
}
1 change: 1 addition & 0 deletions llvm/tools/llvm-readobj/ObjDumper.h
Original file line number Diff line number Diff line change
@@ -58,6 +58,7 @@ class ObjDumper {
// Only implemented for MachO.
virtual void printMachODataInCode() { }
virtual void printMachOVersionMin() { }
virtual void printMachODysymtab() { }

virtual void printStackMap() const = 0;

8 changes: 8 additions & 0 deletions llvm/tools/llvm-readobj/llvm-readobj.cpp
Original file line number Diff line number Diff line change
@@ -191,6 +191,12 @@ namespace opts {
cl::opt<bool>
MachOVersionMin("macho-version-min",
cl::desc("Display MachO version min command"));

// -macho-dysymtab
cl::opt<bool>
MachODysymtab("macho-dysymtab",
cl::desc("Display MachO Dysymtab command"));

// -stackmap
cl::opt<bool>
PrintStackMap("stackmap",
@@ -327,6 +333,8 @@ static void dumpObject(const ObjectFile *Obj) {
Dumper->printMachODataInCode();
if (opts::MachOVersionMin)
Dumper->printMachOVersionMin();
if (opts::MachODysymtab)
Dumper->printMachODysymtab();
}
if (opts::PrintStackMap)
Dumper->printStackMap();

0 comments on commit 35eebe1

Please sign in to comment.