diff options
author | Davide Italiano <davide@freebsd.org> | 2015-08-31 19:32:31 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2015-08-31 19:32:31 +0000 |
commit | 35eebe13fc81dc7e6e9b543b0e4e46eb9ab57595 (patch) | |
tree | 1ed367774e655b1a0b338a1ab304b4445cfc2d7c /llvm/tools/llvm-readobj | |
parent | c53c5b13be1fb7295285dde39981a315d1d9acf3 (diff) | |
download | bcm5719-llvm-35eebe13fc81dc7e6e9b543b0e4e46eb9ab57595.tar.gz bcm5719-llvm-35eebe13fc81dc7e6e9b543b0e4e46eb9ab57595.zip |
[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
Diffstat (limited to 'llvm/tools/llvm-readobj')
-rw-r--r-- | llvm/tools/llvm-readobj/MachODumper.cpp | 28 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/ObjDumper.h | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 8 |
3 files changed, 37 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp index 57db9ed7b2d..e7cda4d84d4 100644 --- a/llvm/tools/llvm-readobj/MachODumper.cpp +++ b/llvm/tools/llvm-readobj/MachODumper.cpp @@ -43,6 +43,7 @@ public: // 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); + } + } +} diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/ObjDumper.h index 03a71b82ba6..22051708efa 100644 --- a/llvm/tools/llvm-readobj/ObjDumper.h +++ b/llvm/tools/llvm-readobj/ObjDumper.h @@ -58,6 +58,7 @@ public: // Only implemented for MachO. virtual void printMachODataInCode() { } virtual void printMachOVersionMin() { } + virtual void printMachODysymtab() { } virtual void printStackMap() const = 0; diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index d21303192a3..c0e6add4f2c 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -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(); |