<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>