]> granicus.if.org Git - llvm/commitdiff
Updated llvm-objdump for arm64 Mach-O MH_KEXT_BUNDLE file types so
authorKevin Enderby <enderby@apple.com>
Thu, 22 Jun 2017 19:50:56 +0000 (19:50 +0000)
committerKevin Enderby <enderby@apple.com>
Thu, 22 Jun 2017 19:50:56 +0000 (19:50 +0000)
it symbolically disassembles the __text section from the
__TEXT_EXEC segment not the usual __TEXT segment by default.

rdar://30590208

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306046 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-objdump/AArch64/Inputs/kextbundle.macho-aarch64 [new file with mode: 0755]
test/tools/llvm-objdump/AArch64/macho-kextbundle.test [new file with mode: 0644]
tools/llvm-objdump/MachODump.cpp

diff --git a/test/tools/llvm-objdump/AArch64/Inputs/kextbundle.macho-aarch64 b/test/tools/llvm-objdump/AArch64/Inputs/kextbundle.macho-aarch64
new file mode 100755 (executable)
index 0000000..4a21c2e
Binary files /dev/null and b/test/tools/llvm-objdump/AArch64/Inputs/kextbundle.macho-aarch64 differ
diff --git a/test/tools/llvm-objdump/AArch64/macho-kextbundle.test b/test/tools/llvm-objdump/AArch64/macho-kextbundle.test
new file mode 100644 (file)
index 0000000..8919455
--- /dev/null
@@ -0,0 +1,9 @@
+RUN: llvm-objdump -d -m -no-show-raw-insn %p/Inputs/kextbundle.macho-aarch64 | FileCheck %s
+
+CHECK: (__TEXT_EXEC,__text) section
+CHECK: _foo:
+CHECK:     4000:       stp     x29, x30, [sp, #-16]!
+CHECK:     4004:       mov      x29, sp
+CHECK:     4008:       bl      _bar.stub
+CHECK:     400c:       ldp     x29, x30, [sp], #16
+CHECK:     4010:       ret
index ec4c44a2665b44d69f5bbda85be31880278ed402..05c2c3f7c4cbd7edefe287990ce46a08571ecad1 100644 (file)
@@ -1224,8 +1224,13 @@ static void ProcessMachO(StringRef Name, MachOObjectFile *MachOOF,
     if (Error Err = MachOOF->checkSymbolTable())
       report_error(ArchiveName, FileName, std::move(Err), ArchitectureName);
 
-  if (Disassemble)
-    DisassembleMachO(FileName, MachOOF, "__TEXT", "__text");
+  if (Disassemble) {
+    if (MachOOF->getHeader().filetype == MachO::MH_KEXT_BUNDLE &&
+       MachOOF->getHeader().cputype == MachO::CPU_TYPE_ARM64)
+      DisassembleMachO(FileName, MachOOF, "__TEXT_EXEC", "__text");
+    else
+      DisassembleMachO(FileName, MachOOF, "__TEXT", "__text");
+  }
   if (IndirectSymbols)
     PrintIndirectSymbols(MachOOF, !NonVerbose);
   if (DataInCode)