aboutsummaryrefslogtreecommitdiff
path: root/test/tools/llvm-objdump
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-04-16 16:01:22 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-04-16 16:01:22 +0000
commit71d5a2540a98c81f5bcaeb48805e0e2881f530ef (patch)
tree5343938942df402b49ec7300a1c25a2d4ccd5821 /test/tools/llvm-objdump
parent31bbf64f3a4974a2d6c8b3b27ad2f519caf74057 (diff)
Diffstat (limited to 'test/tools/llvm-objdump')
-rw-r--r--test/tools/llvm-objdump/AArch64/Inputs/print-armv8crypto.obj.macho-aarch64bin0 -> 316 bytes
-rw-r--r--test/tools/llvm-objdump/AArch64/mach-print-armv8crypto.test3
-rw-r--r--test/tools/llvm-objdump/AArch64/macho-print-mrs.test2
-rw-r--r--test/tools/llvm-objdump/AMDGPU/Inputs/source-lines.cl6
-rw-r--r--test/tools/llvm-objdump/AMDGPU/lit.local.cfg2
-rw-r--r--test/tools/llvm-objdump/AMDGPU/source-lines.ll109
-rw-r--r--test/tools/llvm-objdump/ARM/Inputs/divs.macho-armv7sbin0 -> 156 bytes
-rw-r--r--test/tools/llvm-objdump/ARM/macho-nomcpu-armv7s.test3
-rw-r--r--test/tools/llvm-objdump/ARM/v5t-subarch.s10
-rw-r--r--test/tools/llvm-objdump/ARM/v5te-subarch.s10
-rw-r--r--test/tools/llvm-objdump/ARM/v5tej-subarch.s7
-rw-r--r--test/tools/llvm-objdump/ARM/v6-neg-subfeatures.s10
-rw-r--r--test/tools/llvm-objdump/ARM/v6-subarch.s9
-rw-r--r--test/tools/llvm-objdump/ARM/v6-subfeatures.s9
-rw-r--r--test/tools/llvm-objdump/ARM/v6k-subarch.s9
-rw-r--r--test/tools/llvm-objdump/ARM/v6m-subarch.s9
-rw-r--r--test/tools/llvm-objdump/ARM/v6t2-subarch.s10
-rw-r--r--test/tools/llvm-objdump/ARM/v7a-neg-subfeature.s44
-rw-r--r--test/tools/llvm-objdump/ARM/v7a-subfeature.s36
-rw-r--r--test/tools/llvm-objdump/ARM/v7m-neg-subfeatures.s18
-rw-r--r--test/tools/llvm-objdump/ARM/v7m-subarch.s10
-rw-r--r--test/tools/llvm-objdump/ARM/v7m-subfeatures.s26
-rw-r--r--test/tools/llvm-objdump/ARM/v7r-subfeatures.s20
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-add-addr-imm-scaledbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-add_addr_ulebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-bad-opcode-valuebin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-bind-add-addr-ulebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-do-bind-no-segIndexbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-ulebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-malformed-uleb128bin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-too-bigbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-dylib-special-immbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-seg-too-bigbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-segoff-too-bigbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-set-addend-slebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-set-symbolbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-set-type-immbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-bind-uleb-times-skipping-ulebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-do-bind-no-dylib-ordinalbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-do-bind-no-symbolbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-lazy-do-bind-add-addr-imm-scaledbin0 -> 8448 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-lazy-do-bind-uleb-times-skipping-ulebbin0 -> 8448 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-lazy-do_bind_add_addr_ulebbin0 -> 8448 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-add-addr-imm-scaledbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-add-addr-ulebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb-too-bigbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-bad-opcode-valuebin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-imm-timesbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-seg-too-bigbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-segoff-too-bigbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-set-type-immbin0 -> 8432 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-uleb-malformed-uleb128bin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-uleb-timesbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-rebase-uleb-times-skipping-ulebbin0 -> 8456 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-immbin0 -> 8464 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-ulebbin0 -> 8464 bytes
-rwxr-xr-xtest/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-special-immbin0 -> 8464 bytes
-rw-r--r--test/tools/llvm-objdump/Inputs/test.wasmbin165 -> 181 bytes
-rw-r--r--test/tools/llvm-objdump/Mips/disassemble-all.test16
-rw-r--r--test/tools/llvm-objdump/Mips/lit.local.cfg3
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/Objc2.64bit.obj.dylib-x86_64bin0 -> 66544 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entrybin0 -> 3448 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/nofirst-symbol.macho-x86_64bin0 -> 336 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/note.macho-x86bin0 -> 76 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/openbsd-phdrs.elf-x86-64bin0 -> 600 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/phdr-note.elf-x86-64bin0 -> 5048 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/phdrs.elf-x86-64bin0 -> 4720 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/stripped-elf.sobin0 -> 6088 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/stub-nosyms.macho-x86_64bin0 -> 528 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/thread.macho-i386bin0 -> 9204 bytes
-rw-r--r--test/tools/llvm-objdump/X86/invalid-macho-build-version.yaml44
-rw-r--r--test/tools/llvm-objdump/X86/macho-build-version.yaml57
-rw-r--r--test/tools/llvm-objdump/X86/macho-info-plist-nofollow.test10
-rw-r--r--test/tools/llvm-objdump/X86/macho-nofirst-symbol-disassembly.test8
-rw-r--r--test/tools/llvm-objdump/X86/macho-objc-meta-data.test62
-rw-r--r--test/tools/llvm-objdump/X86/macho-print-thread.test11
-rw-r--r--test/tools/llvm-objdump/X86/macho-private-headers.test8
-rw-r--r--test/tools/llvm-objdump/X86/macho-stub-nosyms-disassembly.test3
-rw-r--r--test/tools/llvm-objdump/X86/malformed-machos.test3
-rw-r--r--test/tools/llvm-objdump/X86/openbsd-headers.test2
-rw-r--r--test/tools/llvm-objdump/X86/phdrs.test4
-rw-r--r--test/tools/llvm-objdump/X86/stripped-shared.test10
-rw-r--r--test/tools/llvm-objdump/macho-bad-bind.test101
-rw-r--r--test/tools/llvm-objdump/macho-bad-ordinal.test8
-rw-r--r--test/tools/llvm-objdump/malformed-macho.test5
-rw-r--r--test/tools/llvm-objdump/wasm.txt4
86 files changed, 708 insertions, 13 deletions
diff --git a/test/tools/llvm-objdump/AArch64/Inputs/print-armv8crypto.obj.macho-aarch64 b/test/tools/llvm-objdump/AArch64/Inputs/print-armv8crypto.obj.macho-aarch64
new file mode 100644
index 000000000000..b6ea824431c1
--- /dev/null
+++ b/test/tools/llvm-objdump/AArch64/Inputs/print-armv8crypto.obj.macho-aarch64
Binary files differ
diff --git a/test/tools/llvm-objdump/AArch64/mach-print-armv8crypto.test b/test/tools/llvm-objdump/AArch64/mach-print-armv8crypto.test
new file mode 100644
index 000000000000..e5ac0cb453e4
--- /dev/null
+++ b/test/tools/llvm-objdump/AArch64/mach-print-armv8crypto.test
@@ -0,0 +1,3 @@
+RUN: llvm-objdump -d -m -no-show-raw-insn %p/Inputs/print-armv8crypto.obj.macho-aarch64 | FileCheck %s
+
+CHECK: 0: sha1su0.4s v0, v1, v2
diff --git a/test/tools/llvm-objdump/AArch64/macho-print-mrs.test b/test/tools/llvm-objdump/AArch64/macho-print-mrs.test
index cc1d14faf8d3..c629a4de3876 100644
--- a/test/tools/llvm-objdump/AArch64/macho-print-mrs.test
+++ b/test/tools/llvm-objdump/AArch64/macho-print-mrs.test
@@ -1,3 +1,3 @@
RUN: llvm-objdump -d -m -no-show-raw-insn %p/Inputs/print-mrs.obj.macho-aarch64 | FileCheck %s
-CHECK: 0: mrs x0, S3_7_C15_C2_0
+CHECK: 0: mrs x0, CPM_IOACC_CTL_EL3
diff --git a/test/tools/llvm-objdump/AMDGPU/Inputs/source-lines.cl b/test/tools/llvm-objdump/AMDGPU/Inputs/source-lines.cl
new file mode 100644
index 000000000000..9179056318bd
--- /dev/null
+++ b/test/tools/llvm-objdump/AMDGPU/Inputs/source-lines.cl
@@ -0,0 +1,6 @@
+kernel void source_lines_test(global int *Out) {
+ int var0 = 0x777;
+ int var1 = 0x888;
+ int var2 = var0 + var1;
+ *Out = var2;
+}
diff --git a/test/tools/llvm-objdump/AMDGPU/lit.local.cfg b/test/tools/llvm-objdump/AMDGPU/lit.local.cfg
new file mode 100644
index 000000000000..2a665f06be72
--- /dev/null
+++ b/test/tools/llvm-objdump/AMDGPU/lit.local.cfg
@@ -0,0 +1,2 @@
+if not 'AMDGPU' in config.root.targets:
+ config.unsupported = True
diff --git a/test/tools/llvm-objdump/AMDGPU/source-lines.ll b/test/tools/llvm-objdump/AMDGPU/source-lines.ll
new file mode 100644
index 000000000000..94c4952e3386
--- /dev/null
+++ b/test/tools/llvm-objdump/AMDGPU/source-lines.ll
@@ -0,0 +1,109 @@
+; RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %s > %t.ll
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -O0 -o %t.o %t.ll
+; RUN: llvm-objdump -triple=amdgcn-amd-amdhsa -mcpu=gfx800 -disassemble -line-numbers %t.o | FileCheck --check-prefix=LINE %t.ll
+; RUN: llvm-objdump -triple=amdgcn-amd-amdhsa -mcpu=gfx800 -disassemble -source %t.o | FileCheck --check-prefix=SOURCE %t.ll
+
+; Prologue.
+; LINE: source_lines_test:
+; LINE-NEXT: ; {{.*}}source-lines.cl:1
+; Kernel.
+; LINE: ; {{.*}}source-lines.cl:2
+; LINE: v_mov_b32_e32 v{{[0-9]+}}, 0x777
+; LINE: ; {{.*}}source-lines.cl:3
+; LINE: v_mov_b32_e32 v{{[0-9]+}}, 0x888
+; LINE: ; {{.*}}source-lines.cl:4
+; LINE: v_add_i32_e32
+; LINE: ; {{.*}}source-lines.cl:5
+; LINE: flat_store_dword
+; Epilogue.
+; LINE: ; {{.*}}source-lines.cl:6
+; LINE-NEXT: s_endpgm
+
+; Prologue.
+; SOURCE: source_lines_test:
+; SOURCE-NEXT: ; kernel void source_lines_test(global int *Out) {
+; Kernel.
+; SOURCE: ; int var0 = 0x777;
+; SOURCE: v_mov_b32_e32 v{{[0-9]+}}, 0x777
+; SOURCE: ; int var1 = 0x888;
+; SOURCE: v_mov_b32_e32 v{{[0-9]+}}, 0x888
+; SOURCE: ; int var2 = var0 + var1;
+; SOURCE: v_add_i32_e32
+; SOURCE: ; *Out = var2;
+; SOURCE: flat_store_dword
+; Epilogue.
+; SOURCE: ; }
+; SOURCE-NEXT: s_endpgm
+
+; ModuleID = 'source-lines.cl'
+source_filename = "source-lines.cl"
+target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64"
+target triple = "amdgcn-amd-amdhsa"
+
+; Function Attrs: noinline nounwind
+define amdgpu_kernel void @source_lines_test(i32 addrspace(1)* %Out) #0 !dbg !7 !kernel_arg_addr_space !12 !kernel_arg_access_qual !13 !kernel_arg_type !14 !kernel_arg_base_type !14 !kernel_arg_type_qual !15 {
+entry:
+ %Out.addr = alloca i32 addrspace(1)*, align 4
+ %var0 = alloca i32, align 4
+ %var1 = alloca i32, align 4
+ %var2 = alloca i32, align 4
+ store i32 addrspace(1)* %Out, i32 addrspace(1)** %Out.addr, align 4
+ call void @llvm.dbg.declare(metadata i32 addrspace(1)** %Out.addr, metadata !16, metadata !17), !dbg !18
+ call void @llvm.dbg.declare(metadata i32* %var0, metadata !19, metadata !17), !dbg !20
+ store i32 1911, i32* %var0, align 4, !dbg !20
+ call void @llvm.dbg.declare(metadata i32* %var1, metadata !21, metadata !17), !dbg !22
+ store i32 2184, i32* %var1, align 4, !dbg !22
+ call void @llvm.dbg.declare(metadata i32* %var2, metadata !23, metadata !17), !dbg !24
+ %0 = load i32, i32* %var0, align 4, !dbg !25
+ %1 = load i32, i32* %var1, align 4, !dbg !26
+ %add = add nsw i32 %0, %1, !dbg !27
+ store i32 %add, i32* %var2, align 4, !dbg !24
+ %2 = load i32, i32* %var2, align 4, !dbg !28
+ %3 = load i32 addrspace(1)*, i32 addrspace(1)** %Out.addr, align 4, !dbg !29
+ store i32 %2, i32 addrspace(1)* %3, align 4, !dbg !30
+ ret void, !dbg !31
+}
+
+; Function Attrs: nounwind readnone
+declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
+
+attributes #0 = { noinline nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="gfx700" "target-features"="+fp64-fp16-denormals,-fp32-denormals" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { nounwind readnone }
+
+!llvm.dbg.cu = !{!0}
+!opencl.ocl.version = !{!3}
+!llvm.module.flags = !{!4, !5}
+!llvm.ident = !{!6}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 5.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
+!1 = !DIFile(filename: "source-lines.cl", directory: "SRC_COMPDIR")
+!2 = !{}
+!3 = !{i32 1, i32 0}
+!4 = !{i32 2, !"Dwarf Version", i32 2}
+!5 = !{i32 2, !"Debug Info Version", i32 3}
+!6 = !{!"clang version 5.0.0"}
+!7 = distinct !DISubprogram(name: "source_lines_test", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
+!8 = !DISubroutineType(types: !9)
+!9 = !{null, !10}
+!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64)
+!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!12 = !{i32 1}
+!13 = !{!"none"}
+!14 = !{!"int*"}
+!15 = !{!""}
+!16 = !DILocalVariable(name: "Out", arg: 1, scope: !7, file: !1, line: 1, type: !10)
+!17 = !DIExpression()
+!18 = !DILocation(line: 1, column: 43, scope: !7)
+!19 = !DILocalVariable(name: "var0", scope: !7, file: !1, line: 2, type: !11)
+!20 = !DILocation(line: 2, column: 7, scope: !7)
+!21 = !DILocalVariable(name: "var1", scope: !7, file: !1, line: 3, type: !11)
+!22 = !DILocation(line: 3, column: 7, scope: !7)
+!23 = !DILocalVariable(name: "var2", scope: !7, file: !1, line: 4, type: !11)
+!24 = !DILocation(line: 4, column: 7, scope: !7)
+!25 = !DILocation(line: 4, column: 14, scope: !7)
+!26 = !DILocation(line: 4, column: 21, scope: !7)
+!27 = !DILocation(line: 4, column: 19, scope: !7)
+!28 = !DILocation(line: 5, column: 10, scope: !7)
+!29 = !DILocation(line: 5, column: 4, scope: !7)
+!30 = !DILocation(line: 5, column: 8, scope: !7)
+!31 = !DILocation(line: 6, column: 1, scope: !7)
diff --git a/test/tools/llvm-objdump/ARM/Inputs/divs.macho-armv7s b/test/tools/llvm-objdump/ARM/Inputs/divs.macho-armv7s
new file mode 100644
index 000000000000..b877d2d5180d
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/Inputs/divs.macho-armv7s
Binary files differ
diff --git a/test/tools/llvm-objdump/ARM/macho-nomcpu-armv7s.test b/test/tools/llvm-objdump/ARM/macho-nomcpu-armv7s.test
new file mode 100644
index 000000000000..ff7daa8c2142
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/macho-nomcpu-armv7s.test
@@ -0,0 +1,3 @@
+@ RUN: llvm-objdump -m -d %p/Inputs/divs.macho-armv7s | FileCheck %s
+
+@ CHECK: 10 f0 10 e7 sdiv r0, r0, r0
diff --git a/test/tools/llvm-objdump/ARM/v5t-subarch.s b/test/tools/llvm-objdump/ARM/v5t-subarch.s
new file mode 100644
index 000000000000..c9ce2cf6cebd
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v5t-subarch.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc < %s -triple armv5t-elf -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.arch armv5t
+
+clz:
+clz r0, r1
+
+@ CHECK-LABEL: clz
+@ CHECK: 11 0f 6f e1
+
diff --git a/test/tools/llvm-objdump/ARM/v5te-subarch.s b/test/tools/llvm-objdump/ARM/v5te-subarch.s
new file mode 100644
index 000000000000..87e8548fb014
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v5te-subarch.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc < %s -triple armv5te-elf -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.arch armv5te
+
+strd:
+strd r0, r1, [r2, +r3]
+
+@ CHECK-LABEL strd
+@ CHECK: f3 00 82 e1 strd r0, r1, [r2, r3]
+
diff --git a/test/tools/llvm-objdump/ARM/v5tej-subarch.s b/test/tools/llvm-objdump/ARM/v5tej-subarch.s
new file mode 100644
index 000000000000..42dc87389a34
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v5tej-subarch.s
@@ -0,0 +1,7 @@
+@ RUN: llvm-mc < %s -triple armv5tej-elf -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+bxj:
+bxj r0
+
+@ CHECK-LABEL: bxj
+@ CHECK: 20 ff 2f e1 bxj r0
diff --git a/test/tools/llvm-objdump/ARM/v6-neg-subfeatures.s b/test/tools/llvm-objdump/ARM/v6-neg-subfeatures.s
new file mode 100644
index 000000000000..1a8d8f283336
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v6-neg-subfeatures.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.eabi_attribute Tag_FP_arch, 1 // VFP2
+
+vfp2:
+ vadd.f32 s0, s1, s2
+
+@CHECK-LABEL: vfp2
+@CHECK-NOT: 81 0a 30 ee vadd.f32 s0, s1, s2
+@CHECK: unknown
diff --git a/test/tools/llvm-objdump/ARM/v6-subarch.s b/test/tools/llvm-objdump/ARM/v6-subarch.s
new file mode 100644
index 000000000000..c70761e7c8c5
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v6-subarch.s
@@ -0,0 +1,9 @@
+@ RUN: llvm-mc < %s -triple armv6-elf -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.arch armv6
+
+umaal:
+umaal r0, r1, r2, r3
+
+@ CHECK-LABEL:umaal
+@ CHECK: 92 03 41 e0 umaal r0, r1, r2, r3
diff --git a/test/tools/llvm-objdump/ARM/v6-subfeatures.s b/test/tools/llvm-objdump/ARM/v6-subfeatures.s
new file mode 100644
index 000000000000..e8e806740d19
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v6-subfeatures.s
@@ -0,0 +1,9 @@
+@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.eabi_attribute Tag_FP_arch, 2 // VFP2
+
+vfp2:
+ vadd.f32 s0, s1, s2
+
+@CHECK-LABEL: vfp2
+@CHECK: 81 0a 30 ee vadd.f32 s0, s1, s2
diff --git a/test/tools/llvm-objdump/ARM/v6k-subarch.s b/test/tools/llvm-objdump/ARM/v6k-subarch.s
new file mode 100644
index 000000000000..8df4ce5e2576
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v6k-subarch.s
@@ -0,0 +1,9 @@
+@ RUN: llvm-mc < %s -triple armv6k-elf -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.arch armv6k
+
+clrex:
+clrex
+
+@ CHECK-LABEL: clrex
+@ CHECK: 1f f0 7f f5 clrex
diff --git a/test/tools/llvm-objdump/ARM/v6m-subarch.s b/test/tools/llvm-objdump/ARM/v6m-subarch.s
new file mode 100644
index 000000000000..f4c56989c17e
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v6m-subarch.s
@@ -0,0 +1,9 @@
+@ RUN: llvm-mc < %s -triple armv6m-elf -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s
+
+.arch armv6m
+
+dmb:
+dmb
+
+@ CHECK-LABEL: dmb
+@ CHECK: bf f3 5f 8f dmb sy
diff --git a/test/tools/llvm-objdump/ARM/v6t2-subarch.s b/test/tools/llvm-objdump/ARM/v6t2-subarch.s
new file mode 100644
index 000000000000..36e134342972
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v6t2-subarch.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc < %s -triple armv6t2-elf -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s
+
+.arch armv6t2
+
+.thumb
+umaalt2:
+umaal r0, r1, r2, r3
+
+@ CHECK-LABEL: umaalt2
+@ CHECK: e2 fb 63 01 umaal r0, r1, r2, r3
diff --git a/test/tools/llvm-objdump/ARM/v7a-neg-subfeature.s b/test/tools/llvm-objdump/ARM/v7a-neg-subfeature.s
new file mode 100644
index 000000000000..8083e5b0eee0
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v7a-neg-subfeature.s
@@ -0,0 +1,44 @@
+@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s --check-prefix=CHECK-THUMB
+
+.eabi_attribute Tag_FP_arch, 0 // disallow vfp
+
+vfp2:
+ vmla.f32 s0, s1, s2
+
+@CHECK-LABEL: vfp2
+@CHECK-NOT: 81 0a 00 ee vmla.f32 s0, s1, s2
+@CHECK: unknown
+
+vfp3:
+ vmov.f32 s0, #0.5
+
+@CHECK-LABEL: vfp3
+@CHECK-NOT: 00 0a b6 ee vmov.f32 s0, #5.000000e-01
+
+neon:
+ vmla.f32 d0, d1, d2
+
+@CHECK-LABEL: neon
+@CHECK-NOT: 12 0d 01 f2 vmla.f32 d0, d1, d2
+@CHECK: unknown
+
+fp16:
+ vcvt.f32.f16 q0, d2
+
+@CHECK-LABEL: fp16
+@CHECK-NOT: 02 07 b6 f3 vcvt.f32.f16 q0, d2
+
+div_arm:
+ udiv r0, r1, r2
+
+@CHECK-LABEL: div_arm
+@CHECK-NOT: 11 f2 30 e7 udiv r0, r1, r2
+@CHECK: unknown
+
+.thumb
+div_thumb:
+ udiv r0, r1, r2
+
+@CHECK-LABEL: div_thumb
+@CHECK-THUMB-NOT: b1 fb f2 f0 udiv r0, r1, r2
diff --git a/test/tools/llvm-objdump/ARM/v7a-subfeature.s b/test/tools/llvm-objdump/ARM/v7a-subfeature.s
new file mode 100644
index 000000000000..f43554579a36
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v7a-subfeature.s
@@ -0,0 +1,36 @@
+@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s
+
+.eabi_attribute Tag_FP_arch, 3 // VFP3
+.eabi_attribute Tag_Advanced_SIMD_arch, 2 // SIMDv1 with fp16
+.eabi_attribute Tag_DIV_use, 2 // permitted
+
+vfp2:
+ vmla.f32 s0, s1, s2
+
+@CHECK-LABEL: vfp2
+@CHECK: 81 0a 00 ee vmla.f32 s0, s1, s2
+
+vfp3:
+ vmov.f32 s0, #0.5
+
+@CHECK-LABEL: vfp3
+@CHECK: 00 0a b6 ee vmov.f32 s0, #5.000000e-01
+
+neon:
+ vmla.f32 d0, d1, d2
+
+@CHECK-LABEL: neon
+@CHECK: 12 0d 01 f2 vmla.f32 d0, d1, d2
+
+fp16:
+ vcvt.f32.f16 q0, d2
+
+@CHECK-LABEL: fp16
+@CHECK: 02 07 b6 f3 vcvt.f32.f16 q0, d2
+
+div:
+ udiv r0, r1, r2
+
+@CHECK-LABEL: div
+@CHECK: 11 f2 30 e7 udiv r0, r1, r2
+
diff --git a/test/tools/llvm-objdump/ARM/v7m-neg-subfeatures.s b/test/tools/llvm-objdump/ARM/v7m-neg-subfeatures.s
new file mode 100644
index 000000000000..b3a79c7d5c2b
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v7m-neg-subfeatures.s
@@ -0,0 +1,18 @@
+@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s
+
+.eabi_attribute Tag_CPU_arch, 10 // v7
+.eabi_attribute Tag_FP_arch, 0 // VFP4
+
+.thumb
+vfp2:
+ vmla.f32 s0, s1, s2
+
+@CHECK-LABEL: vfp2
+@CHECK-NOT: 00 ee 81 0a vmla.f32 s0, s1, s2
+
+.thumb
+vfp4:
+ vmov.f32 s0, #0.5
+
+@CHECK-LABEL:vfp4
+@CHECK-NOT: b6 ee 00 0a vmov.f32 s0, #5.000000e-01
diff --git a/test/tools/llvm-objdump/ARM/v7m-subarch.s b/test/tools/llvm-objdump/ARM/v7m-subarch.s
new file mode 100644
index 000000000000..8f6ff57e0ff3
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v7m-subarch.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc < %s -triple armv7m-elf -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s
+
+.arch armv7m
+
+umlal:
+umlal r0, r1, r2, r3
+
+@ CHECK-LABEL: umlal
+@ CHECK: e2 fb 03 01 umlal r0, r1, r2, r3
+
diff --git a/test/tools/llvm-objdump/ARM/v7m-subfeatures.s b/test/tools/llvm-objdump/ARM/v7m-subfeatures.s
new file mode 100644
index 000000000000..c7a40af8ae90
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v7m-subfeatures.s
@@ -0,0 +1,26 @@
+@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s
+
+.eabi_attribute Tag_CPU_arch, 10 // v7
+.eabi_attribute Tag_CPU_arch_profile, 0x4D // 'M' profile
+.eabi_attribute Tag_FP_arch, 5 // VFP4
+
+.thumb
+vfp2:
+ vmla.f32 s0, s1, s2
+
+@CHECK-LABEL: vfp2
+@CHECK: 00 ee 81 0a vmla.f32 s0, s1, s2
+
+.thumb
+vfp4:
+ vmov.f32 s0, #0.5
+
+@CHECK-LABEL: vfp4
+@CHECK: b6 ee 00 0a vmov.f32 s0, #5.000000e-01
+
+.thumb
+div:
+ udiv r0, r1, r2
+
+@CHECK-LABEL: div
+@CHECK: b1 fb f2 f0 udiv r0, r1, r2
diff --git a/test/tools/llvm-objdump/ARM/v7r-subfeatures.s b/test/tools/llvm-objdump/ARM/v7r-subfeatures.s
new file mode 100644
index 000000000000..bbe40a193879
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/v7r-subfeatures.s
@@ -0,0 +1,20 @@
+@ RUN: llvm-mc < %s -triple armv7r -mattr=+hwdiv-arm -filetype=obj | llvm-objdump -triple=thumb -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv7r -mattr=+hwdiv-arm -filetype=obj | llvm-objdump -triple=arm -d - | FileCheck %s --check-prefix=CHECK-ARM
+
+.eabi_attribute Tag_CPU_arch, 10 // v7
+.eabi_attribute Tag_CPU_arch_profile, 0x52 // 'R' profile
+
+.arm
+div_arm:
+ udiv r0, r1, r2
+
+@CHECK-LABEL: div_arm
+@CHECK-NOT: udiv r0, r1, r2
+@CHECK-ARM-NOT: udiv r0, r1, r2
+
+.thumb
+div_thumb:
+ udiv r0, r1, r2
+
+@CHECK-LABEL: div_thumb
+@CHECK: b1 fb f2 f0 udiv r0, r1, r2
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-add-addr-imm-scaled b/test/tools/llvm-objdump/Inputs/macho-bind-add-addr-imm-scaled
new file mode 100755
index 000000000000..2180437408c9
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-add-addr-imm-scaled
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-add_addr_uleb b/test/tools/llvm-objdump/Inputs/macho-bind-add_addr_uleb
new file mode 100755
index 000000000000..fc950db155a6
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-add_addr_uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-bad-opcode-value b/test/tools/llvm-objdump/Inputs/macho-bind-bad-opcode-value
new file mode 100755
index 000000000000..c9195314c8e1
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-bad-opcode-value
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-bind-add-addr-uleb b/test/tools/llvm-objdump/Inputs/macho-bind-bind-add-addr-uleb
new file mode 100755
index 000000000000..11abd6246b8d
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-bind-add-addr-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-do-bind-no-segIndex b/test/tools/llvm-objdump/Inputs/macho-bind-do-bind-no-segIndex
new file mode 100755
index 000000000000..cc4f09708c42
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-do-bind-no-segIndex
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb
new file mode 100755
index 000000000000..7769195d44c9
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-malformed-uleb128 b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-malformed-uleb128
new file mode 100755
index 000000000000..0d5410e976e6
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-malformed-uleb128
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-too-big b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-too-big
new file mode 100755
index 000000000000..40564b5a262f
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-ordinal-uleb-too-big
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-dylib-special-imm b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-special-imm
new file mode 100755
index 000000000000..09bf10ded896
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-dylib-special-imm
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-seg-too-big b/test/tools/llvm-objdump/Inputs/macho-bind-seg-too-big
new file mode 100755
index 000000000000..20be9957919e
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-seg-too-big
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-segoff-too-big b/test/tools/llvm-objdump/Inputs/macho-bind-segoff-too-big
new file mode 100755
index 000000000000..3f8e5ee8384c
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-segoff-too-big
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-set-addend-sleb b/test/tools/llvm-objdump/Inputs/macho-bind-set-addend-sleb
new file mode 100755
index 000000000000..726b96d3de30
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-set-addend-sleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-set-symbol b/test/tools/llvm-objdump/Inputs/macho-bind-set-symbol
new file mode 100755
index 000000000000..b8201c3ad198
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-set-symbol
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-set-type-imm b/test/tools/llvm-objdump/Inputs/macho-bind-set-type-imm
new file mode 100755
index 000000000000..002057e6b86f
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-set-type-imm
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-bind-uleb-times-skipping-uleb b/test/tools/llvm-objdump/Inputs/macho-bind-uleb-times-skipping-uleb
new file mode 100755
index 000000000000..81ab8130f66a
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-bind-uleb-times-skipping-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-do-bind-no-dylib-ordinal b/test/tools/llvm-objdump/Inputs/macho-do-bind-no-dylib-ordinal
new file mode 100755
index 000000000000..77daede78684
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-do-bind-no-dylib-ordinal
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-do-bind-no-symbol b/test/tools/llvm-objdump/Inputs/macho-do-bind-no-symbol
new file mode 100755
index 000000000000..0592b9bfe407
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-do-bind-no-symbol
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-lazy-do-bind-add-addr-imm-scaled b/test/tools/llvm-objdump/Inputs/macho-lazy-do-bind-add-addr-imm-scaled
new file mode 100755
index 000000000000..a7d5abeef743
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-lazy-do-bind-add-addr-imm-scaled
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-lazy-do-bind-uleb-times-skipping-uleb b/test/tools/llvm-objdump/Inputs/macho-lazy-do-bind-uleb-times-skipping-uleb
new file mode 100755
index 000000000000..1f0288342c48
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-lazy-do-bind-uleb-times-skipping-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-lazy-do_bind_add_addr_uleb b/test/tools/llvm-objdump/Inputs/macho-lazy-do_bind_add_addr_uleb
new file mode 100755
index 000000000000..63f034688ff2
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-lazy-do_bind_add_addr_uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-imm-scaled b/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-imm-scaled
new file mode 100755
index 000000000000..6b0c1bd4566d
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-imm-scaled
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb b/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb
new file mode 100755
index 000000000000..e409590dc2dc
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb-too-big b/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb-too-big
new file mode 100755
index 000000000000..68b72ec6a3b5
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-add-addr-uleb-too-big
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-bad-opcode-value b/test/tools/llvm-objdump/Inputs/macho-rebase-bad-opcode-value
new file mode 100755
index 000000000000..59e0d4fe619b
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-bad-opcode-value
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-imm-times b/test/tools/llvm-objdump/Inputs/macho-rebase-imm-times
new file mode 100755
index 000000000000..be2286baf6b3
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-imm-times
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-seg-too-big b/test/tools/llvm-objdump/Inputs/macho-rebase-seg-too-big
new file mode 100755
index 000000000000..12b52328a968
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-seg-too-big
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-segoff-too-big b/test/tools/llvm-objdump/Inputs/macho-rebase-segoff-too-big
new file mode 100755
index 000000000000..4dfb19dea80f
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-segoff-too-big
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-set-type-imm b/test/tools/llvm-objdump/Inputs/macho-rebase-set-type-imm
new file mode 100755
index 000000000000..947db0ee915f
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-set-type-imm
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-malformed-uleb128 b/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-malformed-uleb128
new file mode 100755
index 000000000000..045f425b2233
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-malformed-uleb128
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-times b/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-times
new file mode 100755
index 000000000000..c12f256f6600
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-times
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-times-skipping-uleb b/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-times-skipping-uleb
new file mode 100755
index 000000000000..5bec8ca11578
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-rebase-uleb-times-skipping-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-imm b/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-imm
new file mode 100755
index 000000000000..1d8785c55d03
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-imm
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-uleb b/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-uleb
new file mode 100755
index 000000000000..bf7babc09e6f
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-ordinal-uleb
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-special-imm b/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-special-imm
new file mode 100755
index 000000000000..d13f6ec981eb
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/macho-weak-bind-set-dylib-special-imm
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/test.wasm b/test/tools/llvm-objdump/Inputs/test.wasm
index b24ac79c7163..d3906eeaf6f8 100644
--- a/test/tools/llvm-objdump/Inputs/test.wasm
+++ b/test/tools/llvm-objdump/Inputs/test.wasm
Binary files differ
diff --git a/test/tools/llvm-objdump/Mips/disassemble-all.test b/test/tools/llvm-objdump/Mips/disassemble-all.test
new file mode 100644
index 000000000000..4554a0e030ae
--- /dev/null
+++ b/test/tools/llvm-objdump/Mips/disassemble-all.test
@@ -0,0 +1,16 @@
+# RUN: yaml2obj %s | llvm-objdump -D -
+
+# Test that -D does not crash llvm-objdump encounters a section who size is a
+# not a multiple of the size of an instruction.
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_MIPS
+Sections:
+ - Name: .note.llvm.crash
+ Type: SHT_NOTE
+ Address: 0x0
+ Content: 002E746578
diff --git a/test/tools/llvm-objdump/Mips/lit.local.cfg b/test/tools/llvm-objdump/Mips/lit.local.cfg
new file mode 100644
index 000000000000..a3183a25afaa
--- /dev/null
+++ b/test/tools/llvm-objdump/Mips/lit.local.cfg
@@ -0,0 +1,3 @@
+if not 'Mips' in config.root.targets:
+ config.unsupported = True
+
diff --git a/test/tools/llvm-objdump/X86/Inputs/Objc2.64bit.obj.dylib-x86_64 b/test/tools/llvm-objdump/X86/Inputs/Objc2.64bit.obj.dylib-x86_64
new file mode 100755
index 000000000000..07d465bfb633
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/Objc2.64bit.obj.dylib-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry b/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry
new file mode 100644
index 000000000000..afdd0838c911
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/nofirst-symbol.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/nofirst-symbol.macho-x86_64
new file mode 100644
index 000000000000..4d1ef25e6769
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/nofirst-symbol.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/note.macho-x86 b/test/tools/llvm-objdump/X86/Inputs/note.macho-x86
new file mode 100644
index 000000000000..588a09d1e343
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/note.macho-x86
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/openbsd-phdrs.elf-x86-64 b/test/tools/llvm-objdump/X86/Inputs/openbsd-phdrs.elf-x86-64
new file mode 100644
index 000000000000..dab75bf96692
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/openbsd-phdrs.elf-x86-64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/phdr-note.elf-x86-64 b/test/tools/llvm-objdump/X86/Inputs/phdr-note.elf-x86-64
new file mode 100644
index 000000000000..2825c6840ca8
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/phdr-note.elf-x86-64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/phdrs.elf-x86-64 b/test/tools/llvm-objdump/X86/Inputs/phdrs.elf-x86-64
new file mode 100644
index 000000000000..078574ab5801
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/phdrs.elf-x86-64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/stripped-elf.so b/test/tools/llvm-objdump/X86/Inputs/stripped-elf.so
new file mode 100644
index 000000000000..b88b77501d9f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/stripped-elf.so
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/stub-nosyms.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/stub-nosyms.macho-x86_64
new file mode 100644
index 000000000000..a7f122b55084
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/stub-nosyms.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/thread.macho-i386 b/test/tools/llvm-objdump/X86/Inputs/thread.macho-i386
new file mode 100755
index 000000000000..f4b805d9b032
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/thread.macho-i386
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/invalid-macho-build-version.yaml b/test/tools/llvm-objdump/X86/invalid-macho-build-version.yaml
new file mode 100644
index 000000000000..a81bb2dea600
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/invalid-macho-build-version.yaml
@@ -0,0 +1,44 @@
+# RUN: yaml2obj %s | not llvm-objdump -macho -private-headers -
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000004
+ ncmds: 2
+ sizeofcmds: 192
+ flags: 0x00000000
+ reserved: 0
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 152
+ segname: __TEXT
+ vmaddr: 4294967296
+ vmsize: 8192
+ fileoff: 0
+ filesize: 3099
+ maxprot: 7
+ initprot: 5
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000100001160
+ size: 3099
+ offset: 0x00001160
+ align: 4
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 80
+ platform: 2
+ minos: 0x00080000
+ sdk: 0x00090000
+ ntools: 0
+...
diff --git a/test/tools/llvm-objdump/X86/macho-build-version.yaml b/test/tools/llvm-objdump/X86/macho-build-version.yaml
new file mode 100644
index 000000000000..acefb6956d11
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-build-version.yaml
@@ -0,0 +1,57 @@
+# RUN: yaml2obj %s | llvm-objdump -macho -private-headers - | FileCheck %s
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000004
+ ncmds: 2
+ sizeofcmds: 192
+ flags: 0x00000000
+ reserved: 0
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 152
+ segname: __TEXT
+ vmaddr: 4294967296
+ vmsize: 8192
+ fileoff: 0
+ filesize: 3099
+ maxprot: 7
+ initprot: 5
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000100001160
+ size: 3099
+ offset: 0x00001160
+ align: 4
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 2
+ minos: 0x00080000
+ sdk: 0x00090000
+ ntools: 1
+ Tools:
+ - tool: 1
+ version: 0x00000000
+...
+
+CHECK: Load command 1
+CHECK-NEXT: cmd LC_BUILD_VERSION
+CHECK-NEXT: cmdsize 32
+CHECK-NEXT: platform ios
+CHECK-NEXT: sdk 9.0
+CHECK-NEXT: minos 8.0
+CHECK-NEXT: ntools 1
+CHECK-NEXT: tool clang
+CHECK-NEXT: version n/a
diff --git a/test/tools/llvm-objdump/X86/macho-info-plist-nofollow.test b/test/tools/llvm-objdump/X86/macho-info-plist-nofollow.test
new file mode 100644
index 000000000000..12ad166c5a2f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-info-plist-nofollow.test
@@ -0,0 +1,10 @@
+# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -info-plist - | FileCheck %s
+
+.section __TEXT, __info_plist
+.ascii "This is the (__TEXT,__info_plist) section\n"
+.section __TEXT, __follow
+.asciz "This is the (__TEXT,__follow) section\n"
+
+# CHECK: Contents of (__TEXT,__info_plist) section
+# CHECK: This is the (__TEXT,__info_plist) section
+# CHECK-NOT: This is the (__TEXT,__follow) section
diff --git a/test/tools/llvm-objdump/X86/macho-nofirst-symbol-disassembly.test b/test/tools/llvm-objdump/X86/macho-nofirst-symbol-disassembly.test
new file mode 100644
index 000000000000..98964ac8047a
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-nofirst-symbol-disassembly.test
@@ -0,0 +1,8 @@
+// RUN: llvm-objdump -d -m %p/Inputs/nofirst-symbol.macho-x86_64 | FileCheck %s
+
+CHECK: 0: 90 nop
+CHECK: _foo:
+CHECK: 1: c3 retq
+CHECK: _bar:
+CHECK: 2: 90 nop
+CHECK: 3: c3 retq
diff --git a/test/tools/llvm-objdump/X86/macho-objc-meta-data.test b/test/tools/llvm-objdump/X86/macho-objc-meta-data.test
index f4abf6cdb49e..0bdb39cdff84 100644
--- a/test/tools/llvm-objdump/X86/macho-objc-meta-data.test
+++ b/test/tools/llvm-objdump/X86/macho-objc-meta-data.test
@@ -5,6 +5,7 @@
# RUN: llvm-objdump -m -objc-meta-data %p/Inputs/Objc1.32bit.exe.macho-i386 | FileCheck %s -check-prefix=OBJC1_32BIT_EXE
# RUN: llvm-objdump -m -objc-meta-data %p/Inputs/Objc1.32bit.obj.macho-i386 | FileCheck %s -check-prefix=OBJC1_32BIT_OBJ
# RUN: llvm-objdump -m -section __OBJC,__protocol %p/Inputs/Objc1.32bit.exe.macho-i386 | FileCheck %s -check-prefix=PROTOCOL
+# RUN: llvm-objdump -m -objc-meta-data %p/Inputs/Objc2.64bit.obj.dylib-x86_64 | FileCheck %s -check-prefix=OBJC2_64BIT_DYLIB
OBJC2_64BIT_EXE: Contents of (__DATA,__objc_classlist) section
OBJC2_64BIT_EXE: 0000000100002028 0x1000029f0
@@ -1037,3 +1038,64 @@ PROTOCOL: types 0x00002e04 @8@0:4
PROTOCOL: class_methods 0x00000000 (not in an __OBJC section)
PROTOCOL: instance_methods 0x00000000 (not in an __OBJC section)
PROTOCOL: class_methods 0x00000000 (not in an __OBJC section)
+
+OBJC2_64BIT_DYLIB: Contents of (__DATA_CONST,__objc_classlist) section
+OBJC2_64BIT_DYLIB: 000000000000c038 0x8030 _OBJC_CLASS_$_Test
+OBJC2_64BIT_DYLIB: isa 0x8008 _OBJC_METACLASS_$_Test
+OBJC2_64BIT_DYLIB: superclass 0x0
+OBJC2_64BIT_DYLIB: cache 0x0
+OBJC2_64BIT_DYLIB: vtable 0x0
+OBJC2_64BIT_DYLIB: data 0xc120 (struct class_ro_t *)
+OBJC2_64BIT_DYLIB: flags 0x0
+OBJC2_64BIT_DYLIB: instanceStart 8
+OBJC2_64BIT_DYLIB: instanceSize 16
+OBJC2_64BIT_DYLIB: reserved 0x0
+OBJC2_64BIT_DYLIB: ivarLayout 0x0
+OBJC2_64BIT_DYLIB: name 0x4f59 Test
+OBJC2_64BIT_DYLIB: baseMethods 0xc090 (struct method_list_t *)
+OBJC2_64BIT_DYLIB: entsize 24
+OBJC2_64BIT_DYLIB: count 3
+OBJC2_64BIT_DYLIB: name 0x4f5e testMethod
+OBJC2_64BIT_DYLIB: types 0x4f89 v16@0:8
+OBJC2_64BIT_DYLIB: imp -[Test testMethod]
+OBJC2_64BIT_DYLIB: name 0x4f69 testProp
+OBJC2_64BIT_DYLIB: types 0x4f91 Q16@0:8
+OBJC2_64BIT_DYLIB: imp -[Test testProp]
+OBJC2_64BIT_DYLIB: name 0x4f72 setTestProp:
+OBJC2_64BIT_DYLIB: types 0x4f99 v24@0:8Q16
+OBJC2_64BIT_DYLIB: imp -[Test setTestProp:]
+OBJC2_64BIT_DYLIB: baseProtocols 0x0
+OBJC2_64BIT_DYLIB: ivars 0xc0e0
+OBJC2_64BIT_DYLIB: entsize 32
+OBJC2_64BIT_DYLIB: count 1
+OBJC2_64BIT_DYLIB: offset 0x8000 8
+OBJC2_64BIT_DYLIB: name 0x4f7f _testProp
+OBJC2_64BIT_DYLIB: type 0x4fa4 Q
+OBJC2_64BIT_DYLIB: alignment 3
+OBJC2_64BIT_DYLIB: size 8
+OBJC2_64BIT_DYLIB: weakIvarLayout 0x0
+OBJC2_64BIT_DYLIB: baseProperties 0xc108
+OBJC2_64BIT_DYLIB: entsize 16
+OBJC2_64BIT_DYLIB: count 1
+OBJC2_64BIT_DYLIB: name 0x4f42 testProp
+OBJC2_64BIT_DYLIB: attributes 0x4f4b TQ,V_testProp
+OBJC2_64BIT_DYLIB: Meta Class
+OBJC2_64BIT_DYLIB: isa 0x0
+OBJC2_64BIT_DYLIB: superclass 0x0
+OBJC2_64BIT_DYLIB: cache 0x0
+OBJC2_64BIT_DYLIB: vtable 0x0
+OBJC2_64BIT_DYLIB: data 0xc048 (struct class_ro_t *)
+OBJC2_64BIT_DYLIB: flags 0x1 RO_META
+OBJC2_64BIT_DYLIB: instanceStart 40
+OBJC2_64BIT_DYLIB: instanceSize 40
+OBJC2_64BIT_DYLIB: reserved 0x0
+OBJC2_64BIT_DYLIB: ivarLayout 0x0
+OBJC2_64BIT_DYLIB: name 0x4f59 Test
+OBJC2_64BIT_DYLIB: baseMethods 0x0 (struct method_list_t *)
+OBJC2_64BIT_DYLIB: baseProtocols 0x0
+OBJC2_64BIT_DYLIB: ivars 0x0
+OBJC2_64BIT_DYLIB: weakIvarLayout 0x0
+OBJC2_64BIT_DYLIB: baseProperties 0x0
+OBJC2_64BIT_DYLIB: Contents of (__DATA_CONST,__objc_imageinfo) section
+OBJC2_64BIT_DYLIB: version 0
+OBJC2_64BIT_DYLIB: flags 0x40
diff --git a/test/tools/llvm-objdump/X86/macho-print-thread.test b/test/tools/llvm-objdump/X86/macho-print-thread.test
new file mode 100644
index 000000000000..12f71de1db2f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-print-thread.test
@@ -0,0 +1,11 @@
+RUN: llvm-objdump -macho -private-headers %p/Inputs/thread.macho-i386 | FileCheck %s
+
+CHECK: Load command 9
+CHECK: cmd LC_UNIXTHREAD
+CHECK: cmdsize 80
+CHECK: flavor i386_THREAD_STATE
+CHECK: count i386_THREAD_STATE_COUNT
+CHECK: eax 0x00000000 ebx 0x00000000 ecx 0x00000000 edx 0x00000000
+CHECK: edi 0x00000000 esi 0x00000000 ebp 0x00000000 esp 0x00000000
+CHECK: ss 0x00000000 eflags 0x00000000 eip 0x00001db0 cs 0x00000000
+CHECK: ds 0x00000000 es 0x00000000 fs 0x00000000 gs 0x00000000
diff --git a/test/tools/llvm-objdump/X86/macho-private-headers.test b/test/tools/llvm-objdump/X86/macho-private-headers.test
index e0c68d7cd97a..d1ea0cf140b7 100644
--- a/test/tools/llvm-objdump/X86/macho-private-headers.test
+++ b/test/tools/llvm-objdump/X86/macho-private-headers.test
@@ -23,6 +23,8 @@
// RUN: | FileCheck %s -check-prefix=NON_VERBOSE
// RUN: llvm-objdump -p %p/Inputs/codesig.macho-x86_64 \
// RUN: | FileCheck %s -check-prefix=CODESIG
+// RUN: llvm-objdump -p %p/Inputs/note.macho-x86 \
+// RUN: | FileCheck %s -check-prefix=NOTE
CHECK: Mach header
CHECK: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
@@ -544,3 +546,9 @@ CODESIG: cmd LC_CODE_SIGNATURE
CODESIG: cmdsize 16
CODESIG: dataoff 8496
CODESIG: datasize 64
+
+NOTE: cmd LC_NOTE
+NOTE: cmdsize 40
+NOTE: data_owner DATA OWNER
+NOTE: offset 68
+NOTE: size 8
diff --git a/test/tools/llvm-objdump/X86/macho-stub-nosyms-disassembly.test b/test/tools/llvm-objdump/X86/macho-stub-nosyms-disassembly.test
new file mode 100644
index 000000000000..af66b0e7a63f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-stub-nosyms-disassembly.test
@@ -0,0 +1,3 @@
+// RUN: llvm-objdump -d -m -no-show-raw-insn -full-leading-addr -print-imm-hex %p/Inputs/stub-nosyms.macho-x86_64 | FileCheck %s
+
+CHECK: 0000000000000001 callq 0x7 ## symbol stub for: _foo
diff --git a/test/tools/llvm-objdump/X86/malformed-machos.test b/test/tools/llvm-objdump/X86/malformed-machos.test
index 83ebfc4364e6..292666a37254 100644
--- a/test/tools/llvm-objdump/X86/malformed-machos.test
+++ b/test/tools/llvm-objdump/X86/malformed-machos.test
@@ -63,3 +63,6 @@ INVALID-SYMBOL-STRX-UNIVERSAL: macho-invalid-symbol-strx-universal' (for archite
RUN: not llvm-objdump -macho -disassemble %p/Inputs/macho-invalid-symbol-lib_ordinal 2>&1 | FileCheck -check-prefix INVALID-SYMBOL-LIB_ORDINAL %s
INVALID-SYMBOL-LIB_ORDINAL: macho-invalid-symbol-lib_ordinal': truncated or malformed object (bad library ordinal: 7 for symbol at index 2)
+
+RUN: not llvm-objdump -macho -objc-meta-data %p/Inputs/macho-invalid-bind-entry 2>&1 | FileCheck -check-prefix INVALID-BIND-ENTRY %s
+INVALID-BIND-ENTRY: macho-invalid-bind-entry': truncated or malformed object (for BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB bad library ordinal: 83 (max 0) for opcode at: 0x0)
diff --git a/test/tools/llvm-objdump/X86/openbsd-headers.test b/test/tools/llvm-objdump/X86/openbsd-headers.test
index 48f496ca616e..fb6072efabb7 100644
--- a/test/tools/llvm-objdump/X86/openbsd-headers.test
+++ b/test/tools/llvm-objdump/X86/openbsd-headers.test
@@ -9,7 +9,7 @@
## 0x65a3dbe7 is the value of PT_OPENBSD_WXNEEDED,
## 0x65a41be6 is the value of PT_OPENBSD_BOOTDATA
## SECTIONS { . = SIZEOF_HEADERS; .all : { *(.*) } : text }
-RUN: llvm-objdump -p %p/../../../Object/Inputs/openbsd-phdrs.elf-x86-64 \
+RUN: llvm-objdump -p %p/Inputs/openbsd-phdrs.elf-x86-64 \
RUN: | FileCheck %s
CHECK: OPENBSD_RANDOMIZE off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**3
diff --git a/test/tools/llvm-objdump/X86/phdrs.test b/test/tools/llvm-objdump/X86/phdrs.test
index 646f6af8733a..63b8fdeb6ef6 100644
--- a/test/tools/llvm-objdump/X86/phdrs.test
+++ b/test/tools/llvm-objdump/X86/phdrs.test
@@ -11,7 +11,7 @@
## d:
## .long 2
##
-RUN: llvm-objdump -p %p/../../../Object/Inputs/phdrs.elf-x86-64 \
+RUN: llvm-objdump -p %p/Inputs/phdrs.elf-x86-64 \
RUN: | FileCheck %s
CHECK: RELRO off 0x0000000000001000 vaddr 0x0000000000201000 paddr 0x0000000000201000 align 2**0
@@ -25,7 +25,7 @@ CHECK-NEXT: filesz 0x0000000000000004 memsz 0x0000000000001000 flags r--
## .section .note.test,"a",@note
## .quad 42
-RUN: llvm-objdump -p %p/../../../Object/Inputs/phdr-note.elf-x86-64 \
+RUN: llvm-objdump -p %p/Inputs/phdr-note.elf-x86-64 \
RUN: | FileCheck %s --check-prefix=NOTE
NOTE: NOTE off 0x0000000000000200 vaddr 0x0000000000000200 paddr 0x0000000000000200 align 2**0
diff --git a/test/tools/llvm-objdump/X86/stripped-shared.test b/test/tools/llvm-objdump/X86/stripped-shared.test
new file mode 100644
index 000000000000..c57155f4cd7b
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/stripped-shared.test
@@ -0,0 +1,10 @@
+// This test checks that dynamic symbols are used when disassembling elf files.
+// RUN: llvm-objdump -d %p/Inputs/stripped-elf.so | FileCheck %s
+
+# CHECK: .init
+# CHECK: .plt
+# CHECK: .text
+# CHECK: func0
+# CHECK: func1
+# CHECK: func2
+# CHECK: .fini
diff --git a/test/tools/llvm-objdump/macho-bad-bind.test b/test/tools/llvm-objdump/macho-bad-bind.test
new file mode 100644
index 000000000000..98fd08f4009e
--- /dev/null
+++ b/test/tools/llvm-objdump/macho-bad-bind.test
@@ -0,0 +1,101 @@
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-dylib-ordinal-uleb 2>&1 | FileCheck -check-prefix DYLIB-ORDINAL-ULEB %s
+DYLIB-ORDINAL-ULEB: macho-bind-dylib-ordinal-uleb': truncated or malformed object (for BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB bad library ordinal: 355 (max 1) for opcode at: 0x0)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-dylib-ordinal-uleb-malformed-uleb128 2>&1 | FileCheck -check-prefix DYLIB-ORDINAL-ULEB-MALFORMED-ULEB128 %s
+DYLIB-ORDINAL-ULEB-MALFORMED-ULEB128: macho-bind-dylib-ordinal-uleb-malformed-uleb128': truncated or malformed object (for BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB malformed uleb128, extends past end for opcode at: 0x0)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-dylib-ordinal-uleb-too-big 2>&1 | FileCheck -check-prefix DYLIB-ORDINAL-ULEB-TOO-BIG %s
+DYLIB-ORDINAL-ULEB-TOO-BIG: macho-bind-dylib-ordinal-uleb-too-big': truncated or malformed object (for BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB uleb128 too big for uint64 for opcode at: 0x0)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-dylib-special-imm 2>&1 | FileCheck -check-prefix DYLIB-SPECIAL-IMM %s
+DYLIB-SPECIAL-IMM: macho-bind-dylib-special-imm': truncated or malformed object (for BIND_OPCODE_SET_DYLIB_SPECIAL_IMM unknown special ordinal: -5 for opcode at: 0x0)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-set-symbol 2>&1 | FileCheck -check-prefix BIND-SET-SYMBOL %s
+BIND-SET-SYMBOL: macho-bind-set-symbol': truncated or malformed object (for BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM symbol name extends past opcodes for opcode at: 0x2)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-set-type-imm 2>&1 | FileCheck -check-prefix SET-TYPE-IMM %s
+SET-TYPE-IMM: macho-bind-set-type-imm': truncated or malformed object (for BIND_OPCODE_SET_TYPE_IMM bad bind type: 5 for opcode at: 0x14)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-set-addend-sleb 2>&1 | FileCheck -check-prefix SET-ADDEND-SLEB %s
+SET-ADDEND-SLEB: macho-bind-set-addend-sleb': truncated or malformed object (for BIND_OPCODE_SET_ADDEND_SLEB malformed sleb128, extends past end for opcode at: 0x14)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-seg-too-big 2>&1 | FileCheck -check-prefix SEG-TOO-BIG %s
+SEG-TOO-BIG: macho-bind-seg-too-big': truncated or malformed object (for BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB bad segIndex (too large) for opcode at: 0x15)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-segoff-too-big 2>&1 | FileCheck -check-prefix SEGOFF-TOO-BIG %s
+SEGOFF-TOO-BIG: macho-bind-segoff-too-big': truncated or malformed object (for BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB bad segOffset, too large for opcode at: 0x15)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-add_addr_uleb 2>&1 | FileCheck -check-prefix ADD_ADDR_ULEB %s
+ADD_ADDR_ULEB: macho-bind-add_addr_uleb': truncated or malformed object (for BIND_OPCODE_ADD_ADDR_ULEB bad segOffset, too large for opcode at: 0x17)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-do-bind-no-segIndex 2>&1 | FileCheck -check-prefix BIND-NO-SEGINDEX %s
+BIND-NO-SEGINDEX: macho-bind-do-bind-no-segIndex': truncated or malformed object (for BIND_OPCODE_DO_BIND missing preceding *_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB for opcode at: 0x15)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-bind-add-addr-uleb 2>&1 | FileCheck -check-prefix ADD-ADDR-ULEB %s
+ADD-ADDR-ULEB: macho-bind-bind-add-addr-uleb': truncated or malformed object (for BIND_OPCODE_ADD_ADDR_ULEB (after adding ULEB) bad segOffset, too large for opcode at: 0x18)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-add-addr-imm-scaled 2>&1 | FileCheck -check-prefix ADD-ADDR-IMM-SCALED %s
+ADD-ADDR-IMM-SCALED: macho-bind-add-addr-imm-scaled': truncated or malformed object (for BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED (after adding immediate times the pointer size) bad segOffset, too large for opcode at: 0x17)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-uleb-times-skipping-uleb 2>&1 | FileCheck -check-prefix ULEB-TIMES-SKIPPING-ULEB %s
+ULEB-TIMES-SKIPPING-ULEB: macho-bind-uleb-times-skipping-uleb': truncated or malformed object (for BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB bad count and skip, too large for opcode at: 0x17)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-do-bind-no-symbol 2>&1 | FileCheck -check-prefix DO-BIND-NO-SYMBOL %s
+DO-BIND-NO-SYMBOL: macho-do-bind-no-symbol': truncated or malformed object (for BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB missing preceding BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM for opcode at: 0x5)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-do-bind-no-dylib-ordinal 2>&1 | FileCheck -check-prefix DO-BIND-NO-DYLIB-ORDINAL %s
+DO-BIND-NO-DYLIB-ORDINAL: macho-do-bind-no-dylib-ordinal': truncated or malformed object (for BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB missing preceding BIND_OPCODE_SET_DYLIB_ORDINAL_* for opcode at: 0x15)
+
+RUN: not llvm-objdump -macho -bind %p/Inputs/macho-bind-bad-opcode-value 2>&1 | FileCheck -check-prefix BAD-OPCODE-VALUE %s
+BAD-OPCODE-VALUE: macho-bind-bad-opcode-value': truncated or malformed object (bad bind info (bad opcode value 0xD0 for opcode at: 0x18)
+
+RUN: not llvm-objdump -macho -lazy-bind %p/Inputs/macho-lazy-do_bind_add_addr_uleb 2>&1 | FileCheck -check-prefix LAZY_DO_BIND_ADD_ADDR_ULEB %s
+LAZY_DO_BIND_ADD_ADDR_ULEB: macho-lazy-do_bind_add_addr_uleb': truncated or malformed object (BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB not allowed in lazy bind table for opcode at: 0xC)
+
+RUN: not llvm-objdump -macho -lazy-bind %p/Inputs/macho-lazy-do-bind-add-addr-imm-scaled 2>&1 | FileCheck -check-prefix LAZY-DO-BIND-ADD-ADDR-IMM-SCALED %s
+LAZY-DO-BIND-ADD-ADDR-IMM-SCALED: macho-lazy-do-bind-add-addr-imm-scaled': truncated or malformed object (BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED not allowed in lazy bind table for opcode at: 0xC)
+
+RUN: not llvm-objdump -macho -lazy-bind %p/Inputs/macho-lazy-do-bind-uleb-times-skipping-uleb 2>&1 | FileCheck -check-prefix LAZY-DO-BIND-ULEB-TIMES-SKIPPING-ULEB %s
+LAZY-DO-BIND-ULEB-TIMES-SKIPPING-ULEB: macho-lazy-do-bind-uleb-times-skipping-uleb': truncated or malformed object (BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB not allowed in lazy bind table for opcode at: 0xC)
+
+RUN: not llvm-objdump -macho -weak-bind %p/Inputs/macho-weak-bind-set-dylib-ordinal-imm 2>&1 | FileCheck -check-prefix WEAK-BIND-SET-DYLIB-ORDINAL-IMM %s
+WEAK-BIND-SET-DYLIB-ORDINAL-IMM: macho-weak-bind-set-dylib-ordinal-imm': truncated or malformed object (BIND_OPCODE_SET_DYLIB_ORDINAL_IMM not allowed in weak bind table for opcode at: 0x2)
+
+RUN: not llvm-objdump -macho -weak-bind %p/Inputs/macho-weak-bind-set-dylib-ordinal-uleb 2>&1 | FileCheck -check-prefix WEAK-BIND-SET-DYLIB-ORDINAL-ULEB %s
+WEAK-BIND-SET-DYLIB-ORDINAL-ULEB: macho-weak-bind-set-dylib-ordinal-uleb': truncated or malformed object (BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB not allowed in weak bind table for opcode at: 0x2)
+
+RUN: not llvm-objdump -macho -weak-bind %p/Inputs/macho-weak-bind-set-dylib-special-imm 2>&1 | FileCheck -check-prefix WEAK-BIND-SET-DYLIB-SPECIAL-IMM %s
+WEAK-BIND-SET-DYLIB-SPECIAL-IMM: macho-weak-bind-set-dylib-special-imm': truncated or malformed object (BIND_OPCODE_SET_DYLIB_SPECIAL_IMM not allowed in weak bind table for opcode at: 0x2)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-set-type-imm 2>&1 | FileCheck -check-prefix REBASE-SET-TYPE-IMM %s
+REBASE-SET-TYPE-IMM: macho-rebase-set-type-imm': truncated or malformed object (for REBASE_OPCODE_SET_TYPE_IMM bad bind type: 5 for opcode at: 0x0)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-uleb-malformed-uleb128 2>&1 | FileCheck -check-prefix REBASE-ULEB-MALFORMED-ULEB128 %s
+REBASE-ULEB-MALFORMED-ULEB128: macho-rebase-uleb-malformed-uleb128': truncated or malformed object (for REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB malformed uleb128, extends past end for opcode at: 0x1)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-seg-too-big 2>&1 | FileCheck -check-prefix REBASE-SEG-TOO-BIG %s
+REBASE-SEG-TOO-BIG: macho-rebase-seg-too-big': truncated or malformed object (for REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB bad segIndex (too large) for opcode at: 0x1)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-segoff-too-big 2>&1 | FileCheck -check-prefix REBASE-SEGOFF-TOO-BIG %s
+REBASE-SEGOFF-TOO-BIG: macho-rebase-segoff-too-big': truncated or malformed object (for REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB bad segOffset, too large for opcode at: 0x1)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-add-addr-uleb 2>&1 | FileCheck -check-prefix REBASE-ADD-ADDR-ULEB %s
+REBASE-ADD-ADDR-ULEB: macho-rebase-add-addr-uleb': truncated or malformed object (for REBASE_OPCODE_ADD_ADDR_ULEB bad segOffset, too large for opcode at: 0x3)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-add-addr-imm-scaled 2>&1 | FileCheck -check-prefix REBASE-ADD-ADDR-IMM-SCALED %s
+REBASE-ADD-ADDR-IMM-SCALED: macho-rebase-add-addr-imm-scaled': truncated or malformed object (for REBASE_OPCODE_ADD_ADDR_IMM_SCALED (after adding immediate times the pointer size) bad segOffset, too large for opcode at: 0x3)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-imm-times 2>&1 | FileCheck -check-prefix REBASE-IMM-TIMES %s
+REBASE-IMM-TIMES: macho-rebase-imm-times': truncated or malformed object (for REBASE_OPCODE_DO_REBASE_IMM_TIMES bad count and skip, too large for opcode at: 0x3)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-uleb-times 2>&1 | FileCheck -check-prefix REBASE-ULEB-TIMES %s
+REBASE-ULEB-TIMES: macho-rebase-uleb-times': truncated or malformed object (for REBASE_OPCODE_DO_REBASE_ULEB_TIMES bad count and skip, too large for opcode at: 0x3)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-add-addr-uleb-too-big 2>&1 | FileCheck -check-prefix REBASE-ADD-ADDR-ULEB-TOO-BIG %s
+REBASE-ADD-ADDR-ULEB-TOO-BIG: macho-rebase-add-addr-uleb-too-big': truncated or malformed object (for REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB bad count and skip, too large for opcode at: 0x3)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-uleb-times-skipping-uleb 2>&1 | FileCheck -check-prefix REBASE-ULEB-TIMES-SKIPPING-ULEB %s
+REBASE-ULEB-TIMES-SKIPPING-ULEB: macho-rebase-uleb-times-skipping-uleb': truncated or malformed object (for REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB bad count and skip, too large for opcode at: 0x3)
+
+RUN: not llvm-objdump -macho -rebase %p/Inputs/macho-rebase-bad-opcode-value 2>&1 | FileCheck -check-prefix REBASE-BAD-OPCODE-VALUE %s
+REBASE-BAD-OPCODE-VALUE: macho-rebase-bad-opcode-value': truncated or malformed object (bad rebase info (bad opcode value 0xD0 for opcode at: 0x4)
diff --git a/test/tools/llvm-objdump/macho-bad-ordinal.test b/test/tools/llvm-objdump/macho-bad-ordinal.test
index 16badcc878d8..fb49f77f0751 100644
--- a/test/tools/llvm-objdump/macho-bad-ordinal.test
+++ b/test/tools/llvm-objdump/macho-bad-ordinal.test
@@ -1,6 +1,4 @@
-# RUN: llvm-objdump -macho -bind -lazy-bind %p/Inputs/bad-ordinal.macho-x86_64 \
-# RUN: | FileCheck %s
+# RUN: not llvm-objdump -macho -lazy-bind %p/Inputs/bad-ordinal.macho-x86_64 \
+# RUN: 2>&1 | FileCheck %s
-
-# CHECK: __DATA __nl_symbol_ptr 0x100001000 pointer 0 <<bad library ordinal>> dyld_stub_binder
-# CHECK: __DATA __la_symbol_ptr 0x100001010 <<bad library ordinal>> _printf
+# CHECK: bad-ordinal.macho-x86_64': truncated or malformed object (for BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB bad library ordinal: 2 (max 1) for opcode at: 0x2)
diff --git a/test/tools/llvm-objdump/malformed-macho.test b/test/tools/llvm-objdump/malformed-macho.test
index 0bc2ce8e898f..924d58a1df24 100644
--- a/test/tools/llvm-objdump/malformed-macho.test
+++ b/test/tools/llvm-objdump/malformed-macho.test
@@ -1,2 +1,3 @@
-RUN: not llvm-objdump -macho -s %p/Inputs/malformed-macho.bin 2>&1 | FileCheck %s -check-prefix=MALFORMED
-MALFORMED: The file was not recognized as a valid object file
+RUN: llvm-objdump -macho -private-header %p/Inputs/malformed-macho.bin %p/Inputs/empty.macho-armv7 2>&1 | FileCheck %s -check-prefix=MALFORMED
+MALFORMED: is not an object file
+MALFORMED-NEXT: Mach header
diff --git a/test/tools/llvm-objdump/wasm.txt b/test/tools/llvm-objdump/wasm.txt
index ebda2249f8b8..4aa40c6c9df8 100644
--- a/test/tools/llvm-objdump/wasm.txt
+++ b/test/tools/llvm-objdump/wasm.txt
@@ -9,12 +9,12 @@
# CHECK: 4 EXPORT 0000000e 0000000000000000
# CHECK: 5 ELEM 00000007 0000000000000000
# CHECK: 6 CODE 0000002a 0000000000000000 TEXT
-# CHECK: 7 name 0000002c 0000000000000000
+# CHECK: 7 name 0000003c 0000000000000000
# RUN: llvm-objdump -p %p/Inputs/test.wasm | FileCheck %s -check-prefix CHECK-HEADER
# CHECK-HEADER: Program Header:
-# CHECK-HEADER: Version: 0xd
+# CHECK-HEADER: Version: 0x1
# RUN: llvm-objdump -s --section=CODE %p/Inputs/test.wasm | FileCheck %s -check-prefix CHECK-SECTIONS