<p dir="ltr">LGTM, and thanks again for doing all this. </p>
<br><div class="gmail_quote"><div dir="ltr">On Wed, Sep 2, 2015, 11:27 AM Davide Italiano <<a href="mailto:dccitaliano@gmail.com">dccitaliano@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">davide created this revision.<br>
davide added reviewers: grosbach, rafael, echristo.<br>
davide added a subscriber: llvm-commits.<br>
davide set the repository for this revision to rL LLVM.<br>
<br>
This is *probably* the last bit we need. After this lands, it's just a lot of fun converting all the remaining tests to the new format.<br>
<br>
Also, example output:<br>
<br>
File: <stdin><br>
Format: Mach-O 32-bit i386<br>
Arch: i386<br>
AddressSize: 32bit<br>
Indirect Symbols {<br>
Number: 6<br>
Symbols [<br>
Entry {<br>
Entry Index: 0<br>
Symbol Index: 0x4<br>
}<br>
Entry {<br>
Entry Index: 1<br>
Symbol Index: 0x0<br>
}<br>
Entry {<br>
Entry Index: 2<br>
Symbol Index: 0x1<br>
}<br>
Entry {<br>
Entry Index: 3<br>
Symbol Index: 0x5<br>
}<br>
Entry {<br>
Entry Index: 4<br>
Symbol Index: 0x80000000<br>
}<br>
Entry {<br>
Entry Index: 5<br>
Symbol Index: 0xC0000000<br>
}<br>
]<br>
}<br>
<br>
<br>
Repository:<br>
rL LLVM<br>
<br>
<a href="http://reviews.llvm.org/D12570" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12570</a><br>
<br>
Files:<br>
tools/llvm-readobj/MachODumper.cpp<br>
tools/llvm-readobj/ObjDumper.h<br>
tools/llvm-readobj/llvm-readobj.cpp<br>
<br>
Index: tools/llvm-readobj/llvm-readobj.cpp<br>
===================================================================<br>
--- tools/llvm-readobj/llvm-readobj.cpp<br>
+++ tools/llvm-readobj/llvm-readobj.cpp<br>
@@ -187,6 +187,11 @@<br>
MachODataInCode("macho-data-in-code",<br>
cl::desc("Display MachO Data in Code command"));<br>
<br>
+ // -macho-indirect-symbols<br>
+ cl::opt<bool><br>
+ MachOIndirectSymbols("macho-indirect-symbols",<br>
+ cl::desc("Display MachO indirect symbols"));<br>
+<br>
// -macho-segment<br>
cl::opt<bool><br>
MachOSegment("macho-segment",<br>
@@ -336,6 +341,8 @@<br>
if (Obj->isMachO()) {<br>
if (opts::MachODataInCode)<br>
Dumper->printMachODataInCode();<br>
+ if (opts::MachOIndirectSymbols)<br>
+ Dumper->printMachOIndirectSymbols();<br>
if (opts::MachOSegment)<br>
Dumper->printMachOSegment();<br>
if (opts::MachOVersionMin)<br>
Index: tools/llvm-readobj/ObjDumper.h<br>
===================================================================<br>
--- tools/llvm-readobj/ObjDumper.h<br>
+++ tools/llvm-readobj/ObjDumper.h<br>
@@ -60,6 +60,7 @@<br>
virtual void printMachOVersionMin() { }<br>
virtual void printMachODysymtab() { }<br>
virtual void printMachOSegment() { }<br>
+ virtual void printMachOIndirectSymbols() { }<br>
<br>
virtual void printStackMap() const = 0;<br>
<br>
Index: tools/llvm-readobj/MachODumper.cpp<br>
===================================================================<br>
--- tools/llvm-readobj/MachODumper.cpp<br>
+++ tools/llvm-readobj/MachODumper.cpp<br>
@@ -45,6 +45,7 @@<br>
void printMachOVersionMin() override;<br>
void printMachODysymtab() override;<br>
void printMachOSegment() override;<br>
+ void printMachOIndirectSymbols() override;<br>
<br>
private:<br>
template<class MachHeader><br>
@@ -774,3 +775,19 @@<br>
}<br>
}<br>
}<br>
+<br>
+void MachODumper::printMachOIndirectSymbols() {<br>
+ for (const auto &Load : Obj->load_commands()) {<br>
+ if (Load.C.cmd == MachO::LC_DYSYMTAB) {<br>
+ MachO::dysymtab_command DLC = Obj->getDysymtabLoadCommand();<br>
+ DictScope Group(W, "Indirect Symbols");<br>
+ W.printNumber("Number", DLC.nindirectsyms);<br>
+ ListScope D(W, "Symbols");<br>
+ for (unsigned i = 0; i < DLC.nindirectsyms; ++i) {<br>
+ DictScope Group(W, "Entry");<br>
+ W.printNumber("Entry Index", i);<br>
+ W.printHex("Symbol Index", Obj->getIndirectSymbolTableEntry(DLC, i));<br>
+ }<br>
+ }<br>
+ }<br>
+}<br>
<br>
<br>
</blockquote></div>