[llvm] r246789 - [llvm-readobj] Dump MachO indirect symbols.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 3 11:10:28 PDT 2015
Author: davide
Date: Thu Sep 3 13:10:28 2015
New Revision: 246789
URL: http://llvm.org/viewvc/llvm-project?rev=246789&view=rev
Log:
[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
Modified:
llvm/trunk/tools/llvm-readobj/MachODumper.cpp
llvm/trunk/tools/llvm-readobj/ObjDumper.h
llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=246789&r1=246788&r2=246789&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Thu Sep 3 13:10:28 2015
@@ -45,6 +45,7 @@ public:
void printMachOVersionMin() override;
void printMachODysymtab() override;
void printMachOSegment() override;
+ void printMachOIndirectSymbols() override;
private:
template<class MachHeader>
@@ -774,3 +775,19 @@ void MachODumper::printMachOSegment() {
}
}
}
+
+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));
+ }
+ }
+ }
+}
Modified: llvm/trunk/tools/llvm-readobj/ObjDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ObjDumper.h?rev=246789&r1=246788&r2=246789&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ObjDumper.h (original)
+++ llvm/trunk/tools/llvm-readobj/ObjDumper.h Thu Sep 3 13:10:28 2015
@@ -60,6 +60,7 @@ public:
virtual void printMachOVersionMin() { }
virtual void printMachODysymtab() { }
virtual void printMachOSegment() { }
+ virtual void printMachOIndirectSymbols() { }
virtual void printStackMap() const = 0;
Modified: llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp?rev=246789&r1=246788&r2=246789&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp Thu Sep 3 13:10:28 2015
@@ -187,6 +187,11 @@ namespace opts {
MachODataInCode("macho-data-in-code",
cl::desc("Display MachO Data in Code command"));
+ // -macho-indirect-symbols
+ cl::opt<bool>
+ MachOIndirectSymbols("macho-indirect-symbols",
+ cl::desc("Display MachO indirect symbols"));
+
// -macho-segment
cl::opt<bool>
MachOSegment("macho-segment",
@@ -336,6 +341,8 @@ static void dumpObject(const ObjectFile
if (Obj->isMachO()) {
if (opts::MachODataInCode)
Dumper->printMachODataInCode();
+ if (opts::MachOIndirectSymbols)
+ Dumper->printMachOIndirectSymbols();
if (opts::MachOSegment)
Dumper->printMachOSegment();
if (opts::MachOVersionMin)
More information about the llvm-commits
mailing list