llvm-objdump: extend __mh_execute_header handling to other special syms
authorTim Northover <tnorthover@apple.com>
Thu, 14 Jul 2016 23:13:03 +0000 (23:13 +0000)
committerTim Northover <tnorthover@apple.com>
Thu, 14 Jul 2016 23:13:03 +0000 (23:13 +0000)
We don't need to print any of the special __mh_*_header symbols when
disassembling. Since they point at the beginning of the segment (not where the
actual code is) they're pretty misleading.

Should also fix lld bots.

llvm-svn: 275498

llvm/test/tools/llvm-objdump/ARM/Inputs/mh_dylib_header.macho-arm [new file with mode: 0755]
llvm/test/tools/llvm-objdump/ARM/mh_dylib_header.test [new file with mode: 0644]
llvm/tools/llvm-objdump/MachODump.cpp

diff --git a/llvm/test/tools/llvm-objdump/ARM/Inputs/mh_dylib_header.macho-arm b/llvm/test/tools/llvm-objdump/ARM/Inputs/mh_dylib_header.macho-arm
new file mode 100755 (executable)
index 0000000..5e73829
Binary files /dev/null and b/llvm/test/tools/llvm-objdump/ARM/Inputs/mh_dylib_header.macho-arm differ
diff --git a/llvm/test/tools/llvm-objdump/ARM/mh_dylib_header.test b/llvm/test/tools/llvm-objdump/ARM/mh_dylib_header.test
new file mode 100644 (file)
index 0000000..4740803
--- /dev/null
@@ -0,0 +1,7 @@
+RUN: llvm-objdump -d -macho %p/Inputs/mh_dylib_header.macho-arm
+
+CHECK: _t1:
+CHECK:     movw r0, #4133
+
+CHECK: _a1:
+CHECK:     bx lr
index 991ccee..4d950f1 100644 (file)
@@ -6708,11 +6708,13 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
         outs() << "-dis-symname: __mh_execute_header not in any section\n";
         return;
       }
-      // When this code is trying to disassemble a symbol at a time and in the case
-      // there is only the __mh_execute_header symbol left as in a stripped
-      // executable, we need to deal with this by ignoring this symbol so the whole
-      // section is disassembled and this symbol is then not displayed.
-      if (SymName == "__mh_execute_header")
+      // When this code is trying to disassemble a symbol at a time and in the
+      // case there is only the __mh_execute_header symbol left as in a stripped
+      // executable, we need to deal with this by ignoring this symbol so the
+      // whole section is disassembled and this symbol is then not displayed.
+      if (SymName == "__mh_execute_header" || SymName == "__mh_dylib_header" ||
+          SymName == "__mh_bundle_header" || SymName == "__mh_object_header" ||
+          SymName == "__mh_preload_header" || SymName == "__mh_dylinker_header")
         continue;
 
       // If we are only disassembling one symbol see if this is that symbol.