aboutsummaryrefslogtreecommitdiffstats
path: root/test/tools
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2015-03-23 12:10:34 -0700
committerStephen Hines <srhines@google.com>2015-03-23 12:10:34 -0700
commitebe69fe11e48d322045d5949c83283927a0d790b (patch)
treec92f1907a6b8006628a4b01615f38264d29834ea /test/tools
parentb7d2e72b02a4cb8034f32f8247a2558d2434e121 (diff)
downloadexternal_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.zip
external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.gz
external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.bz2
Update aosp/master LLVM for rebase to r230699.
Change-Id: I2b5be30509658cb8266be782de0ab24f9099f9b9
Diffstat (limited to 'test/tools')
-rwxr-xr-xtest/tools/dsymutil/Inputs/basic-archive.macho.x86_64bin0 -> 9352 bytes
-rwxr-xr-xtest/tools/dsymutil/Inputs/basic-lto.macho.x86_64bin0 -> 8912 bytes
-rw-r--r--test/tools/dsymutil/Inputs/basic-lto.macho.x86_64.obin0 -> 4516 bytes
-rwxr-xr-xtest/tools/dsymutil/Inputs/basic.macho.x86_64bin0 -> 9320 bytes
-rw-r--r--test/tools/dsymutil/Inputs/basic1.c28
-rw-r--r--test/tools/dsymutil/Inputs/basic1.macho.x86_64.obin0 -> 2376 bytes
-rw-r--r--test/tools/dsymutil/Inputs/basic2.c22
-rw-r--r--test/tools/dsymutil/Inputs/basic2.macho.x86_64.obin0 -> 3472 bytes
-rw-r--r--test/tools/dsymutil/Inputs/basic3.c20
-rw-r--r--test/tools/dsymutil/Inputs/basic3.macho.x86_64.obin0 -> 3008 bytes
-rw-r--r--test/tools/dsymutil/Inputs/libbasic.abin0 -> 6840 bytes
-rw-r--r--test/tools/dsymutil/basic-linking.test149
-rw-r--r--test/tools/dsymutil/debug-map-parsing.test79
-rw-r--r--test/tools/gold/Inputs/comdat.ll9
-rw-r--r--test/tools/gold/Inputs/drop-debug.bcbin0 -> 1152 bytes
-rw-r--r--test/tools/gold/alias.ll2
-rw-r--r--test/tools/gold/bad-alias.ll2
-rw-r--r--test/tools/gold/bcsection.ll2
-rw-r--r--test/tools/gold/coff.ll22
-rw-r--r--test/tools/gold/comdat.ll14
-rw-r--r--test/tools/gold/common.ll6
-rw-r--r--test/tools/gold/drop-debug.ll8
-rw-r--r--test/tools/gold/emit-llvm.ll26
-rw-r--r--test/tools/gold/invalid.ll2
-rw-r--r--test/tools/gold/linker-script.ll2
-rw-r--r--test/tools/gold/linkonce-weak.ll4
-rw-r--r--test/tools/gold/mtriple.ll2
-rw-r--r--test/tools/gold/no-map-whole-file.ll9
-rw-r--r--test/tools/gold/option.ll2
-rw-r--r--test/tools/gold/pr19901.ll4
-rw-r--r--test/tools/gold/slp-vectorize.ll2
-rw-r--r--test/tools/gold/stats.ll7
-rw-r--r--test/tools/gold/vectorize.ll2
-rw-r--r--test/tools/gold/weak.ll2
-rw-r--r--test/tools/llvm-cov/Inputs/highlightedRanges.covmappingbin355 -> 355 bytes
-rw-r--r--test/tools/llvm-cov/Inputs/regionMarkers.covmappingbin194 -> 202 bytes
-rw-r--r--test/tools/llvm-cov/Inputs/report.covmappingbin256 -> 219 bytes
-rw-r--r--test/tools/llvm-cov/Inputs/showExpansions.covmappingbin194 -> 250 bytes
-rw-r--r--test/tools/llvm-cov/report.cpp20
-rw-r--r--test/tools/llvm-cov/showHighlightedRanges.cpp12
-rw-r--r--test/tools/llvm-cov/showLineExecutionCounts.cpp4
-rw-r--r--test/tools/llvm-objdump/AArch64/Inputs/link-opt-hints.macho-aarch64bin0 -> 984 bytes
-rw-r--r--test/tools/llvm-objdump/AArch64/macho-link-opt-hints.test11
-rw-r--r--test/tools/llvm-objdump/AArch64/macho-private-headers.test312
-rw-r--r--test/tools/llvm-objdump/ARM/Inputs/data-in-code.macho-armbin0 -> 336 bytes
-rw-r--r--test/tools/llvm-objdump/ARM/macho-data-in-code.test8
-rw-r--r--test/tools/llvm-objdump/ARM/macho-private-headers.test345
-rw-r--r--test/tools/llvm-objdump/Inputs/common-symbol-elfbin0 -> 598 bytes
-rw-r--r--test/tools/llvm-objdump/Inputs/proc-specific-section-elfbin0 -> 836 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/dylibModInit.macho-x86_64bin0 -> 8256 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/dylibRoutines.macho-x86_64bin0 -> 4288 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/dylibSubClient.macho-x86_64bin0 -> 4240 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/dylibSubFramework.macho-x86_64bin0 -> 4240 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/dylibSubLibrary.macho-x86_64bin0 -> 4220 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/dylibSubUmbrella.macho-x86_64bin0 -> 4220 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/exeThread.macho-x86_64bin0 -> 9100 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/linkerOption.macho-x86_64bin0 -> 744 bytes
-rw-r--r--test/tools/llvm-objdump/X86/Inputs/macho-universal-archive.x86_64.i386bin0 -> 1656 bytes
-rwxr-xr-xtest/tools/llvm-objdump/X86/Inputs/macho-universal.x86_64.i386bin0 -> 16624 bytes
-rw-r--r--test/tools/llvm-objdump/X86/macho-archive-headers.test10
-rw-r--r--test/tools/llvm-objdump/X86/macho-cstring-dump.test4
-rw-r--r--test/tools/llvm-objdump/X86/macho-indirect-symbols.test12
-rw-r--r--test/tools/llvm-objdump/X86/macho-literal-pointers-i386.test34
-rw-r--r--test/tools/llvm-objdump/X86/macho-literal-pointers-x86_64.test34
-rw-r--r--test/tools/llvm-objdump/X86/macho-literals.test48
-rw-r--r--test/tools/llvm-objdump/X86/macho-nontext-disasm.test9
-rw-r--r--test/tools/llvm-objdump/X86/macho-private-headers.test77
-rw-r--r--test/tools/llvm-objdump/X86/macho-relocations.test7
-rw-r--r--test/tools/llvm-objdump/X86/macho-section-contents.test17
-rw-r--r--test/tools/llvm-objdump/X86/macho-section-headers.test8
-rw-r--r--test/tools/llvm-objdump/X86/macho-section.test4
-rw-r--r--test/tools/llvm-objdump/X86/macho-symbol-table.test8
-rw-r--r--test/tools/llvm-objdump/X86/macho-universal-x86_64.i386.test44
-rw-r--r--test/tools/llvm-objdump/X86/macho-unwind-info.test7
-rw-r--r--test/tools/llvm-objdump/common-symbol-elf.test3
-rw-r--r--test/tools/llvm-objdump/proc-specific-section-elf.test3
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-0.s234
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-1.s220
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-10.s24
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-11.s24
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-12.s24
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-13.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-136.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-14.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-15.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-2.s178
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-3.s108
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-4.s59
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-5.s52
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-6.s52
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-7.s38
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-8.s31
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-9.s24
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-A.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-M.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-R.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-S.s10
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-conformance-1.s8
-rw-r--r--test/tools/llvm-readobj/ARM/attribute-conformance-2.s8
-rw-r--r--test/tools/llvm-readobj/ARM/attributes.s287
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/export-arm.dllbin0 -> 5632 bytes
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/export-x64.dllbin0 -> 6144 bytes
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/export-x86.dllbin0 -> 6144 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/relocs-no-symtab.obj.coff-i386bin0 -> 97 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64bin3144 -> 4232 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/relocs.obj.elf-armbin2100 -> 2112 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/relocs.py44
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/trivial.exe.coff-armbin0 -> 7680 bytes
-rw-r--r--test/tools/llvm-readobj/codeview-linetables.test28
-rw-r--r--test/tools/llvm-readobj/coff-arm-baserelocs.test7
-rw-r--r--test/tools/llvm-readobj/coff-exports.test11
-rw-r--r--test/tools/llvm-readobj/reloc-types.test44
-rw-r--r--test/tools/llvm-readobj/relocations.test2
113 files changed, 2711 insertions, 344 deletions
diff --git a/test/tools/dsymutil/Inputs/basic-archive.macho.x86_64 b/test/tools/dsymutil/Inputs/basic-archive.macho.x86_64
new file mode 100755
index 0000000..abffb06
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic-archive.macho.x86_64
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/basic-lto.macho.x86_64 b/test/tools/dsymutil/Inputs/basic-lto.macho.x86_64
new file mode 100755
index 0000000..b5ffb03
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic-lto.macho.x86_64
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/basic-lto.macho.x86_64.o b/test/tools/dsymutil/Inputs/basic-lto.macho.x86_64.o
new file mode 100644
index 0000000..c68e15a
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic-lto.macho.x86_64.o
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/basic.macho.x86_64 b/test/tools/dsymutil/Inputs/basic.macho.x86_64
new file mode 100755
index 0000000..8b3a34a
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic.macho.x86_64
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/basic1.c b/test/tools/dsymutil/Inputs/basic1.c
new file mode 100644
index 0000000..cedf83a
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic1.c
@@ -0,0 +1,28 @@
+/* This is the main file used to produce the basic* objects that are
+ used for the dsymutil tests.
+
+ These are compiled in a couple of different ways (always on a
+ Darwin system):
+ Basic compilation:
+ for FILE in basic1.c basic2.c basic3.c; do
+ clang -g -c $FILE -o ${FILE%.c}.macho.x86_64.o
+ done
+ clang basic1.macho.x86_64.o basic2.macho.x86_64.o basic3.macho.x86_64.o -o basic.macho.x86_64 -Wl,-dead_strip
+
+ LTO compilation:
+ for FILE in basic1.c basic2.c basic3.c; do
+ clang -g -c -flto $FILE -o ${FILE%.c}-lto.o
+ done
+ clang basic1-lto.o basic2-lto.o basic3-lto.o -o basic-lto.macho.x86_64 -Wl,-object_path_lto,$PWD/basic-lto.macho.x86_64.o -Wl,-dead_strip
+ rm basic1-lto.o basic2-lto.o basic3-lto.o
+
+ Archive compilation (after basic compilation):
+ ar -q libbasic.a basic2.macho.x86_64.o basic3.macho.x86_64.o
+ clang basic1.macho.x86_64.o -lbasic -o basic-archive.macho.x86_64 -Wl,-dead_strip -L.
+*/
+
+int foo(int);
+
+int main(int argc, const char *argv[]) {
+ return foo(argc);
+}
diff --git a/test/tools/dsymutil/Inputs/basic1.macho.x86_64.o b/test/tools/dsymutil/Inputs/basic1.macho.x86_64.o
new file mode 100644
index 0000000..d7b5000
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic1.macho.x86_64.o
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/basic2.c b/test/tools/dsymutil/Inputs/basic2.c
new file mode 100644
index 0000000..13c6d07
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic2.c
@@ -0,0 +1,22 @@
+/* For compilation instructions see basic1.c. */
+
+static int baz = 42;
+static int private_int;
+extern volatile int val;
+int unused_data = 1;
+
+int bar(int);
+
+void unused1() {
+ bar(baz);
+}
+
+static int inc() {
+ return ++private_int;
+}
+
+__attribute__((noinline))
+int foo(int arg) {
+ return bar(arg+val) + inc() + baz++;
+}
+
diff --git a/test/tools/dsymutil/Inputs/basic2.macho.x86_64.o b/test/tools/dsymutil/Inputs/basic2.macho.x86_64.o
new file mode 100644
index 0000000..bdd8225
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic2.macho.x86_64.o
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/basic3.c b/test/tools/dsymutil/Inputs/basic3.c
new file mode 100644
index 0000000..f20998a
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic3.c
@@ -0,0 +1,20 @@
+/* For compilation instructions see basic1.c. */
+
+volatile int val;
+
+extern int foo(int);
+
+int unused2() {
+ return foo(val);
+}
+
+static int inc() {
+ return ++val;
+}
+
+__attribute__((noinline))
+int bar(int arg) {
+ if (arg > 42)
+ return inc();
+ return foo(val + arg);
+}
diff --git a/test/tools/dsymutil/Inputs/basic3.macho.x86_64.o b/test/tools/dsymutil/Inputs/basic3.macho.x86_64.o
new file mode 100644
index 0000000..3c1c639
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/basic3.macho.x86_64.o
Binary files differ
diff --git a/test/tools/dsymutil/Inputs/libbasic.a b/test/tools/dsymutil/Inputs/libbasic.a
new file mode 100644
index 0000000..9657e78
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/libbasic.a
Binary files differ
diff --git a/test/tools/dsymutil/basic-linking.test b/test/tools/dsymutil/basic-linking.test
new file mode 100644
index 0000000..5de6c13
--- /dev/null
+++ b/test/tools/dsymutil/basic-linking.test
@@ -0,0 +1,149 @@
+RUN: llvm-dsymutil -v -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s
+RUN: llvm-dsymutil -v -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO
+RUN: llvm-dsymutil -v -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE
+
+This test check the basic Dwarf linking process through the debug dumps.
+
+================================= Simple link ================================
+CHECK: DEBUG MAP OBJECT: {{.*}}basic1.macho.x86_64.o
+CHECK: Input compilation unit:
+CHECK-NEXT: TAG_compile_unit
+CHECK-NOT: TAG
+CHECK: AT_name {{.*}}basic1.c
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _main 0000000000000000 => 0000000100000ea0
+CHECK-NEXT: DW_TAG_subprogram
+CHECK-NEXT: DW_AT_name{{.*}}"main"
+
+CHECK: DEBUG MAP OBJECT: {{.*}}basic2.macho.x86_64.o
+CHECK: Input compilation unit:
+CHECK-NEXT: TAG_compile_unit
+CHECK-NOT: TAG
+CHECK: AT_name {{.*}}basic2.c
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _private_int 0000000000000560 => 0000000100001008
+CHECK-NEXT: DW_TAG_variable
+CHECK-NEXT: DW_AT_name {{.*}}"private_int"
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _baz 0000000000000310 => 0000000100001000
+CHECK-NEXT: DW_TAG_variable
+CHECK-NEXT: DW_AT_name {{.*}}"baz"
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _foo 0000000000000020 => 0000000100000ed0
+CHECK-NEXT: DW_TAG_subprogram
+CHECK-NEXT: DW_AT_name {{.*}}"foo"
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f20
+CHECK-NEXT: DW_TAG_subprogram
+CHECK-NEXT: DW_AT_name {{.*}}"inc"
+
+CHECK: DEBUG MAP OBJECT: {{.*}}basic3.macho.x86_64.o
+CHECK: Input compilation unit:
+CHECK-NEXT: TAG_compile_unit
+CHECK-NOT: TAG
+CHECK: AT_name {{.*}}basic3.c
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _val 0000000000000004 => 0000000100001004
+CHECK-NEXT: DW_TAG_variable
+CHECK-NEXT: DW_AT_name {{.*}}"val"
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _bar 0000000000000020 => 0000000100000f40
+CHECK-NEXT: DW_TAG_subprogram
+CHECK-NEXT: DW_AT_name {{.*}}"bar"
+CHECK-NOT: Found valid debug map entry
+CHECK: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f90
+CHECK-NEXT: DW_TAG_subprogram
+CHECK-NEXT: DW_AT_name {{.*}}"inc")
+
+
+================================= LTO link ================================
+CHECK-LTO: DEBUG MAP OBJECT: {{.*}}basic-lto.macho.x86_64.o
+CHECK-LTO: Input compilation unit:
+CHECK-LTO-NEXT: TAG_compile_unit
+CHECK-LTO-NOT: TAG
+CHECK-LTO: AT_name {{.*}}basic1.c
+CHECK-LTO: Input compilation unit:
+CHECK-LTO-NEXT: TAG_compile_unit
+CHECK-LTO-NOT: TAG
+CHECK-LTO: AT_name {{.*}}basic2.c
+CHECK-LTO: Input compilation unit:
+CHECK-LTO-NEXT: TAG_compile_unit
+CHECK-LTO-NOT: TAG
+CHECK-LTO: AT_name {{.*}}basic3.c
+
+CHECK-LTO-NOT: Found valid debug map entry
+CHECK-LTO: Found valid debug map entry: _main 0000000000000000 => 0000000100000f40
+CHECK-LTO-NEXT: DW_TAG_subprogram
+CHECK-LTO-NEXT: DW_AT_name {{.*}}"main"
+CHECK-LTO-NOT: Found valid debug map entry
+CHECK-LTO: Found valid debug map entry: _private_int 00000000000008e8 => 0000000100001008
+CHECK-LTO-NEXT: DW_TAG_variable
+CHECK-LTO-NEXT: DW_AT_name {{.*}}"private_int"
+CHECK-LTO-NOT: Found valid debug map entry
+CHECK-LTO: Found valid debug map entry: _baz 0000000000000658 => 0000000100001000
+CHECK-LTO-NEXT: DW_TAG_variable
+CHECK-LTO-NEXT: DW_AT_name {{.*}} "baz"
+CHECK-LTO-NOT: Found valid debug map entry
+CHECK-LTO: Found valid debug map entry: _foo 0000000000000010 => 0000000100000f50
+CHECK-LTO-NEXT: DW_TAG_subprogram
+CHECK-LTO-NEXT: DW_AT_name {{.*}}"foo"
+CHECK-LTO-NOT: Found valid debug map entry
+CHECK-LTO: Found valid debug map entry: _val 00000000000008ec => 0000000100001004
+CHECK-LTO-NEXT: DW_TAG_variable
+CHECK-LTO-NEXT: DW_AT_name {{.*}}"val"
+CHECK-LTO-NOT: Found valid debug map entry
+CHECK-LTO: Found valid debug map entry: _bar 0000000000000050 => 0000000100000f90
+CHECK-LTO-NEXT: DW_TAG_subprogram
+CHECK-LTO-NEXT: DW_AT_name {{.*}}"bar"
+
+
+================================= Archive link ================================
+CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}basic1.macho.x86_64.o
+CHECK-ARCHIVE: Input compilation unit:
+CHECK-ARCHIVE-NEXT: TAG_compile_unit
+CHECK-ARCHIVE-NOT: TAG
+CHECK-ARCHIVE: AT_name {{.*}}basic1.c
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _main 0000000000000000 => 0000000100000ea0
+CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
+CHECK-ARCHIVE-NEXT: DW_AT_name{{.*}}"main"
+
+CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}libbasic.a(basic2.macho.x86_64.o)
+CHECK-ARCHIVE: Input compilation unit:
+CHECK-ARCHIVE-NEXT: TAG_compile_unit
+CHECK-ARCHIVE-NOT: TAG
+CHECK-ARCHIVE: AT_name {{.*}}basic2.c
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _private_int 0000000000000560 => 0000000100001004
+CHECK-ARCHIVE-NEXT: DW_TAG_variable
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"private_int"
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _baz 0000000000000310 => 0000000100001000
+CHECK-ARCHIVE-NEXT: DW_TAG_variable
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"baz"
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _foo 0000000000000020 => 0000000100000ed0
+CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"foo"
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f20
+CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"inc"
+
+CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}libbasic.a(basic3.macho.x86_64.o)
+CHECK-ARCHIVE: Input compilation unit:
+CHECK-ARCHIVE-NEXT: TAG_compile_unit
+CHECK-ARCHIVE-NOT: TAG
+CHECK-ARCHIVE: AT_name {{.*}}basic3.c
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _val 0000000000000004 => 0000000100001008
+CHECK-ARCHIVE-NEXT: DW_TAG_variable
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"val"
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _bar 0000000000000020 => 0000000100000f40
+CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"bar"
+CHECK-ARCHIVE-NOT: Found valid debug map entry
+CHECK-ARCHIVE: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f90
+CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
+CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"inc")
diff --git a/test/tools/dsymutil/debug-map-parsing.test b/test/tools/dsymutil/debug-map-parsing.test
new file mode 100644
index 0000000..b64ad9f
--- /dev/null
+++ b/test/tools/dsymutil/debug-map-parsing.test
@@ -0,0 +1,79 @@
+RUN: llvm-dsymutil -v -parse-only -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s
+RUN: llvm-dsymutil -v -parse-only -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO
+RUN: llvm-dsymutil -v -parse-only -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE
+RUN: llvm-dsymutil -v -parse-only %p/Inputs/basic.macho.x86_64 2>&1 | FileCheck %s --check-prefix=NOT-FOUND
+RUN: not llvm-dsymutil -v -parse-only %p/Inputs/inexistant 2>&1 | FileCheck %s --check-prefix=NO-EXECUTABLE
+
+
+Check that We can parse the debug map of the basic executable.
+
+CHECK-NOT: error
+CHECK: DEBUG MAP: x86_64-unknown-unknown-macho
+CHECK: /Inputs/basic1.macho.x86_64.o:
+CHECK: 0000000000000000 => 0000000100000ea0 _main
+CHECK: /Inputs/basic2.macho.x86_64.o:
+CHECK: 0000000000000310 => 0000000100001000 _baz
+CHECK: 0000000000000020 => 0000000100000ed0 _foo
+CHECK: 0000000000000070 => 0000000100000f20 _inc
+CHECK: 0000000000000560 => 0000000100001008 _private_int
+CHECK: /Inputs/basic3.macho.x86_64.o:
+CHECK: 0000000000000020 => 0000000100000f40 _bar
+CHECK: 0000000000000070 => 0000000100000f90 _inc
+CHECK: 0000000000000004 => 0000000100001004 _val
+CHECK: END DEBUG MAP
+
+
+Check that we can parse the debug-map of the basic-lto executable
+
+CHECK-LTO-NOT: error
+CHECK-LTO: DEBUG MAP: x86_64-unknown-unknown-macho
+CHECK-LTO: /Inputs/basic-lto.macho.x86_64.o:
+CHECK-LTO: 0000000000000050 => 0000000100000f90 _bar
+CHECK-LTO: 0000000000000658 => 0000000100001000 _baz
+CHECK-LTO: 0000000000000010 => 0000000100000f50 _foo
+CHECK-LTO: 0000000000000000 => 0000000100000f40 _main
+CHECK-LTO: 00000000000008e8 => 0000000100001008 _private_int
+CHECK-LTO: 00000000000008ec => 0000000100001004 _val
+CHECK-LTO: END DEBUG MAP
+
+Check thet we correctly handle debug maps with archive members (including only
+opening the archive once if mulitple of its members are used).
+
+CHECK-ARCHIVE: trying to open {{.*}}basic-archive.macho.x86_64'
+CHECK-ARCHIVE-NEXT: loaded file.
+CHECK-ARCHIVE-NEXT: trying to open {{.*}}/Inputs/basic1.macho.x86_64.o'
+CHECK-ARCHIVE-NEXT: loaded file.
+CHECK-ARCHIVE-NEXT: trying to open {{.*}}/libbasic.a(basic2.macho.x86_64.o)'
+CHECK-ARCHIVE-NEXT: opened new archive {{.*}}/libbasic.a'
+CHECK-ARCHIVE-NEXT: found member in current archive.
+CHECK-ARCHIVE-NEXT: trying to open {{.*}}/libbasic.a(basic3.macho.x86_64.o)'
+CHECK-ARCHIVE-NEXT: found member in current archive.
+CHECK-ARCHIVE: DEBUG MAP: x86_64-unknown-unknown-macho
+CHECK-ARCHIVE: object addr => executable addr symbol name
+CHECK-ARCHIVE: /Inputs/basic1.macho.x86_64.o:
+CHECK-ARCHIVE: 0000000000000000 => 0000000100000ea0 _main
+CHECK-ARCHIVE: /Inputs/./libbasic.a(basic2.macho.x86_64.o):
+CHECK-ARCHIVE: 0000000000000310 => 0000000100001000 _baz
+CHECK-ARCHIVE: 0000000000000020 => 0000000100000ed0 _foo
+CHECK-ARCHIVE: 0000000000000070 => 0000000100000f20 _inc
+CHECK-ARCHIVE: 0000000000000560 => 0000000100001004 _private_int
+CHECK-ARCHIVE: /Inputs/./libbasic.a(basic3.macho.x86_64.o):
+CHECK-ARCHIVE: 0000000000000020 => 0000000100000f40 _bar
+CHECK-ARCHIVE: 0000000000000070 => 0000000100000f90 _inc
+CHECK-ARCHIVE: 0000000000000004 => 0000000100001008 _val
+CHECK-ARCHIVE: END DEBUG MAP
+
+Check that we warn about missing object files (this presumes that the files aren't
+present in the machine's /Inputs/ folder, which should be a pretty safe bet).
+
+NOT-FOUND: cannot open{{.*}}"/Inputs/basic1.macho.x86_64.o": {{[Nn]o}} such file
+NOT-FOUND: cannot open{{.*}}"/Inputs/basic2.macho.x86_64.o": {{[Nn]o}} such file
+NOT-FOUND: cannot open{{.*}}"/Inputs/basic3.macho.x86_64.o": {{[Nn]o}} such file
+NOT-FOUND: DEBUG MAP:
+NOT-FOUND-NEXT: object addr => executable addr symbol name
+NOT-FOUND-NEXT: END DEBUG MAP
+
+Check that we correctly error out on invalid executatble.
+
+NO-EXECUTABLE: cannot parse{{.*}}/inexistant": {{[Nn]o}} such file
+NO-EXECUTABLE-NOT: DEBUG MAP
diff --git a/test/tools/gold/Inputs/comdat.ll b/test/tools/gold/Inputs/comdat.ll
index e9e4704..464aefa 100644
--- a/test/tools/gold/Inputs/comdat.ll
+++ b/test/tools/gold/Inputs/comdat.ll
@@ -1,7 +1,12 @@
$c2 = comdat any
+$c1 = comdat any
-@v1 = weak_odr global i32 41, comdat $c2
-define weak_odr protected i32 @f1(i8* %this) comdat $c2 {
+; This is only present in this file. The linker will keep $c1 from the first
+; file and this will be undefined.
+@will_be_undefined = global i32 1, comdat($c1)
+
+@v1 = weak_odr global i32 41, comdat($c2)
+define weak_odr protected i32 @f1(i8* %this) comdat($c2) {
bb20:
store i8* %this, i8** null
br label %bb21
diff --git a/test/tools/gold/Inputs/drop-debug.bc b/test/tools/gold/Inputs/drop-debug.bc
new file mode 100644
index 0000000..f9c471f
--- /dev/null
+++ b/test/tools/gold/Inputs/drop-debug.bc
Binary files differ
diff --git a/test/tools/gold/alias.ll b/test/tools/gold/alias.ll
index dbf3af5..b4edb05 100644
--- a/test/tools/gold/alias.ll
+++ b/test/tools/gold/alias.ll
@@ -1,6 +1,6 @@
; RUN: llvm-as %s -o %t.o
; RUN: llvm-as %p/Inputs/alias-1.ll -o %t2.o
-; RUN: ld -shared -o %t3.o -plugin %llvmshlibdir/LLVMgold.so %t2.o %t.o \
+; RUN: %gold -shared -o %t3.o -plugin %llvmshlibdir/LLVMgold.so %t2.o %t.o \
; RUN: -plugin-opt=emit-llvm
; RUN: llvm-dis < %t3.o -o - | FileCheck %s
diff --git a/test/tools/gold/bad-alias.ll b/test/tools/gold/bad-alias.ll
index e0fc788..a98bf71 100644
--- a/test/tools/gold/bad-alias.ll
+++ b/test/tools/gold/bad-alias.ll
@@ -1,6 +1,6 @@
; RUN: llvm-as %s -o %t.o
-; RUN: not ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: not %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: -shared %t.o -o %t2.o 2>&1 | FileCheck %s
diff --git a/test/tools/gold/bcsection.ll b/test/tools/gold/bcsection.ll
index 8565d9d..37d2994 100644
--- a/test/tools/gold/bcsection.ll
+++ b/test/tools/gold/bcsection.ll
@@ -2,7 +2,7 @@
; RUN: llvm-mc -I=%T -filetype=obj -o %T/bcsection.bco %p/Inputs/bcsection.s
; RUN: llvm-nm -no-llvm-bc %T/bcsection.bco | count 0
-; RUN: ld -r -o %T/bcsection.o -plugin %llvmshlibdir/LLVMgold.so %T/bcsection.bco
+; RUN: %gold -r -o %T/bcsection.o -plugin %llvmshlibdir/LLVMgold.so %T/bcsection.bco
; RUN: llvm-nm -no-llvm-bc %T/bcsection.o | FileCheck %s
; CHECK: main
diff --git a/test/tools/gold/coff.ll b/test/tools/gold/coff.ll
new file mode 100644
index 0000000..5d8a1c9
--- /dev/null
+++ b/test/tools/gold/coff.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-as %s -o %t.o
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so -plugin-opt=emit-llvm \
+; RUN: -shared %t.o -o %t2.o
+; RUN: llvm-dis %t2.o -o - | FileCheck %s
+
+
+target datalayout = "m:w"
+
+; CHECK: define void @f() {
+define void @f() {
+ ret void
+}
+
+; CHECK: define internal void @g() {
+define hidden void @g() {
+ ret void
+}
+
+; CHECK: define internal void @h() {
+define linkonce_odr void @h() {
+ ret void
+}
diff --git a/test/tools/gold/comdat.ll b/test/tools/gold/comdat.ll
index ba3abce..370bf56 100644
--- a/test/tools/gold/comdat.ll
+++ b/test/tools/gold/comdat.ll
@@ -1,13 +1,13 @@
; RUN: llvm-as %s -o %t.o
; RUN: llvm-as %p/Inputs/comdat.ll -o %t2.o
-; RUN: ld -shared -o %t3.o -plugin %llvmshlibdir/LLVMgold.so %t.o %t2.o \
+; RUN: %gold -shared -o %t3.o -plugin %llvmshlibdir/LLVMgold.so %t.o %t2.o \
; RUN: -plugin-opt=emit-llvm
; RUN: llvm-dis %t3.o -o - | FileCheck %s
$c1 = comdat any
-@v1 = weak_odr global i32 42, comdat $c1
-define weak_odr i32 @f1(i8*) comdat $c1 {
+@v1 = weak_odr global i32 42, comdat($c1)
+define weak_odr i32 @f1(i8*) comdat($c1) {
bb10:
br label %bb11
bb11:
@@ -27,7 +27,7 @@ bb11:
; CHECK: $c1 = comdat any
; CHECK: $c2 = comdat any
-; CHECK: @v1 = weak_odr global i32 42, comdat $c1
+; CHECK: @v1 = weak_odr global i32 42, comdat($c1)
; CHECK: @r11 = global i32* @v1{{$}}
; CHECK: @r12 = global i32 (i8*)* @f1{{$}}
@@ -35,7 +35,7 @@ bb11:
; CHECK: @r21 = global i32* @v1{{$}}
; CHECK: @r22 = global i32 (i8*)* @f1{{$}}
-; CHECK: @v11 = internal global i32 41, comdat $c2
+; CHECK: @v11 = internal global i32 41, comdat($c2)
; CHECK: @a11 = alias i32* @v1{{$}}
; CHECK: @a12 = alias bitcast (i32* @v1 to i16*)
@@ -49,14 +49,14 @@ bb11:
; CHECK: @a23 = alias i32 (i8*)* @f12{{$}}
; CHECK: @a24 = alias bitcast (i32 (i8*)* @f12 to i16*)
-; CHECK: define weak_odr protected i32 @f1(i8*) comdat $c1 {
+; CHECK: define weak_odr protected i32 @f1(i8*) comdat($c1) {
; CHECK-NEXT: bb10:
; CHECK-NEXT: br label %bb11{{$}}
; CHECK: bb11:
; CHECK-NEXT: ret i32 42
; CHECK-NEXT: }
-; CHECK: define internal i32 @f12(i8* %this) comdat $c2 {
+; CHECK: define internal i32 @f12(i8* %this) comdat($c2) {
; CHECK-NEXT: bb20:
; CHECK-NEXT: store i8* %this, i8** null
; CHECK-NEXT: br label %bb21
diff --git a/test/tools/gold/common.ll b/test/tools/gold/common.ll
index f309231..ef18e68 100644
--- a/test/tools/gold/common.ll
+++ b/test/tools/gold/common.ll
@@ -1,7 +1,7 @@
; RUN: llvm-as %s -o %t1.o
; RUN: llvm-as %p/Inputs/common.ll -o %t2.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: -shared %t1.o %t2.o -o %t3.o
; RUN: llvm-dis %t3.o -o - | FileCheck %s
@@ -11,7 +11,7 @@
; Shared library case, we merge @a as common and keep it for the symbol table.
; CHECK: @a = common global i16 0, align 8
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: %t1.o %t2.o -o %t3.o
; RUN: llvm-dis %t3.o -o - | FileCheck --check-prefix=EXEC %s
@@ -20,7 +20,7 @@
; EXEC: @a = internal global i16 0, align 8
; RUN: llc %p/Inputs/common.ll -o %t2.o -filetype=obj
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: %t1.o %t2.o -o %t3.o
; RUN: llvm-dis %t3.o -o - | FileCheck --check-prefix=MIXED %s
diff --git a/test/tools/gold/drop-debug.ll b/test/tools/gold/drop-debug.ll
new file mode 100644
index 0000000..b8c4d8c
--- /dev/null
+++ b/test/tools/gold/drop-debug.ll
@@ -0,0 +1,8 @@
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: --plugin-opt=emit-llvm -shared %p/Inputs/drop-debug.bc \
+; RUN: -o t2.bc 2>&1 | FileCheck %s
+
+; drop-debug.bc was created from "void f(void) {}" with clang 3.5 and
+; -gline-tables-only, so it contains old debug info.
+
+; CHECK: warning: LLVM gold plugin: ignoring debug info with an invalid version (1) in {{.*}}/Inputs/drop-debug.bc
diff --git a/test/tools/gold/emit-llvm.ll b/test/tools/gold/emit-llvm.ll
index 0a6dcfc..f851fbf 100644
--- a/test/tools/gold/emit-llvm.ll
+++ b/test/tools/gold/emit-llvm.ll
@@ -1,20 +1,31 @@
; RUN: llvm-as %s -o %t.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: --plugin-opt=generate-api-file \
; RUN: -shared %t.o -o %t2.o
; RUN: llvm-dis %t2.o -o - | FileCheck %s
; RUN: FileCheck --check-prefix=API %s < %T/../apifile.txt
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: -m elf_x86_64 --plugin-opt=save-temps \
; RUN: -shared %t.o -o %t3.o
; RUN: llvm-dis %t3.o.bc -o - | FileCheck %s
; RUN: llvm-dis %t3.o.opt.bc -o - | FileCheck --check-prefix=OPT %s
+; RUN: rm -f %t4.o
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: -m elf_x86_64 --plugin-opt=disable-output \
+; RUN: -shared %t.o -o %t4.o
+; RUN: not test -a %t4.o
+
target triple = "x86_64-unknown-linux-gnu"
+@g7 = extern_weak global i32
+; CHECK-DAG: @g7 = extern_weak global i32
+
+@g8 = external global i32
+
; CHECK: define internal void @f1()
; OPT-NOT: @f1
define hidden void @f1() {
@@ -56,6 +67,13 @@ define linkonce_odr void @f6() unnamed_addr {
}
@g6 = global void()* @f6
+define i32* @f7() {
+ ret i32* @g7
+}
+
+define i32* @f8() {
+ ret i32* @g8
+}
; API: f1 PREVAILING_DEF_IRONLY
; API: f2 PREVAILING_DEF_IRONLY
@@ -63,5 +81,9 @@ define linkonce_odr void @f6() unnamed_addr {
; API: f4 PREVAILING_DEF_IRONLY_EXP
; API: f5 PREVAILING_DEF_IRONLY_EXP
; API: f6 PREVAILING_DEF_IRONLY_EXP
+; API: f7 PREVAILING_DEF_IRONLY_EXP
+; API: f8 PREVAILING_DEF_IRONLY_EXP
+; API: g7 UNDEF
+; API: g8 UNDEF
; API: g5 PREVAILING_DEF_IRONLY_EXP
; API: g6 PREVAILING_DEF_IRONLY_EXP
diff --git a/test/tools/gold/invalid.ll b/test/tools/gold/invalid.ll
index 8db7644..858cd47 100644
--- a/test/tools/gold/invalid.ll
+++ b/test/tools/gold/invalid.ll
@@ -1,4 +1,4 @@
-; RUN: not ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: not %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: %p/Inputs/invalid.bc -o %t2 2>&1 | FileCheck %s
; test that only one error gets printed
diff --git a/test/tools/gold/linker-script.ll b/test/tools/gold/linker-script.ll
index 35a7694..7c88b0f 100644
--- a/test/tools/gold/linker-script.ll
+++ b/test/tools/gold/linker-script.ll
@@ -1,6 +1,6 @@
; RUN: llvm-as %s -o %t.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: -shared %t.o -o %t2.o \
; RUN: -version-script=%p/Inputs/linker-script.export
diff --git a/test/tools/gold/linkonce-weak.ll b/test/tools/gold/linkonce-weak.ll
index 765275b..a0cccea 100644
--- a/test/tools/gold/linkonce-weak.ll
+++ b/test/tools/gold/linkonce-weak.ll
@@ -1,12 +1,12 @@
; RUN: llvm-as %s -o %t.o
; RUN: llvm-as %p/Inputs/linkonce-weak.ll -o %t2.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: -shared %t.o %t2.o -o %t3.o
; RUN: llvm-dis %t3.o -o - | FileCheck %s
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: -shared %t2.o %t.o -o %t3.o
; RUN: llvm-dis %t3.o -o - | FileCheck %s
diff --git a/test/tools/gold/mtriple.ll b/test/tools/gold/mtriple.ll
index 6395af6..94211ed 100644
--- a/test/tools/gold/mtriple.ll
+++ b/test/tools/gold/mtriple.ll
@@ -1,5 +1,5 @@
; RUN: llvm-as %s -o %t.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so -m elf32ppc \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so -m elf32ppc \
; RUN: -plugin-opt=mtriple=powerpc-linux-gnu \
; RUN: -plugin-opt=obj-path=%t3.o \
; RUN: -shared %t.o -o %t2
diff --git a/test/tools/gold/no-map-whole-file.ll b/test/tools/gold/no-map-whole-file.ll
new file mode 100644
index 0000000..4c261d7
--- /dev/null
+++ b/test/tools/gold/no-map-whole-file.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-as -o %t.bc %s
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so -plugin-opt=emit-llvm \
+; RUN: --no-map-whole-files -r -o %t2.bc %t.bc
+; RUN: llvm-dis < %t2.bc -o - | FileCheck %s
+
+; CHECK: main
+define i32 @main() {
+ ret i32 0
+}
diff --git a/test/tools/gold/option.ll b/test/tools/gold/option.ll
index 8154e43..59e3f1e 100644
--- a/test/tools/gold/option.ll
+++ b/test/tools/gold/option.ll
@@ -1,5 +1,5 @@
; RUN: llvm-as %s -o %t.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so -m elf_x86_64 \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so -m elf_x86_64 \
; RUN: --plugin-opt=-jump-table-type=arity \
; RUN: --plugin-opt=-mattr=+aes \
; RUN: --plugin-opt=mcpu=core-avx2 \
diff --git a/test/tools/gold/pr19901.ll b/test/tools/gold/pr19901.ll
index 304246b..2a7dea1 100644
--- a/test/tools/gold/pr19901.ll
+++ b/test/tools/gold/pr19901.ll
@@ -1,6 +1,6 @@
; RUN: llc %s -o %t.o -filetype=obj -relocation-model=pic
; RUN: llvm-as %p/Inputs/pr19901-1.ll -o %t2.o
-; RUN: ld -shared -o %t.so -plugin %llvmshlibdir/LLVMgold.so %t2.o %t.o
+; RUN: %gold -shared -o %t.so -plugin %llvmshlibdir/LLVMgold.so %t2.o %t.o
; RUN: llvm-readobj -t %t.so | FileCheck %s
; CHECK: Symbol {
@@ -9,7 +9,7 @@
; CHECK-NEXT: Size:
; CHECK-NEXT: Binding: Local
; CHECK-NEXT: Type: Function
-; CHECK-NEXT: Other: 2
+; CHECK-NEXT: Other: {{2|0}}
; CHECK-NEXT: Section: .text
; CHECK-NEXT: }
diff --git a/test/tools/gold/slp-vectorize.ll b/test/tools/gold/slp-vectorize.ll
index d378902..d39aa76 100644
--- a/test/tools/gold/slp-vectorize.ll
+++ b/test/tools/gold/slp-vectorize.ll
@@ -1,6 +1,6 @@
; RUN: llvm-as %s -o %t.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=save-temps \
; RUN: -shared %t.o -o %t2.o
; RUN: llvm-dis %t2.o.opt.bc -o - | FileCheck %s
diff --git a/test/tools/gold/stats.ll b/test/tools/gold/stats.ll
new file mode 100644
index 0000000..b3c8297
--- /dev/null
+++ b/test/tools/gold/stats.ll
@@ -0,0 +1,7 @@
+; REQUIRES: asserts
+
+; RUN: llvm-as %s -o %t.o
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so -shared \
+; RUN: -plugin-opt=-stats %t.o -o %t2 2>&1 | FileCheck %s
+
+; CHECK: Statistics Collected
diff --git a/test/tools/gold/vectorize.ll b/test/tools/gold/vectorize.ll
index 3d305db..c1626d7 100644
--- a/test/tools/gold/vectorize.ll
+++ b/test/tools/gold/vectorize.ll
@@ -1,6 +1,6 @@
; RUN: llvm-as %s -o %t.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=save-temps \
; RUN: -shared %t.o -o %t2.o
; RUN: llvm-dis %t2.o.opt.bc -o - | FileCheck %s
diff --git a/test/tools/gold/weak.ll b/test/tools/gold/weak.ll
index e05e905..6d8d7a8 100644
--- a/test/tools/gold/weak.ll
+++ b/test/tools/gold/weak.ll
@@ -1,7 +1,7 @@
; RUN: llvm-as %s -o %t.o
; RUN: llvm-as %p/Inputs/weak.ll -o %t2.o
-; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=emit-llvm \
; RUN: -shared %t.o %t2.o -o %t3.o
; RUN: llvm-dis %t3.o -o - | FileCheck %s
diff --git a/test/tools/llvm-cov/Inputs/highlightedRanges.covmapping b/test/tools/llvm-cov/Inputs/highlightedRanges.covmapping
index 20eb0d7..e97320b 100644
--- a/test/tools/llvm-cov/Inputs/highlightedRanges.covmapping
+++ b/test/tools/llvm-cov/Inputs/highlightedRanges.covmapping
Binary files differ
diff --git a/test/tools/llvm-cov/Inputs/regionMarkers.covmapping b/test/tools/llvm-cov/Inputs/regionMarkers.covmapping
index 3ebcb07..501cba2 100644
--- a/test/tools/llvm-cov/Inputs/regionMarkers.covmapping
+++ b/test/tools/llvm-cov/Inputs/regionMarkers.covmapping
Binary files differ
diff --git a/test/tools/llvm-cov/Inputs/report.covmapping b/test/tools/llvm-cov/Inputs/report.covmapping
index 32d84bc..5d0bfc1 100644
--- a/test/tools/llvm-cov/Inputs/report.covmapping
+++ b/test/tools/llvm-cov/Inputs/report.covmapping
Binary files differ
diff --git a/test/tools/llvm-cov/Inputs/showExpansions.covmapping b/test/tools/llvm-cov/Inputs/showExpansions.covmapping
index b8c7d97..e02a728 100644
--- a/test/tools/llvm-cov/Inputs/showExpansions.covmapping
+++ b/test/tools/llvm-cov/Inputs/showExpansions.covmapping
Binary files differ
diff --git a/test/tools/llvm-cov/report.cpp b/test/tools/llvm-cov/report.cpp
index 297322a..570012e 100644
--- a/test/tools/llvm-cov/report.cpp
+++ b/test/tools/llvm-cov/report.cpp
@@ -1,7 +1,21 @@
-// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -no-colors 2>&1 | FileCheck %s
+// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -no-colors -filename-equivalence 2>&1 | FileCheck %s
+// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -no-colors -filename-equivalence report.cpp 2>&1 | FileCheck -check-prefix=FILT-NEXT %s
-// CHECK: Filename Regions Miss Cover Functions Executed
-// CHECK: TOTAL 5 2 60.00% 4 75.00%
+// CHECK: Filename Regions Miss Cover Functions Executed
+// CHECK-NEXT: ---
+// CHECK-NEXT: report.cpp 5 2 60.00% 4 75.00%
+// CHECK-NEXT: ---
+// CHECK-NEXT: TOTAL 5 2 60.00% 4 75.00%
+
+// FILT: File 'report.cpp':
+// FILT-NEXT: Name Regions Miss Cover Lines Miss Cover
+// FILT-NEXT: ---
+// FILT-NEXT: _Z3foob 2 1 50.00% 4 2 50.00%
+// FILT-NEXT: _Z3barv 1 0 100.00% 2 0 100.00%
+// FILT-NEXT: _Z4funcv 1 1 0.00% 2 2 0.00%
+// FILT-NEXT: main 1 0 100.00% 5 0 100.00%
+// FILT-NEXT: ---
+// FILT-NEXT: TOTAL 5 2 60.00% 13 4 69.23%
void foo(bool cond) {
if (cond) {
diff --git a/test/tools/llvm-cov/showHighlightedRanges.cpp b/test/tools/llvm-cov/showHighlightedRanges.cpp
index cec7308..1ff7929 100644
--- a/test/tools/llvm-cov/showHighlightedRanges.cpp
+++ b/test/tools/llvm-cov/showHighlightedRanges.cpp
@@ -2,17 +2,17 @@
void func() {
return;
- int i = 0; // CHECK: Highlighted line [[@LINE]], 3 -> 12
-}
+ int i = 0; // CHECK: Highlighted line [[@LINE]], 3 -> ?
+} // CHECK: Highlighted line [[@LINE]], 1 -> 2
void func2(int x) {
if(x > 5) {
while(x >= 9) {
return;
- --x; // CHECK: Highlighted line [[@LINE]], 7 -> 10
- }
- int i = 0; // CHECK: Highlighted line [[@LINE]], 5 -> 14
- }
+ --x; // CHECK: Highlighted line [[@LINE]], 7 -> ?
+ } // CHECK: Highlighted line [[@LINE]], 1 -> 6
+ int i = 0; // CHECK: Highlighted line [[@LINE]], 5 -> ?
+ } // CHECK: Highlighted line [[@LINE]], 1 -> 4
}
void test() {
diff --git a/test/tools/llvm-cov/showLineExecutionCounts.cpp b/test/tools/llvm-cov/showLineExecutionCounts.cpp
index 34baa57..625c3f2 100644
--- a/test/tools/llvm-cov/showLineExecutionCounts.cpp
+++ b/test/tools/llvm-cov/showLineExecutionCounts.cpp
@@ -12,11 +12,11 @@ int main() { // CHECK: 1| [[@LINE]]|int main(
x = 1; // CHECK: 1| [[@LINE]]| x = 1
} // CHECK: 1| [[@LINE]]| }
// CHECK: 1| [[@LINE]]|
- for (int i = 0; i < 100; ++i) { // CHECK: 100| [[@LINE]]| for (
+ for (int i = 0; i < 100; ++i) { // CHECK: 101| [[@LINE]]| for (
x = 1; // CHECK: 100| [[@LINE]]| x = 1
} // CHECK: 100| [[@LINE]]| }
// CHECK: 1| [[@LINE]]|
- x = x < 10 ? x + 1 : x - 1; // CHECK: 0| [[@LINE]]| x =
+ x = x < 10 ? x + 1 : x - 1; // CHECK: 1| [[@LINE]]| x =
x = x > 10 ? // CHECK: 1| [[@LINE]]| x =
x - 1: // CHECK: 0| [[@LINE]]| x
x + 1; // CHECK: 1| [[@LINE]]| x
diff --git a/test/tools/llvm-objdump/AArch64/Inputs/link-opt-hints.macho-aarch64 b/test/tools/llvm-objdump/AArch64/Inputs/link-opt-hints.macho-aarch64
new file mode 100644
index 0000000..12d33fc
--- /dev/null
+++ b/test/tools/llvm-objdump/AArch64/Inputs/link-opt-hints.macho-aarch64
Binary files differ
diff --git a/test/tools/llvm-objdump/AArch64/macho-link-opt-hints.test b/test/tools/llvm-objdump/AArch64/macho-link-opt-hints.test
new file mode 100644
index 0000000..932bc4f
--- /dev/null
+++ b/test/tools/llvm-objdump/AArch64/macho-link-opt-hints.test
@@ -0,0 +1,11 @@
+RUN: llvm-objdump -m -link-opt-hints %p/Inputs/link-opt-hints.macho-aarch64 | FileCheck %s
+
+CHECK: Linker optimiztion hints (8 total bytes)
+CHECK: identifier 8 AdrpLdrGot
+CHECK: narguments 2
+CHECK: value 0x18
+CHECK: value 0x1c
+CHECK: identifier 7 AdrpAdd
+CHECK: narguments 2
+CHECK: value 0x6c
+CHECK: value 0x70
diff --git a/test/tools/llvm-objdump/AArch64/macho-private-headers.test b/test/tools/llvm-objdump/AArch64/macho-private-headers.test
new file mode 100644
index 0000000..cdf98b1
--- /dev/null
+++ b/test/tools/llvm-objdump/AArch64/macho-private-headers.test
@@ -0,0 +1,312 @@
+// RUN: llvm-objdump -p %p/Inputs/hello.obj.macho-aarch64 | FileCheck %s
+// RUN: llvm-objdump -p %p/Inputs/hello.exe.macho-aarch64 \
+// RUN: | FileCheck %s -check-prefix=EXE
+
+CHECK: Mach header
+CHECK: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
+CHECK: MH_MAGIC_64 ARM64 ALL 0x00 OBJECT 4 352 SUBSECTIONS_VIA_SYMBOLS
+CHECK: Load command 0
+CHECK: cmd LC_SEGMENT_64
+CHECK: cmdsize 232
+CHECK: segname
+CHECK: vmaddr 0x0000000000000000
+CHECK: vmsize 0x000000000000004d
+CHECK: fileoff 384
+CHECK: filesize 77
+CHECK: maxprot rwx
+CHECK: initprot rwx
+CHECK: nsects 2
+CHECK: flags (none)
+CHECK: Section
+CHECK: sectname __text
+CHECK: segname __TEXT
+CHECK: addr 0x0000000000000000
+CHECK: size 0x0000000000000040
+CHECK: offset 384
+CHECK: align 2^2 (4)
+CHECK: reloff 464
+CHECK: nreloc 3
+CHECK: type S_REGULAR
+CHECK: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Section
+CHECK: sectname __cstring
+CHECK: segname __TEXT
+CHECK: addr 0x0000000000000040
+CHECK: size 0x000000000000000d
+CHECK: offset 448
+CHECK: align 2^0 (1)
+CHECK: reloff 0
+CHECK: nreloc 0
+CHECK: type S_CSTRING_LITERALS
+CHECK: attributes (none)
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Load command 1
+CHECK: cmd LC_VERSION_MIN_IPHONEOS
+CHECK: cmdsize 16
+CHECK: version 9.0
+CHECK: sdk n/a
+CHECK: Load command 2
+CHECK: cmd LC_SYMTAB
+CHECK: cmdsize 24
+CHECK: symoff 488
+CHECK: nsyms 5
+CHECK: stroff 568
+CHECK: strsize 36
+CHECK: Load command 3
+CHECK: cmd LC_DYSYMTAB
+CHECK: cmdsize 80
+CHECK: ilocalsym 0
+CHECK: nlocalsym 3
+CHECK: iextdefsym 3
+CHECK: nextdefsym 1
+CHECK: iundefsym 4
+CHECK: nundefsym 1
+CHECK: tocoff 0
+CHECK: ntoc 0
+CHECK: modtaboff 0
+CHECK: nmodtab 0
+CHECK: extrefsymoff 0
+CHECK: nextrefsyms 0
+CHECK: indirectsymoff 0
+CHECK: nindirectsyms 0
+CHECK: extreloff 0
+CHECK: nextrel 0
+CHECK: locreloff 0
+CHECK: nlocrel 0
+
+EXE: Mach header
+EXE: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
+EXE: MH_MAGIC_64 ARM64 ALL 0x00 EXECUTE 17 1240 NOUNDEFS DYLDLINK TWOLEVEL PIE
+EXE: Load command 0
+EXE: cmd LC_SEGMENT_64
+EXE: cmdsize 72
+EXE: segname __PAGEZERO
+EXE: vmaddr 0x0000000000000000
+EXE: vmsize 0x0000000100000000
+EXE: fileoff 0
+EXE: filesize 0
+EXE: maxprot ---
+EXE: initprot ---
+EXE: nsects 0
+EXE: flags (none)
+EXE: Load command 1
+EXE: cmd LC_SEGMENT_64
+EXE: cmdsize 472
+EXE: segname __TEXT
+EXE: vmaddr 0x0000000100000000
+EXE: vmsize 0x0000000000008000
+EXE: fileoff 0
+EXE: filesize 32768
+EXE: maxprot r-x
+EXE: initprot r-x
+EXE: nsects 5
+EXE: flags (none)
+EXE: Section
+EXE: sectname __text
+EXE: segname __TEXT
+EXE: addr 0x0000000100007f38
+EXE: size 0x0000000000000040
+EXE: offset 32568
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_REGULAR
+EXE: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __stubs
+EXE: segname __TEXT
+EXE: addr 0x0000000100007f78
+EXE: size 0x000000000000000c
+EXE: offset 32632
+EXE: align 2^1 (2)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_SYMBOL_STUBS
+EXE: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+EXE: reserved1 0 (index into indirect symbol table)
+EXE: reserved2 12 (size of stubs)
+EXE: Section
+EXE: sectname __stub_helper
+EXE: segname __TEXT
+EXE: addr 0x0000000100007f84
+EXE: size 0x0000000000000024
+EXE: offset 32644
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_REGULAR
+EXE: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __cstring
+EXE: segname __TEXT
+EXE: addr 0x0000000100007fa8
+EXE: size 0x000000000000000d
+EXE: offset 32680
+EXE: align 2^0 (1)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_CSTRING_LITERALS
+EXE: attributes (none)
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __unwind_info
+EXE: segname __TEXT
+EXE: addr 0x0000000100007fb8
+EXE: size 0x0000000000000048
+EXE: offset 32696
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_REGULAR
+EXE: attributes (none)
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Load command 2
+EXE: cmd LC_SEGMENT_64
+EXE: cmdsize 232
+EXE: segname __DATA
+EXE: vmaddr 0x0000000100008000
+EXE: vmsize 0x0000000000004000
+EXE: fileoff 32768
+EXE: filesize 16384
+EXE: maxprot rw-
+EXE: initprot rw-
+EXE: nsects 2
+EXE: flags (none)
+EXE: Section
+EXE: sectname __got
+EXE: segname __DATA
+EXE: addr 0x0000000100008000
+EXE: size 0x0000000000000010
+EXE: offset 32768
+EXE: align 2^3 (8)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_NON_LAZY_SYMBOL_POINTERS
+EXE: attributes (none)
+EXE: reserved1 1 (index into indirect symbol table)
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __la_symbol_ptr
+EXE: segname __DATA
+EXE: addr 0x0000000100008010
+EXE: size 0x0000000000000008
+EXE: offset 32784
+EXE: align 2^3 (8)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_LAZY_SYMBOL_POINTERS
+EXE: attributes (none)
+EXE: reserved1 3 (index into indirect symbol table)
+EXE: reserved2 0
+EXE: Load command 3
+EXE: cmd LC_SEGMENT_64
+EXE: cmdsize 72
+EXE: segname __LINKEDIT
+EXE: vmaddr 0x000000010000c000
+EXE: vmsize 0x0000000000004000
+EXE: fileoff 49152
+EXE: filesize 264
+EXE: maxprot r--
+EXE: initprot r--
+EXE: nsects 0
+EXE: flags (none)
+EXE: Load command 4
+EXE: cmd LC_DYLD_INFO_ONLY
+EXE: cmdsize 48
+EXE: rebase_off 49152
+EXE: rebase_size 8
+EXE: bind_off 49160
+EXE: bind_size 24
+EXE: weak_bind_off 0
+EXE: weak_bind_size 0
+EXE: lazy_bind_off 49184
+EXE: lazy_bind_size 16
+EXE: export_off 49200
+EXE: export_size 48
+EXE: Load command 5
+EXE: cmd LC_SYMTAB
+EXE: cmdsize 24
+EXE: symoff 49280
+EXE: nsyms 4
+EXE: stroff 49360
+EXE: strsize 56
+EXE: Load command 6
+EXE: cmd LC_DYSYMTAB
+EXE: cmdsize 80
+EXE: ilocalsym 0
+EXE: nlocalsym 0
+EXE: iextdefsym 0
+EXE: nextdefsym 2
+EXE: iundefsym 2
+EXE: nundefsym 2
+EXE: tocoff 0
+EXE: ntoc 0
+EXE: modtaboff 0
+EXE: nmodtab 0
+EXE: extrefsymoff 0
+EXE: nextrefsyms 0
+EXE: indirectsymoff 49344
+EXE: nindirectsyms 4
+EXE: extreloff 0
+EXE: nextrel 0
+EXE: locreloff 0
+EXE: nlocrel 0
+EXE: Load command 7
+EXE: cmd LC_LOAD_DYLINKER
+EXE: cmdsize 32
+EXE: name /usr/lib/dyld (offset 12)
+EXE: Load command 8
+EXE: cmd LC_UUID
+EXE: cmdsize 24
+EXE: uuid D687F888-CD3F-3276-8C94-BA3CCA21D820
+EXE: Load command 9
+EXE: cmd LC_VERSION_MIN_IPHONEOS
+EXE: cmdsize 16
+EXE: version 9.0
+EXE: sdk 9.0
+EXE: Load command 10
+EXE: cmd LC_SOURCE_VERSION
+EXE: cmdsize 16
+EXE: version 0.0
+EXE: Load command 11
+EXE: cmd LC_MAIN
+EXE: cmdsize 24
+EXE: entryoff 32568
+EXE: stacksize 0
+EXE: Load command 12
+EXE: cmd LC_ENCRYPTION_INFO_64
+EXE: cmdsize 24
+EXE: cryptoff 16384
+EXE: cryptsize 16384
+EXE: cryptid 0
+EXE: pad 0
+EXE: Load command 13
+EXE: cmd LC_LOAD_DYLIB
+EXE: cmdsize 56
+EXE: name /usr/lib/libSystem.B.dylib (offset 24)
+EXE: current version 1215.0.0
+EXE: compatibility version 1.0.0
+EXE: Load command 14
+EXE: cmd LC_FUNCTION_STARTS
+EXE: cmdsize 16
+EXE: dataoff 49248
+EXE: datasize 8
+EXE: Load command 15
+EXE: cmd LC_DATA_IN_CODE
+EXE: cmdsize 16
+EXE: dataoff 49256
+EXE: datasize 0
+EXE: Load command 16
+EXE: cmd LC_DYLIB_CODE_SIGN_DRS
+EXE: cmdsize 16
+EXE: dataoff 49256
+EXE: datasize 24
diff --git a/test/tools/llvm-objdump/ARM/Inputs/data-in-code.macho-arm b/test/tools/llvm-objdump/ARM/Inputs/data-in-code.macho-arm
new file mode 100644
index 0000000..e826f29
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/Inputs/data-in-code.macho-arm
Binary files differ
diff --git a/test/tools/llvm-objdump/ARM/macho-data-in-code.test b/test/tools/llvm-objdump/ARM/macho-data-in-code.test
new file mode 100644
index 0000000..1814dc0
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/macho-data-in-code.test
@@ -0,0 +1,8 @@
+RUN: llvm-objdump -m -data-in-code %p/Inputs/data-in-code.macho-arm | FileCheck %s
+
+CHECK: Data in code table (4 entries)
+CHECK: offset length kind
+CHECK: 0x00000000 4 DATA
+CHECK: 0x00000004 4 JUMP_TABLE32
+CHECK: 0x00000008 2 JUMP_TABLE16
+CHECK: 0x0000000a 1 JUMP_TABLE8
diff --git a/test/tools/llvm-objdump/ARM/macho-private-headers.test b/test/tools/llvm-objdump/ARM/macho-private-headers.test
new file mode 100644
index 0000000..4ab3043
--- /dev/null
+++ b/test/tools/llvm-objdump/ARM/macho-private-headers.test
@@ -0,0 +1,345 @@
+// RUN: llvm-objdump -p %p/Inputs/hello.obj.macho-arm | FileCheck %s
+// RUN: llvm-objdump -p %p/Inputs/hello.exe.macho-arm \
+// RUN: | FileCheck %s -check-prefix=EXE
+
+CHECK: Mach header
+CHECK: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
+CHECK: MH_MAGIC ARM V7 0x00 OBJECT 3 568 SUBSECTIONS_VIA_SYMBOLS
+CHECK: Load command 0
+CHECK: cmd LC_SEGMENT
+CHECK: cmdsize 464
+CHECK: segname
+CHECK: vmaddr 0x00000000
+CHECK: vmsize 0x00000043
+CHECK: fileoff 596
+CHECK: filesize 67
+CHECK: maxprot rwx
+CHECK: initprot rwx
+CHECK: nsects 6
+CHECK: flags (none)
+CHECK: Section
+CHECK: sectname __text
+CHECK: segname __TEXT
+CHECK: addr 0x00000000
+CHECK: size 0x00000036
+CHECK: offset 596
+CHECK: align 2^2 (4)
+CHECK: reloff 664
+CHECK: nreloc 5
+CHECK: type S_REGULAR
+CHECK: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Section
+CHECK: sectname __textcoal_nt
+CHECK: segname __TEXT
+CHECK: addr 0x00000036
+CHECK: size 0x00000000
+CHECK: offset 650
+CHECK: align 2^0 (1)
+CHECK: reloff 0
+CHECK: nreloc 0
+CHECK: type S_COALESCED
+CHECK: attributes PURE_INSTRUCTIONS
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Section
+CHECK: sectname __const_coal
+CHECK: segname __TEXT
+CHECK: addr 0x00000036
+CHECK: size 0x00000000
+CHECK: offset 650
+CHECK: align 2^0 (1)
+CHECK: reloff 0
+CHECK: nreloc 0
+CHECK: type S_COALESCED
+CHECK: attributes (none)
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Section
+CHECK: sectname __picsymbolstub4
+CHECK: segname __TEXT
+CHECK: addr 0x00000036
+CHECK: size 0x00000000
+CHECK: offset 650
+CHECK: align 2^0 (1)
+CHECK: reloff 0
+CHECK: nreloc 0
+CHECK: type S_SYMBOL_STUBS
+CHECK: attributes (none)
+CHECK: reserved1 0 (index into indirect symbol table)
+CHECK: reserved2 16 (size of stubs)
+CHECK: Section
+CHECK: sectname __StaticInit
+CHECK: segname __TEXT
+CHECK: addr 0x00000036
+CHECK: size 0x00000000
+CHECK: offset 650
+CHECK: align 2^0 (1)
+CHECK: reloff 0
+CHECK: nreloc 0
+CHECK: type S_REGULAR
+CHECK: attributes PURE_INSTRUCTIONS
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Section
+CHECK: sectname __cstring
+CHECK: segname __TEXT
+CHECK: addr 0x00000036
+CHECK: size 0x0000000d
+CHECK: offset 650
+CHECK: align 2^0 (1)
+CHECK: reloff 0
+CHECK: nreloc 0
+CHECK: type S_CSTRING_LITERALS
+CHECK: attributes (none)
+CHECK: reserved1 0
+CHECK: reserved2 0
+CHECK: Load command 1
+CHECK: cmd LC_SYMTAB
+CHECK: cmdsize 24
+CHECK: symoff 704
+CHECK: nsyms 2
+CHECK: stroff 728
+CHECK: strsize 16
+CHECK: Load command 2
+CHECK: cmd LC_DYSYMTAB
+CHECK: cmdsize 80
+CHECK: ilocalsym 0
+CHECK: nlocalsym 0
+CHECK: iextdefsym 0
+CHECK: nextdefsym 1
+CHECK: iundefsym 1
+CHECK: nundefsym 1
+CHECK: tocoff 0
+CHECK: ntoc 0
+CHECK: modtaboff 0
+CHECK: nmodtab 0
+CHECK: extrefsymoff 0
+CHECK: nextrefsyms 0
+CHECK: indirectsymoff 0
+CHECK: nindirectsyms 0
+CHECK: extreloff 0
+CHECK: nextrel 0
+CHECK: locreloff 0
+CHECK: nlocrel 0
+
+EXE: Mach header
+EXE: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
+EXE: MH_MAGIC ARM V7 0x00 EXECUTE 17 1012 NOUNDEFS DYLDLINK TWOLEVEL PIE
+EXE: Load command 0
+EXE: cmd LC_SEGMENT
+EXE: cmdsize 56
+EXE: segname __PAGEZERO
+EXE: vmaddr 0x00000000
+EXE: vmsize 0x00004000
+EXE: fileoff 0
+EXE: filesize 0
+EXE: maxprot ---
+EXE: initprot ---
+EXE: nsects 0
+EXE: flags (none)
+EXE: Load command 1
+EXE: cmd LC_SEGMENT
+EXE: cmdsize 328
+EXE: segname __TEXT
+EXE: vmaddr 0x00004000
+EXE: vmsize 0x00008000
+EXE: fileoff 0
+EXE: filesize 32768
+EXE: maxprot r-x
+EXE: initprot r-x
+EXE: nsects 4
+EXE: flags (none)
+EXE: Section
+EXE: sectname __text
+EXE: segname __TEXT
+EXE: addr 0x0000bf84
+EXE: size 0x00000036
+EXE: offset 32644
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_REGULAR
+EXE: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __stub_helper
+EXE: segname __TEXT
+EXE: addr 0x0000bfbc
+EXE: size 0x00000030
+EXE: offset 32700
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_REGULAR
+EXE: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __cstring
+EXE: segname __TEXT
+EXE: addr 0x0000bfec
+EXE: size 0x0000000d
+EXE: offset 32748
+EXE: align 2^0 (1)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_CSTRING_LITERALS
+EXE: attributes (none)
+EXE: reserved1 0
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __symbolstub1
+EXE: segname __TEXT
+EXE: addr 0x0000bffc
+EXE: size 0x00000004
+EXE: offset 32764
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_SYMBOL_STUBS
+EXE: attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
+EXE: reserved1 0 (index into indirect symbol table)
+EXE: reserved2 4 (size of stubs)
+EXE: Load command 2
+EXE: cmd LC_SEGMENT
+EXE: cmdsize 192
+EXE: segname __DATA
+EXE: vmaddr 0x0000c000
+EXE: vmsize 0x00004000
+EXE: fileoff 32768
+EXE: filesize 16384
+EXE: maxprot rw-
+EXE: initprot rw-
+EXE: nsects 2
+EXE: flags (none)
+EXE: Section
+EXE: sectname __lazy_symbol
+EXE: segname __DATA
+EXE: addr 0x0000c000
+EXE: size 0x00000004
+EXE: offset 32768
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_LAZY_SYMBOL_POINTERS
+EXE: attributes (none)
+EXE: reserved1 1 (index into indirect symbol table)
+EXE: reserved2 0
+EXE: Section
+EXE: sectname __nl_symbol_ptr
+EXE: segname __DATA
+EXE: addr 0x0000c004
+EXE: size 0x00000008
+EXE: offset 32772
+EXE: align 2^2 (4)
+EXE: reloff 0
+EXE: nreloc 0
+EXE: type S_NON_LAZY_SYMBOL_POINTERS
+EXE: attributes (none)
+EXE: reserved1 2 (index into indirect symbol table)
+EXE: reserved2 0
+EXE: Load command 3
+EXE: cmd LC_SEGMENT
+EXE: cmdsize 56
+EXE: segname __LINKEDIT
+EXE: vmaddr 0x00010000
+EXE: vmsize 0x00004000
+EXE: fileoff 49152
+EXE: filesize 256
+EXE: maxprot r--
+EXE: initprot r--
+EXE: nsects 0
+EXE: flags (none)
+EXE: Load command 4
+EXE: cmd LC_DYLD_INFO_ONLY
+EXE: cmdsize 48
+EXE: rebase_off 49152
+EXE: rebase_size 4
+EXE: bind_off 49156
+EXE: bind_size 24
+EXE: weak_bind_off 0
+EXE: weak_bind_size 0
+EXE: lazy_bind_off 49180
+EXE: lazy_bind_size 16
+EXE: export_off 49196
+EXE: export_size 44
+EXE: Load command 5
+EXE: cmd LC_SYMTAB
+EXE: cmdsize 24
+EXE: symoff 49264
+EXE: nsyms 5
+EXE: stroff 49340
+EXE: strsize 68
+EXE: Load command 6
+EXE: cmd LC_DYSYMTAB
+EXE: cmdsize 80
+EXE: ilocalsym 0
+EXE: nlocalsym 1
+EXE: iextdefsym 1
+EXE: nextdefsym 2
+EXE: iundefsym 3
+EXE: nundefsym 2
+EXE: tocoff 0
+EXE: ntoc 0
+EXE: modtaboff 0
+EXE: nmodtab 0
+EXE: extrefsymoff 0
+EXE: nextrefsyms 0
+EXE: indirectsymoff 49324
+EXE: nindirectsyms 4
+EXE: extreloff 0
+EXE: nextrel 0
+EXE: locreloff 0
+EXE: nlocrel 0
+EXE: Load command 7
+EXE: cmd LC_LOAD_DYLINKER
+EXE: cmdsize 28
+EXE: name /usr/lib/dyld (offset 12)
+EXE: Load command 8
+EXE: cmd LC_UUID
+EXE: cmdsize 24
+EXE: uuid C2D9351C-1EF1-330B-A2AB-EED6CF7D2C5D
+EXE: Load command 9
+EXE: cmd LC_VERSION_MIN_IPHONEOS
+EXE: cmdsize 16
+EXE: version 8.0
+EXE: sdk 8.0
+EXE: Load command 10
+EXE: cmd LC_SOURCE_VERSION
+EXE: cmdsize 16
+EXE: version 0.0
+EXE: Load command 11
+EXE: cmd LC_MAIN
+EXE: cmdsize 24
+EXE: entryoff 32645
+EXE: stacksize 0
+EXE: Load command 12
+EXE: cmd LC_ENCRYPTION_INFO
+EXE: cmdsize 20
+EXE: cryptoff 16384
+EXE: cryptsize 16384
+EXE: cryptid 0
+EXE: Load command 13
+EXE: cmd LC_LOAD_DYLIB
+EXE: cmdsize 52
+EXE: name /usr/lib/libSystem.B.dylib (offset 24)
+EXE: current version 1213.0.0
+EXE: compatibility version 1.0.0
+EXE: Load command 14
+EXE: cmd LC_FUNCTION_STARTS
+EXE: cmdsize 16
+EXE: dataoff 49240
+EXE: datasize 4
+EXE: Load command 15
+EXE: cmd LC_DATA_IN_CODE
+EXE: cmdsize 16
+EXE: dataoff 49244
+EXE: datasize 0
+EXE: Load command 16
+EXE: cmd LC_DYLIB_CODE_SIGN_DRS
+EXE: cmdsize 16
+EXE: dataoff 49244
+EXE: datasize 20
diff --git a/test/tools/llvm-objdump/Inputs/common-symbol-elf b/test/tools/llvm-objdump/Inputs/common-symbol-elf
new file mode 100644
index 0000000..9609edb
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/common-symbol-elf
Binary files differ
diff --git a/test/tools/llvm-objdump/Inputs/proc-specific-section-elf b/test/tools/llvm-objdump/Inputs/proc-specific-section-elf
new file mode 100644
index 0000000..7c3d613
--- /dev/null
+++ b/test/tools/llvm-objdump/Inputs/proc-specific-section-elf
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/dylibModInit.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/dylibModInit.macho-x86_64
new file mode 100755
index 0000000..a39424a
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/dylibModInit.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/dylibRoutines.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/dylibRoutines.macho-x86_64
new file mode 100755
index 0000000..3568045
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/dylibRoutines.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/dylibSubClient.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/dylibSubClient.macho-x86_64
new file mode 100755
index 0000000..e7f9542
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/dylibSubClient.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/dylibSubFramework.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/dylibSubFramework.macho-x86_64
new file mode 100755
index 0000000..3036c27
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/dylibSubFramework.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/dylibSubLibrary.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/dylibSubLibrary.macho-x86_64
new file mode 100755
index 0000000..dafee5f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/dylibSubLibrary.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/dylibSubUmbrella.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/dylibSubUmbrella.macho-x86_64
new file mode 100755
index 0000000..1e42a4f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/dylibSubUmbrella.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/exeThread.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/exeThread.macho-x86_64
new file mode 100755
index 0000000..93fe1db
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/exeThread.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/linkerOption.macho-x86_64 b/test/tools/llvm-objdump/X86/Inputs/linkerOption.macho-x86_64
new file mode 100644
index 0000000..38053c5
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/linkerOption.macho-x86_64
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/macho-universal-archive.x86_64.i386 b/test/tools/llvm-objdump/X86/Inputs/macho-universal-archive.x86_64.i386
new file mode 100644
index 0000000..1660714
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/macho-universal-archive.x86_64.i386
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/Inputs/macho-universal.x86_64.i386 b/test/tools/llvm-objdump/X86/Inputs/macho-universal.x86_64.i386
new file mode 100755
index 0000000..36d5fc2
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/Inputs/macho-universal.x86_64.i386
Binary files differ
diff --git a/test/tools/llvm-objdump/X86/macho-archive-headers.test b/test/tools/llvm-objdump/X86/macho-archive-headers.test
new file mode 100644
index 0000000..3d9043e
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-archive-headers.test
@@ -0,0 +1,10 @@
+RUN: llvm-objdump %p/Inputs/macho-universal-archive.x86_64.i386 -macho -archive-headers -arch all \
+RUN: | FileCheck %s
+
+# Note the date as printed by ctime(3) is time zone dependent and not checked.
+CHECK: Archive : {{.*}}/macho-universal-archive.x86_64.i386 (architecture x86_64)
+CHECK: -rw-r--r--124/11 44 {{.*}} __.SYMDEF SORTED
+CHECK: -rw-r--r--124/0 860 {{.*}} hello.o
+CHECK: Archive : {{.*}}/macho-universal-archive.x86_64.i386 (architecture i386)
+CHECK: -rw-r--r--124/11 60 {{.*}} __.SYMDEF SORTED
+CHECK: -rw-r--r--124/0 388 {{.*}} foo.o
diff --git a/test/tools/llvm-objdump/X86/macho-cstring-dump.test b/test/tools/llvm-objdump/X86/macho-cstring-dump.test
new file mode 100644
index 0000000..3dfa4e3
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-cstring-dump.test
@@ -0,0 +1,4 @@
+RUN: llvm-objdump -m -section __TEXT,__cstring %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
+
+CHECK: Contents of (__TEXT,__cstring) section
+CHECK: 000000000000003b Hello world\n
diff --git a/test/tools/llvm-objdump/X86/macho-indirect-symbols.test b/test/tools/llvm-objdump/X86/macho-indirect-symbols.test
new file mode 100644
index 0000000..4f3af18
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-indirect-symbols.test
@@ -0,0 +1,12 @@
+RUN: llvm-objdump -macho -indirect-symbols %p/Inputs/hello.exe.macho-x86_64 | FileCheck %s
+
+CHECK: Indirect symbols for (__TEXT,__stubs) 1 entries
+CHECK: address index name
+CHECK: 0x0000000100000f6c 2 _printf
+CHECK: Indirect symbols for (__DATA,__nl_symbol_ptr) 2 entries
+CHECK: address index name
+CHECK: 0x0000000100001000 3 dyld_stub_binder
+CHECK: 0x0000000100001008 ABSOLUTE
+CHECK: Indirect symbols for (__DATA,__la_symbol_ptr) 1 entries
+CHECK: address index name
+CHECK: 0x0000000100001010 2 _printf
diff --git a/test/tools/llvm-objdump/X86/macho-literal-pointers-i386.test b/test/tools/llvm-objdump/X86/macho-literal-pointers-i386.test
new file mode 100644
index 0000000..0069668
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-literal-pointers-i386.test
@@ -0,0 +1,34 @@
+# RUN: llvm-mc < %s -triple i386-apple-darwin -filetype=obj | llvm-objdump -m -section __DATA,__litp - | FileCheck %s
+
+.cstring
+L1: .asciz "Hello world\n"
+
+.literal4
+.align 2
+L2: .float 4.0
+
+.literal8
+.align 3
+L3: .double 8.0
+
+.literal16
+.align 4
+L4: .long 0x10000016, 0x20000016, 0x30000016, 0x40000016
+
+.const
+L5: .asciz "const non-literal string"
+
+.section __DATA,__litp, literal_pointers
+.align 2
+.long L1
+.long L2
+.long L3
+.long L4
+.long L5
+
+# CHECK: Contents of (__DATA,__litp) section
+# CHECK: 0000004c __TEXT:__cstring:Hello world\n
+# CHECK: 00000050 __TEXT:__literal4:0x40800000
+# CHECK: 00000054 __TEXT:__literal8:0x00000000 0x40200000
+# CHECK: 00000058 __TEXT:__literal16:0x10000016 0x20000016 0x30000016 0x40000016
+# CHECK: 0000005c 0x30 (not in a literal section)
diff --git a/test/tools/llvm-objdump/X86/macho-literal-pointers-x86_64.test b/test/tools/llvm-objdump/X86/macho-literal-pointers-x86_64.test
new file mode 100644
index 0000000..b403b81
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-literal-pointers-x86_64.test
@@ -0,0 +1,34 @@
+# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -section __DATA,__litp - | FileCheck %s
+
+.cstring
+L1: .asciz "Hello world\n"
+
+.literal4
+.align 2
+L2: .float 4.0
+
+.literal8
+.align 3
+L3: .double 8.0
+
+.literal16
+.align 4
+L4: .long 0x10000016, 0x20000016, 0x30000016, 0x40000016
+
+.const
+L5: .asciz "const non-literal string"
+
+.section __DATA,__litp, literal_pointers
+.align 3
+.quad L1
+.quad L2
+.quad L3
+.quad L4
+.quad L5
+
+# CHECK: Contents of (__DATA,__litp) section
+# CHECK: 0000000000000050 __TEXT:__cstring:Hello world\n
+# CHECK: 0000000000000058 __TEXT:__literal4:0x40800000
+# CHECK: 0000000000000060 __TEXT:__literal8:0x00000000 0x40200000
+# CHECK: 0000000000000068 __TEXT:__literal16:0x10000016 0x20000016 0x30000016 0x40000016
+# CHECK: 0000000000000070 0x30 (not in a literal section)
diff --git a/test/tools/llvm-objdump/X86/macho-literals.test b/test/tools/llvm-objdump/X86/macho-literals.test
new file mode 100644
index 0000000..4824453
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-literals.test
@@ -0,0 +1,48 @@
+# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -section __TEXT,__literal4 - | FileCheck %s -check-prefix=CHECK-LIT4
+# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -section __TEXT,__literal8 - | FileCheck %s -check-prefix=CHECK-LIT8
+# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -section __TEXT,__literal16 - | FileCheck %s -check-prefix=CHECK-LIT16
+
+.literal4
+.float 2.5
+.float 8.25
+.long 0x7f800000
+.long 0xff800000
+.long 0x7fc00000
+.long 0x7f800001
+
+# CHECK-LIT4: Contents of (__TEXT,__literal4) section
+# CHECK-LIT4: 0000000000000000 0x40200000
+# CHECK-LIT4: 0000000000000004 0x41040000
+# CHECK-LIT4: 0000000000000008 0x7f800000
+# CHECK-LIT4: 000000000000000c 0xff800000
+# CHECK-LIT4: 0000000000000010 0x7fc00000
+# CHECK-LIT4: 0000000000000014 0x7f800001
+
+.literal8
+.double 2.5
+.double 8.25
+.long 0
+.long 0x7ff00000
+.long 0
+.long 0xfff00000
+.long 0
+.long 0x7ff80000
+.long 1
+.long 0x7ff00000
+
+# CHECK-LIT8: Contents of (__TEXT,__literal8) section
+# CHECK-LIT8: 0000000000000018 0x00000000 0x40040000
+# CHECK-LIT8: 0000000000000020 0x00000000 0x40208000
+# CHECK-LIT8: 0000000000000028 0x00000000 0x7ff00000
+# CHECK-LIT8: 0000000000000030 0x00000000 0xfff00000
+# CHECK-LIT8: 0000000000000038 0x00000000 0x7ff80000
+# CHECK-LIT8: 0000000000000040 0x00000001 0x7ff00000
+
+.literal16
+.long 1
+.long 2
+.long 3
+.long 4
+
+# CHECK-LIT16: Contents of (__TEXT,__literal16) section
+# CHECK-LIT16: 0000000000000050 0x00000001 0x00000002 0x00000003 0x00000004
diff --git a/test/tools/llvm-objdump/X86/macho-nontext-disasm.test b/test/tools/llvm-objdump/X86/macho-nontext-disasm.test
new file mode 100644
index 0000000..27b7bb4
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-nontext-disasm.test
@@ -0,0 +1,9 @@
+# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -section __FOO,__bar -full-leading-addr -print-imm-hex -no-show-raw-insn - | FileCheck %s
+
+.section __FOO, __bar
+_foo:
+ nop
+
+# CHECK: Contents of (__FOO,__bar) section
+# CHECK: _foo:
+# CHECK: 0000000000000000 nop
diff --git a/test/tools/llvm-objdump/X86/macho-private-headers.test b/test/tools/llvm-objdump/X86/macho-private-headers.test
index 685b4f7..c80bb08 100644
--- a/test/tools/llvm-objdump/X86/macho-private-headers.test
+++ b/test/tools/llvm-objdump/X86/macho-private-headers.test
@@ -3,6 +3,22 @@
// RUN: | FileCheck %s -check-prefix=EXE
// RUN: llvm-objdump -p %p/Inputs/dylibLoadKinds.macho-x86_64 \
// RUN: | FileCheck %s -check-prefix=LOAD
+// RUN: llvm-objdump -p %p/Inputs/linkerOption.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=LD_OPT
+// RUN: llvm-objdump -p %p/Inputs/dylibSubFramework.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=SUB_FRAME
+// RUN: llvm-objdump -p %p/Inputs/dylibSubUmbrella.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=SUB_UMB
+// RUN: llvm-objdump -p %p/Inputs/dylibSubLibrary.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=SUB_LIB
+// RUN: llvm-objdump -p %p/Inputs/dylibSubClient.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=SUB_CLI
+// RUN: llvm-objdump -p %p/Inputs/dylibRoutines.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=ROUTINE
+// RUN: llvm-objdump -p %p/Inputs/exeThread.macho-x86_64 \
+// RUN: | FileCheck %s -check-prefix=THREAD
+// RUN: llvm-objdump -macho -p -arch i386 %p/Inputs/macho-universal.x86_64.i386 \
+// RUN: | FileCheck %s -check-prefix=FATi386
CHECK: Mach header
CHECK: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
@@ -366,3 +382,64 @@ LOAD: name /usr/lib/foo4.dylib (offset 24)
LOAD: current version 0.0.0
LOAD: compatibility version 0.0.0
+LD_OPT: Load command 4
+LD_OPT: cmd LC_LINKER_OPTION
+LD_OPT: cmdsize 24
+LD_OPT: count 1
+LD_OPT: string #1 -lc++
+LD_OPT: Load command 5
+LD_OPT: cmd LC_LINKER_OPTION
+LD_OPT: cmdsize 40
+LD_OPT: count 2
+LD_OPT: string #1 -framework
+LD_OPT: string #2 Foundation
+
+SUB_FRAME: Load command 10
+SUB_FRAME: cmd LC_SUB_FRAMEWORK
+SUB_FRAME: cmdsize 16
+SUB_FRAME: umbrella Bar (offset 12)
+
+SUB_UMB: Load command 5
+SUB_UMB: cmd LC_SUB_UMBRELLA
+SUB_UMB: cmdsize 16
+SUB_UMB: sub_umbrella Foo (offset 12)
+
+SUB_LIB: Load command 5
+SUB_LIB: cmd LC_SUB_LIBRARY
+SUB_LIB: cmdsize 20
+SUB_LIB: sub_library libfoo (offset 12)
+
+SUB_CLI: Load command 10
+SUB_CLI: cmd LC_SUB_CLIENT
+SUB_CLI: cmdsize 16
+SUB_CLI: client bar (offset 12)
+
+ROUTINE: Load command 6
+ROUTINE: cmd LC_ROUTINES_64
+ROUTINE: cmdsize 72
+ROUTINE: init_address 0x0000000000000f80
+ROUTINE: init_module 0
+ROUTINE: reserved1 0
+ROUTINE: reserved2 0
+ROUTINE: reserved3 0
+ROUTINE: reserved4 0
+ROUTINE: reserved5 0
+ROUTINE: reserved6 0
+
+THREAD: Load command 10
+THREAD: cmd LC_UNIXTHREAD
+THREAD: cmdsize 184
+THREAD: flavor x86_THREAD_STATE64
+THREAD: count x86_THREAD_STATE64_COUNT
+THREAD: rax 0x0000000000000000 rbx 0x0000000000000000 rcx 0x0000000000000000
+THREAD: rdx 0x0000000000000000 rdi 0x0000000000000000 rsi 0x0000000000000000
+THREAD: rbp 0x0000000000000000 rsp 0x0000000000000000 r8 0x0000000000000000
+THREAD: r9 0x0000000000000000 r10 0x0000000000000000 r11 0x0000000000000000
+THREAD: r12 0x0000000000000000 r13 0x0000000000000000 r14 0x0000000000000000
+THREAD: r15 0x0000000000000000 rip 0x0000000100000d00
+THREAD: rflags 0x0000000000000000 cs 0x0000000000000000 fs 0x0000000000000000
+THREAD: gs 0x0000000000000000
+
+FATi386: Mach header
+FATi386: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
+FATi386: MH_MAGIC I386 ALL 0x00 EXECUTE 16 716 NOUNDEFS DYLDLINK TWOLEVEL PIE MH_NO_HEAP_EXECUTION
diff --git a/test/tools/llvm-objdump/X86/macho-relocations.test b/test/tools/llvm-objdump/X86/macho-relocations.test
new file mode 100644
index 0000000..536aec8
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-relocations.test
@@ -0,0 +1,7 @@
+RUN: llvm-objdump -macho -r %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
+
+CHECK: RELOCATION RECORDS FOR [__text]:
+CHECK: 0000000000000027 X86_64_RELOC_BRANCH _printf
+CHECK: 000000000000000b X86_64_RELOC_SIGNED L_.str
+CHECK: RELOCATION RECORDS FOR [__compact_unwind]:
+CHECK: 0000000000000000 X86_64_RELOC_UNSIGNED __text
diff --git a/test/tools/llvm-objdump/X86/macho-section-contents.test b/test/tools/llvm-objdump/X86/macho-section-contents.test
new file mode 100644
index 0000000..f62b5a7
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-section-contents.test
@@ -0,0 +1,17 @@
+RUN: llvm-objdump -macho -s %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
+
+CHECK: Contents of section __text:
+CHECK: 0000 554889e5 4883ec20 488d0500 000000c7 UH..H.. H.......
+CHECK: 0010 45fc0000 0000897d f8488975 f0488955 E......}.H.u.H.U
+CHECK: 0020 e84889c7 b000e800 000000b9 00000000 .H..............
+CHECK: 0030 8945e489 c84883c4 205dc3 .E...H.. ].
+CHECK: Contents of section __cstring:
+CHECK: 003b 48656c6c 6f20776f 726c640a 00 Hello world..
+CHECK: Contents of section __compact_unwind:
+CHECK: 0048 00000000 00000000 3b000000 00000001 ........;.......
+CHECK: 0058 00000000 00000000 00000000 00000000 ................
+CHECK: Contents of section __eh_frame:
+CHECK: 0068 14000000 00000000 017a5200 01781001 .........zR..x..
+CHECK: 0078 100c0708 90010000 24000000 1c000000 ........$.......
+CHECK: 0088 78ffffff ffffffff 3b000000 00000000 x.......;.......
+CHECK: 0098 00410e10 8602430d 06000000 00000000 .A....C.........
diff --git a/test/tools/llvm-objdump/X86/macho-section-headers.test b/test/tools/llvm-objdump/X86/macho-section-headers.test
new file mode 100644
index 0000000..5159d18
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-section-headers.test
@@ -0,0 +1,8 @@
+RUN: llvm-objdump -macho -h %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
+
+CHECK: Sections:
+CHECK: Idx Name Size Address Type
+CHECK: 0 __text 0000003b 0000000000000000 TEXT
+CHECK: 1 __cstring 0000000d 000000000000003b DATA
+CHECK: 2 __compact_unwind 00000020 0000000000000048 DATA
+CHECK: 3 __eh_frame 00000040 0000000000000068 DATA
diff --git a/test/tools/llvm-objdump/X86/macho-section.test b/test/tools/llvm-objdump/X86/macho-section.test
new file mode 100644
index 0000000..720b9a4
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-section.test
@@ -0,0 +1,4 @@
+// RUN: llvm-objdump -m -section __DATA,__mod_init_func %p/Inputs/dylibModInit.macho-x86_64 | FileCheck %s -check-prefix=MODINIT
+
+MODINIT: Contents of (__DATA,__mod_init_func) section
+MODINIT: 0x0000000000001000 0x0000000000000f30 _libinit
diff --git a/test/tools/llvm-objdump/X86/macho-symbol-table.test b/test/tools/llvm-objdump/X86/macho-symbol-table.test
new file mode 100644
index 0000000..5b9a4f8
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-symbol-table.test
@@ -0,0 +1,8 @@
+RUN: llvm-objdump -macho -t %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
+
+CHECK: SYMBOL TABLE:
+CHECK: 000000000000003b l F __TEXT,__cstring 0000000d L_.str
+CHECK: 0000000000000068 l F __TEXT,__eh_frame 00000018 EH_frame0
+CHECK: 0000000000000000 g F __TEXT,__text 0000003b _main
+CHECK: 0000000000000080 g F __TEXT,__eh_frame 00000028 _main.eh
+CHECK: 0000000000000000 *UND* 00000000 _printf
diff --git a/test/tools/llvm-objdump/X86/macho-universal-x86_64.i386.test b/test/tools/llvm-objdump/X86/macho-universal-x86_64.i386.test
new file mode 100644
index 0000000..e4fd37a
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-universal-x86_64.i386.test
@@ -0,0 +1,44 @@
+RUN: llvm-objdump %p/Inputs/macho-universal.x86_64.i386 -d -m -no-show-raw-insn -full-leading-addr -print-imm-hex -arch all \
+RUN: | FileCheck %s -check-prefix UEXE-all
+RUN: llvm-objdump %p/Inputs/macho-universal-archive.x86_64.i386 -d -m -no-show-raw-insn -full-leading-addr -print-imm-hex -arch i386 \
+RUN: | FileCheck %s -check-prefix UArchive-i386
+RUN: llvm-objdump %p/Inputs/macho-universal.x86_64.i386 -universal-headers -m \
+RUN: | FileCheck %s -check-prefix FAT
+
+UEXE-all: macho-universal.x86_64.i386 (architecture x86_64):
+UEXE-all: (__TEXT,__text) section
+UEXE-all: _main:
+UEXE-all: 0000000100000f60 pushq %rbp
+UEXE-all: 0000000100000f61 movq %rsp, %rbp
+UEXE-all: macho-universal.x86_64.i386 (architecture i386):
+UEXE-all: (__TEXT,__text) section
+UEXE-all: _main:
+UEXE-all: 00001fa0 pushl %ebp
+UEXE-all: 00001fa1 movl %esp, %ebp
+
+UArchive-i386: Archive : {{.*}}/macho-universal-archive.x86_64.i386
+UArchive-i386: macho-universal-archive.x86_64.i386(foo.o):
+UArchive-i386: (__TEXT,__text) section
+UArchive-i386: _foo:
+UArchive-i386: 00000000 pushl %ebp
+UArchive-i386: 00000001 movl %esp, %ebp
+UArchive-i386: 00000003 popl %ebp
+UArchive-i386: 00000004 retl
+
+FAT: Fat headers
+FAT: fat_magic FAT_MAGIC
+FAT: nfat_arch 2
+FAT: architecture x86_64
+FAT: cputype CPU_TYPE_X86_64
+FAT: cpusubtype CPU_SUBTYPE_X86_64_ALL
+FAT: capabilities CPU_SUBTYPE_LIB64
+FAT: offset 4096
+FAT: size 4360
+FAT: align 2^12 (4096)
+FAT: architecture i386
+FAT: cputype CPU_TYPE_I386
+FAT: cpusubtype CPU_SUBTYPE_I386_ALL
+FAT: capabilities 0x0
+FAT: offset 12288
+FAT: size 4336
+FAT: align 2^12 (4096)
diff --git a/test/tools/llvm-objdump/X86/macho-unwind-info.test b/test/tools/llvm-objdump/X86/macho-unwind-info.test
new file mode 100644
index 0000000..33db84f
--- /dev/null
+++ b/test/tools/llvm-objdump/X86/macho-unwind-info.test
@@ -0,0 +1,7 @@
+RUN: llvm-objdump -macho -u %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
+
+CHECK: Contents of __compact_unwind section:
+CHECK: Entry at offset 0x0:
+CHECK: start: 0x0 _main
+CHECK: length: 0x3b
+CHECK: compact encoding: 0x01000000
diff --git a/test/tools/llvm-objdump/common-symbol-elf.test b/test/tools/llvm-objdump/common-symbol-elf.test
new file mode 100644
index 0000000..32df05a
--- /dev/null
+++ b/test/tools/llvm-objdump/common-symbol-elf.test
@@ -0,0 +1,3 @@
+// RUN: llvm-objdump -t %p/Inputs/common-symbol-elf | FileCheck %s
+
+CHECK: 00000400 g *COM* 00000008 common_symbol
diff --git a/test/tools/llvm-objdump/proc-specific-section-elf.test b/test/tools/llvm-objdump/proc-specific-section-elf.test
new file mode 100644
index 0000000..b3067d4
--- /dev/null
+++ b/test/tools/llvm-objdump/proc-specific-section-elf.test
@@ -0,0 +1,3 @@
+// RUN: llvm-objdump -t %p/Inputs/proc-specific-section-elf | FileCheck %s
+
+CHECK: 00000000 *UND* 00000000 print
diff --git a/test/tools/llvm-readobj/ARM/attribute-0.s b/test/tools/llvm-readobj/ARM/attribute-0.s
new file mode 100644
index 0000000..b761dd8
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-0.s
@@ -0,0 +1,234 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 0
+@CHECK: .eabi_attribute 6, 0
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: Pre-v4
+
+.eabi_attribute Tag_CPU_arch_profile, 0
+@CHECK: .eabi_attribute 7, 0
+@CHECK-OBJ: Tag: 7
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: CPU_arch_profile
+@CHECK-OBJ-NEXT: Description: None
+
+.eabi_attribute Tag_ARM_ISA_use, 0
+@CHECK: .eabi_attribute 8, 0
+@CHECK-OBJ: Tag: 8
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ARM_ISA_use
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_THUMB_ISA_use, 0
+@CHECK: .eabi_attribute 9, 0
+@CHECK-OBJ: Tag: 9
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: THUMB_ISA_use
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_FP_arch, 0
+@CHECK: .eabi_attribute 10, 0
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_WMMX_arch, 0
+@CHECK: .eabi_attribute 11, 0
+@CHECK-OBJ: Tag: 11
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: WMMX_arch
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_Advanced_SIMD_arch, 0
+@CHECK: .eabi_attribute 12, 0
+@CHECK-OBJ: Tag: 12
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: Advanced_SIMD_arch
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_PCS_config, 0
+@CHECK: .eabi_attribute 13, 0
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: None
+
+.eabi_attribute Tag_ABI_PCS_R9_use, 0
+@CHECK: .eabi_attribute 14, 0
+@CHECK-OBJ: Tag: 14
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_R9_use
+@CHECK-OBJ-NEXT: Description: v6
+
+.eabi_attribute Tag_ABI_PCS_RW_data, 0
+@CHECK: .eabi_attribute 15, 0
+@CHECK-OBJ: Tag: 15
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RW_data
+@CHECK-OBJ-NEXT: Description: Absolute
+
+.eabi_attribute Tag_ABI_PCS_RO_data, 0
+@CHECK: .eabi_attribute 16, 0
+@CHECK-OBJ: Tag: 16
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RO_data
+@CHECK-OBJ-NEXT: Description: Absolute
+
+.eabi_attribute Tag_ABI_PCS_GOT_use, 0
+@CHECK: .eabi_attribute 17, 0
+@CHECK-OBJ: Tag: 17
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_GOT_use
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_PCS_wchar_t, 0
+@CHECK: .eabi_attribute 18, 0
+@CHECK-OBJ: Tag: 18
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_wchar_t
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_FP_rounding, 0
+@CHECK: .eabi_attribute 19, 0
+@CHECK-OBJ: Tag: 19
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_rounding
+@CHECK-OBJ-NEXT: Description: IEEE-754
+
+.eabi_attribute Tag_ABI_FP_denormal, 0
+@CHECK: .eabi_attribute 20, 0
+@CHECK-OBJ: Tag: 20
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_denormal
+@CHECK-OBJ-NEXT: Description: Unsupported
+
+.eabi_attribute Tag_ABI_FP_exceptions, 0
+@CHECK: .eabi_attribute 21, 0
+@CHECK-OBJ: Tag: 21
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_exceptions
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_FP_user_exceptions, 0
+@CHECK: .eabi_attribute 22, 0
+@CHECK-OBJ: Tag: 22
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_user_exceptions
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_FP_number_model, 0
+@CHECK: .eabi_attribute 23, 0
+@CHECK-OBJ: Tag: 23
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_number_model
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_align_needed, 0
+@CHECK: .eabi_attribute 24, 0
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_align_preserved, 0
+@CHECK: .eabi_attribute 25, 0
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: Not Required
+
+.eabi_attribute Tag_ABI_enum_size, 0
+@CHECK: .eabi_attribute 26, 0
+@CHECK-OBJ: Tag: 26
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_enum_size
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_HardFP_use, 0
+@CHECK: .eabi_attribute 27, 0
+@CHECK-OBJ: Tag: 27
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_HardFP_use
+@CHECK-OBJ-NEXT: Description: Tag_FP_arch
+
+.eabi_attribute Tag_ABI_VFP_args, 0
+@CHECK: .eabi_attribute 28, 0
+@CHECK-OBJ: Tag: 28
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_VFP_args
+@CHECK-OBJ-NEXT: Description: AAPCS
+
+.eabi_attribute Tag_ABI_WMMX_args, 0
+@CHECK: .eabi_attribute 29, 0
+@CHECK-OBJ: Tag: 29
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_WMMX_args
+@CHECK-OBJ-NEXT: Description: AAPCS
+
+.eabi_attribute Tag_ABI_optimization_goals, 0
+@CHECK: .eabi_attribute 30, 0
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: None
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 0
+@CHECK: .eabi_attribute 31, 0
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: None
+
+.eabi_attribute Tag_compatibility, 0, "ARM"
+@CHECK: .eabi_attribute 32, 0
+@CHECK-OBJ: Tag: 32
+@CHECK-OBJ-NEXT: Value: 0, ARM
+@CHECK-OBJ-NEXT: TagName: compatibility
+@CHECK-OBJ-NEXT: Description: No Specific Requirements
+
+.eabi_attribute Tag_CPU_unaligned_access, 0
+@CHECK: .eabi_attribute 34, 0
+@CHECK-OBJ: Tag: 34
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: CPU_unaligned_access
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_FP_HP_extension, 0
+@CHECK: .eabi_attribute 36, 0
+@CHECK-OBJ: Tag: 36
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: FP_HP_extension
+@CHECK-OBJ-NEXT: Description: If Available
+
+.eabi_attribute Tag_ABI_FP_16bit_format, 0
+@CHECK: .eabi_attribute 38, 0
+@CHECK-OBJ: Tag: 38
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: ABI_FP_16bit_format
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_MPextension_use, 0
+@CHECK: .eabi_attribute 42, 0
+@CHECK-OBJ: Tag: 42
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: MPextension_use
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_DIV_use, 0
+@CHECK: .eabi_attribute 44, 0
+@CHECK-OBJ: Tag: 44
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: DIV_use
+@CHECK-OBJ-NEXT: Description: If Available
+
+.eabi_attribute Tag_Virtualization_use, 0
+@CHECK: .eabi_attribute 68, 0
+@CHECK-OBJ: Tag: 68
+@CHECK-OBJ-NEXT: Value: 0
+@CHECK-OBJ-NEXT: TagName: Virtualization_use
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-1.s b/test/tools/llvm-readobj/ARM/attribute-1.s
new file mode 100644
index 0000000..f433cbc
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-1.s
@@ -0,0 +1,220 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 1
+@CHECK: .eabi_attribute 6, 1
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v4
+
+.eabi_attribute Tag_ARM_ISA_use, 1
+@CHECK: .eabi_attribute 8, 1
+@CHECK-OBJ: Tag: 8
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ARM_ISA_use
+@CHECK-OBJ-NEXT: Description: Permitted
+
+.eabi_attribute Tag_THUMB_ISA_use, 1
+@CHECK: .eabi_attribute 9, 1
+@CHECK-OBJ: Tag: 9
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: THUMB_ISA_use
+@CHECK-OBJ-NEXT: Description: Thumb-1
+
+.eabi_attribute Tag_FP_arch, 1
+@CHECK: .eabi_attribute 10, 1
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: VFPv1
+
+.eabi_attribute Tag_WMMX_arch, 1
+@CHECK: .eabi_attribute 11, 1
+@CHECK-OBJ: Tag: 11
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: WMMX_arch
+@CHECK-OBJ-NEXT: Description: WMMXv1
+
+.eabi_attribute Tag_Advanced_SIMD_arch, 1
+@CHECK: .eabi_attribute 12, 1
+@CHECK-OBJ: Tag: 12
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: Advanced_SIMD_arch
+@CHECK-OBJ-NEXT: Description: NEONv1
+
+.eabi_attribute Tag_PCS_config, 1
+@CHECK: .eabi_attribute 13, 1
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Bare Platform
+
+.eabi_attribute Tag_ABI_PCS_R9_use, 1
+@CHECK: .eabi_attribute 14, 1
+@CHECK-OBJ: Tag: 14
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_R9_use
+@CHECK-OBJ-NEXT: Description: Static Base
+
+.eabi_attribute Tag_ABI_PCS_RW_data, 1
+@CHECK: .eabi_attribute 15, 1
+@CHECK-OBJ: Tag: 15
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RW_data
+@CHECK-OBJ-NEXT: Description: PC-relative
+
+.eabi_attribute Tag_ABI_PCS_RO_data, 1
+@CHECK: .eabi_attribute 16, 1
+@CHECK-OBJ: Tag: 16
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RO_data
+@CHECK-OBJ-NEXT: Description: PC-relative
+
+.eabi_attribute Tag_ABI_PCS_GOT_use, 1
+@CHECK: .eabi_attribute 17, 1
+@CHECK-OBJ: Tag: 17
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_GOT_use
+@CHECK-OBJ-NEXT: Description: Direct
+
+.eabi_attribute Tag_ABI_FP_rounding, 1
+@CHECK: .eabi_attribute 19, 1
+@CHECK-OBJ: Tag: 19
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_rounding
+@CHECK-OBJ-NEXT: Description: Runtime
+
+.eabi_attribute Tag_ABI_FP_denormal, 1
+@CHECK: .eabi_attribute 20, 1
+@CHECK-OBJ: Tag: 20
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_denormal
+@CHECK-OBJ-NEXT: Description: IEEE-754
+
+.eabi_attribute Tag_ABI_FP_exceptions, 1
+@CHECK: .eabi_attribute 21, 1
+@CHECK-OBJ: Tag: 21
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_exceptions
+@CHECK-OBJ-NEXT: Description: IEEE-754
+
+.eabi_attribute Tag_ABI_FP_user_exceptions, 1
+@CHECK: .eabi_attribute 22, 1
+@CHECK-OBJ: Tag: 22
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_user_exceptions
+@CHECK-OBJ-NEXT: Description: IEEE-754
+
+.eabi_attribute Tag_ABI_FP_number_model, 1
+@CHECK: .eabi_attribute 23, 1
+@CHECK-OBJ: Tag: 23
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_number_model
+@CHECK-OBJ-NEXT: Description: Finite Only
+
+.eabi_attribute Tag_ABI_align_needed, 1
+@CHECK: .eabi_attribute 24, 1
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 1
+@CHECK: .eabi_attribute 25, 1
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte data alignment
+
+.eabi_attribute Tag_ABI_enum_size, 1
+@CHECK: .eabi_attribute 26, 1
+@CHECK-OBJ: Tag: 26
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_enum_size
+@CHECK-OBJ-NEXT: Description: Packed
+
+.eabi_attribute Tag_ABI_HardFP_use, 1
+@CHECK: .eabi_attribute 27, 1
+@CHECK-OBJ: Tag: 27
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_HardFP_use
+@CHECK-OBJ-NEXT: Description: Single-Precision
+
+.eabi_attribute Tag_ABI_VFP_args, 1
+@CHECK: .eabi_attribute 28, 1
+@CHECK-OBJ: Tag: 28
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_VFP_args
+@CHECK-OBJ-NEXT: Description: AAPCS VFP
+
+.eabi_attribute Tag_ABI_WMMX_args, 1
+@CHECK: .eabi_attribute 29, 1
+@CHECK-OBJ: Tag: 29
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_WMMX_args
+@CHECK-OBJ-NEXT: Description: iWMMX
+
+.eabi_attribute Tag_ABI_optimization_goals, 1
+@CHECK: .eabi_attribute 30, 1
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: Speed
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 1
+@CHECK: .eabi_attribute 31, 1
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: Speed
+
+.eabi_attribute Tag_compatibility, 1, ""
+@CHECK: .eabi_attribute 32, 1
+@CHECK-OBJ: Tag: 32
+@CHECK-OBJ-NEXT: Value: 1,
+@CHECK-OBJ-NEXT: TagName: compatibility
+@CHECK-OBJ-NEXT: Description: AEABI Conformant
+
+.eabi_attribute Tag_CPU_unaligned_access, 1
+@CHECK: .eabi_attribute 34, 1
+@CHECK-OBJ: Tag: 34
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: CPU_unaligned_access
+@CHECK-OBJ-NEXT: Description: v6-style
+
+.eabi_attribute Tag_FP_HP_extension, 1
+@CHECK: .eabi_attribute 36, 1
+@CHECK-OBJ: Tag: 36
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: FP_HP_extension
+@CHECK-OBJ-NEXT: Description: Permitted
+
+.eabi_attribute Tag_ABI_FP_16bit_format, 1
+@CHECK: .eabi_attribute 38, 1
+@CHECK-OBJ: Tag: 38
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: ABI_FP_16bit_format
+@CHECK-OBJ-NEXT: Description: IEEE-754
+
+.eabi_attribute Tag_MPextension_use, 1
+@CHECK: .eabi_attribute 42, 1
+@CHECK-OBJ: Tag: 42
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: MPextension_use
+@CHECK-OBJ-NEXT: Description: Permitted
+
+.eabi_attribute Tag_DIV_use, 1
+@CHECK: .eabi_attribute 44, 1
+@CHECK-OBJ: Tag: 44
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: DIV_use
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_Virtualization_use, 1
+@CHECK: .eabi_attribute 68, 1
+@CHECK-OBJ: Tag: 68
+@CHECK-OBJ-NEXT: Value: 1
+@CHECK-OBJ-NEXT: TagName: Virtualization_use
+@CHECK-OBJ-NEXT: Description: TrustZone
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-10.s b/test/tools/llvm-readobj/ARM/attribute-10.s
new file mode 100644
index 0000000..667db8c
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-10.s
@@ -0,0 +1,24 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 10
+@CHECK: .eabi_attribute 6, 10
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 10
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v7
+
+.eabi_attribute Tag_ABI_align_needed, 10
+@CHECK: .eabi_attribute 24, 10
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 10
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 1024-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 10
+@CHECK: .eabi_attribute 25, 10
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 10
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 1024-byte data alignment
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-11.s b/test/tools/llvm-readobj/ARM/attribute-11.s
new file mode 100644
index 0000000..2d8e43b
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-11.s
@@ -0,0 +1,24 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 11
+@CHECK: .eabi_attribute 6, 11
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 11
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v6-M
+
+.eabi_attribute Tag_ABI_align_needed, 11
+@CHECK: .eabi_attribute 24, 11
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 11
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 2048-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 11
+@CHECK: .eabi_attribute 25, 11
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 11
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 2048-byte data alignment
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-12.s b/test/tools/llvm-readobj/ARM/attribute-12.s
new file mode 100644
index 0000000..4387527
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-12.s
@@ -0,0 +1,24 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 12
+@CHECK: .eabi_attribute 6, 12
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 12
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v6S-M
+
+.eabi_attribute Tag_ABI_align_needed, 12
+@CHECK: .eabi_attribute 24, 12
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 12
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 4096-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 12
+@CHECK: .eabi_attribute 25, 12
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 12
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 4096-byte data alignment
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-13.s b/test/tools/llvm-readobj/ARM/attribute-13.s
new file mode 100644
index 0000000..25ac5f1
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-13.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 13
+@CHECK: .eabi_attribute 6, 13
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 13
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v7E-M
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-136.s b/test/tools/llvm-readobj/ARM/attribute-136.s
new file mode 100644
index 0000000..a2d2a9a
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-136.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_compatibility, 136, "Foo Corp"
+@CHECK: .eabi_attribute 32, 136
+@CHECK-OBJ: Tag: 32
+@CHECK-OBJ-NEXT: Value: 136, Foo Corp
+@CHECK-OBJ-NEXT: TagName: compatibility
+@CHECK-OBJ-NEXT: Description: AEABI Non-Conformant
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-14.s b/test/tools/llvm-readobj/ARM/attribute-14.s
new file mode 100644
index 0000000..e0d8e46
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-14.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 14
+@CHECK: .eabi_attribute 6, 14
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 14
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v8
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-15.s b/test/tools/llvm-readobj/ARM/attribute-15.s
new file mode 100644
index 0000000..7877ce7
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-15.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_compatibility, 15, "Longer Corporation NaMe"
+@CHECK: .eabi_attribute 32, 15
+@CHECK-OBJ: Tag: 32
+@CHECK-OBJ-NEXT: Value: 15, Longer Corporation NaMe
+@CHECK-OBJ-NEXT: TagName: compatibility
+@CHECK-OBJ-NEXT: Description: AEABI Non-Conformant
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-2.s b/test/tools/llvm-readobj/ARM/attribute-2.s
new file mode 100644
index 0000000..21ee41f
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-2.s
@@ -0,0 +1,178 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 2
+@CHECK: .eabi_attribute 6, 2
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v4T
+
+.eabi_attribute Tag_THUMB_ISA_use, 2
+@CHECK: .eabi_attribute 9, 2
+@CHECK-OBJ: Tag: 9
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: THUMB_ISA_use
+@CHECK-OBJ-NEXT: Description: Thumb-2
+
+.eabi_attribute Tag_FP_arch, 2
+@CHECK: .eabi_attribute 10, 2
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: VFPv2
+
+.eabi_attribute Tag_WMMX_arch, 2
+@CHECK: .eabi_attribute 11, 2
+@CHECK-OBJ: Tag: 11
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: WMMX_arch
+@CHECK-OBJ-NEXT: Description: WMMXv2
+
+.eabi_attribute Tag_Advanced_SIMD_arch, 2
+@CHECK: .eabi_attribute 12, 2
+@CHECK-OBJ: Tag: 12
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: Advanced_SIMD_arch
+@CHECK-OBJ-NEXT: Description: NEONv2+FMA
+
+.eabi_attribute Tag_PCS_config, 2
+@CHECK: .eabi_attribute 13, 2
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Linux Application
+
+.eabi_attribute Tag_ABI_PCS_R9_use, 2
+@CHECK: .eabi_attribute 14, 2
+@CHECK-OBJ: Tag: 14
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_R9_use
+@CHECK-OBJ-NEXT: Description: TLS
+
+.eabi_attribute Tag_ABI_PCS_RW_data, 2
+@CHECK: .eabi_attribute 15, 2
+@CHECK-OBJ: Tag: 15
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RW_data
+@CHECK-OBJ-NEXT: Description: SB-relative
+
+.eabi_attribute Tag_ABI_PCS_RO_data, 2
+@CHECK: .eabi_attribute 16, 2
+@CHECK-OBJ: Tag: 16
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RO_data
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_PCS_GOT_use, 2
+@CHECK: .eabi_attribute 17, 2
+@CHECK-OBJ: Tag: 17
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_GOT_use
+@CHECK-OBJ-NEXT: Description: GOT-Indirect
+
+.eabi_attribute Tag_ABI_PCS_wchar_t, 2
+@CHECK: .eabi_attribute 18, 2
+@CHECK-OBJ: Tag: 18
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_wchar_t
+@CHECK-OBJ-NEXT: Description: 2-byte
+
+.eabi_attribute Tag_ABI_FP_denormal, 2
+@CHECK: .eabi_attribute 20, 2
+@CHECK-OBJ: Tag: 20
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_FP_denormal
+@CHECK-OBJ-NEXT: Description: Sign Only
+
+.eabi_attribute Tag_ABI_FP_number_model, 2
+@CHECK: .eabi_attribute 23, 2
+@CHECK-OBJ: Tag: 23
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_FP_number_model
+@CHECK-OBJ-NEXT: Description: RTABI
+
+.eabi_attribute Tag_ABI_align_needed, 2
+@CHECK: .eabi_attribute 24, 2
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 4-byte alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 2
+@CHECK: .eabi_attribute 25, 2
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte data and code alignment
+
+.eabi_attribute Tag_ABI_enum_size, 2
+@CHECK: .eabi_attribute 26, 2
+@CHECK-OBJ: Tag: 26
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_enum_size
+@CHECK-OBJ-NEXT: Description: Int32
+
+.eabi_attribute Tag_ABI_HardFP_use, 2
+@CHECK: .eabi_attribute 27, 2
+@CHECK-OBJ: Tag: 27
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_HardFP_use
+@CHECK-OBJ-NEXT: Description: Reserved
+
+.eabi_attribute Tag_ABI_VFP_args, 2
+@CHECK: .eabi_attribute 28, 2
+@CHECK-OBJ: Tag: 28
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_VFP_args
+@CHECK-OBJ-NEXT: Description: Custom
+
+.eabi_attribute Tag_ABI_WMMX_args, 2
+@CHECK: .eabi_attribute 29, 2
+@CHECK-OBJ: Tag: 29
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_WMMX_args
+@CHECK-OBJ-NEXT: Description: Custom
+
+.eabi_attribute Tag_ABI_optimization_goals, 2
+@CHECK: .eabi_attribute 30, 2
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: Aggressive Speed
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 2
+@CHECK: .eabi_attribute 31, 2
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: Aggressive Speed
+
+.eabi_attribute Tag_compatibility, 2, ""
+@CHECK: .eabi_attribute 32, 2
+@CHECK-OBJ: Tag: 32
+@CHECK-OBJ-NEXT: Value: 2,
+@CHECK-OBJ-NEXT: TagName: compatibility
+@CHECK-OBJ-NEXT: Description: AEABI Non-Conformant
+
+.eabi_attribute Tag_ABI_FP_16bit_format, 2
+@CHECK: .eabi_attribute 38, 2
+@CHECK-OBJ: Tag: 38
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: ABI_FP_16bit_format
+@CHECK-OBJ-NEXT: Description: VFPv3
+
+.eabi_attribute Tag_DIV_use, 2
+@CHECK: .eabi_attribute 44, 2
+@CHECK-OBJ: Tag: 44
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: DIV_use
+@CHECK-OBJ-NEXT: Description: Permitted
+
+.eabi_attribute Tag_Virtualization_use, 2
+@CHECK: .eabi_attribute 68, 2
+@CHECK-OBJ: Tag: 68
+@CHECK-OBJ-NEXT: Value: 2
+@CHECK-OBJ-NEXT: TagName: Virtualization_use
+@CHECK-OBJ-NEXT: Description: Virtualization Extensions
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-3.s b/test/tools/llvm-readobj/ARM/attribute-3.s
new file mode 100644
index 0000000..ad2de25
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-3.s
@@ -0,0 +1,108 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 3
+@CHECK: .eabi_attribute 6, 3
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v5T
+
+.eabi_attribute Tag_FP_arch, 3
+@CHECK: .eabi_attribute 10, 3
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: VFPv3
+
+.eabi_attribute Tag_Advanced_SIMD_arch, 3
+@CHECK: .eabi_attribute 12, 3
+@CHECK-OBJ: Tag: 12
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: Advanced_SIMD_arch
+@CHECK-OBJ-NEXT: Description: ARMv8-a NEON
+
+.eabi_attribute Tag_PCS_config, 3
+@CHECK: .eabi_attribute 13, 3
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Linux DSO
+
+.eabi_attribute Tag_ABI_PCS_R9_use, 3
+@CHECK: .eabi_attribute 14, 3
+@CHECK-OBJ: Tag: 14
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_R9_use
+@CHECK-OBJ-NEXT: Description: Unused
+
+.eabi_attribute Tag_ABI_PCS_RW_data, 3
+@CHECK: .eabi_attribute 15, 3
+@CHECK-OBJ: Tag: 15
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_RW_data
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_FP_number_model, 3
+@CHECK: .eabi_attribute 23, 3
+@CHECK-OBJ: Tag: 23
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_FP_number_model
+@CHECK-OBJ-NEXT: Description: IEEE-754
+
+.eabi_attribute Tag_ABI_align_needed, 3
+@CHECK: .eabi_attribute 24, 3
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: Reserved
+
+.eabi_attribute Tag_ABI_align_preserved, 3
+@CHECK: .eabi_attribute 25, 3
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: Reserved
+
+.eabi_attribute Tag_ABI_enum_size, 3
+@CHECK: .eabi_attribute 26, 3
+@CHECK-OBJ: Tag: 26
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_enum_size
+@CHECK-OBJ-NEXT: Description: External Int32
+
+.eabi_attribute Tag_ABI_HardFP_use, 3
+@CHECK: .eabi_attribute 27, 3
+@CHECK-OBJ: Tag: 27
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_HardFP_use
+@CHECK-OBJ-NEXT: Description: Tag_FP_arch (deprecated)
+
+.eabi_attribute Tag_ABI_VFP_args, 3
+@CHECK: .eabi_attribute 28, 3
+@CHECK-OBJ: Tag: 28
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_VFP_args
+@CHECK-OBJ-NEXT: Description: Not Permitted
+
+.eabi_attribute Tag_ABI_optimization_goals, 3
+@CHECK: .eabi_attribute 30, 3
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: Size
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 3
+@CHECK: .eabi_attribute 31, 3
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: Size
+
+.eabi_attribute Tag_Virtualization_use, 3
+@CHECK: .eabi_attribute 68, 3
+@CHECK-OBJ: Tag: 68
+@CHECK-OBJ-NEXT: Value: 3
+@CHECK-OBJ-NEXT: TagName: Virtualization_use
+@CHECK-OBJ-NEXT: Description: TrustZone + Virtualization Extensions
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-4.s b/test/tools/llvm-readobj/ARM/attribute-4.s
new file mode 100644
index 0000000..dd0a4a6
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-4.s
@@ -0,0 +1,59 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 4
+@CHECK: .eabi_attribute 6, 4
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v5TE
+
+.eabi_attribute Tag_FP_arch, 4
+@CHECK: .eabi_attribute 10, 4
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: VFPv3-D16
+
+.eabi_attribute Tag_PCS_config, 4
+@CHECK: .eabi_attribute 13, 4
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Palm OS 2004
+
+.eabi_attribute Tag_ABI_PCS_wchar_t, 4
+@CHECK: .eabi_attribute 18, 4
+@CHECK-OBJ: Tag: 18
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: ABI_PCS_wchar_t
+@CHECK-OBJ-NEXT: Description: 4-byte
+
+.eabi_attribute Tag_ABI_align_needed, 4
+@CHECK: .eabi_attribute 24, 4
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 16-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 4
+@CHECK: .eabi_attribute 25, 4
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 16-byte data alignment
+
+.eabi_attribute Tag_ABI_optimization_goals, 4
+@CHECK: .eabi_attribute 30, 4
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: Aggressive Size
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 4
+@CHECK: .eabi_attribute 31, 4
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 4
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: Aggressive Size
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-5.s b/test/tools/llvm-readobj/ARM/attribute-5.s
new file mode 100644
index 0000000..97e37e2
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-5.s
@@ -0,0 +1,52 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 5
+@CHECK: .eabi_attribute 6, 5
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v5TEJ
+
+.eabi_attribute Tag_FP_arch, 5
+@CHECK: .eabi_attribute 10, 5
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: VFPv4
+
+.eabi_attribute Tag_PCS_config, 5
+@CHECK: .eabi_attribute 13, 5
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Reserved (Palm OS)
+
+.eabi_attribute Tag_ABI_align_needed, 5
+@CHECK: .eabi_attribute 24, 5
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 32-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 5
+@CHECK: .eabi_attribute 25, 5
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 32-byte data alignment
+
+.eabi_attribute Tag_ABI_optimization_goals, 5
+@CHECK: .eabi_attribute 30, 5
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: Debugging
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 5
+@CHECK: .eabi_attribute 31, 5
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 5
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: Accuracy
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-6.s b/test/tools/llvm-readobj/ARM/attribute-6.s
new file mode 100644
index 0000000..8da7b99
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-6.s
@@ -0,0 +1,52 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 6
+@CHECK: .eabi_attribute 6, 6
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v6
+
+.eabi_attribute Tag_FP_arch, 6
+@CHECK: .eabi_attribute 10, 6
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: VFPv4-D16
+
+.eabi_attribute Tag_PCS_config, 6
+@CHECK: .eabi_attribute 13, 6
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Symbian OS 2004
+
+.eabi_attribute Tag_ABI_align_needed, 6
+@CHECK: .eabi_attribute 24, 6
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 64-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 6
+@CHECK: .eabi_attribute 25, 6
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 64-byte data alignment
+
+.eabi_attribute Tag_ABI_optimization_goals, 6
+@CHECK: .eabi_attribute 30, 6
+@CHECK-OBJ: Tag: 30
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: ABI_optimization_goals
+@CHECK-OBJ-NEXT: Description: Best Debugging
+
+.eabi_attribute Tag_ABI_FP_optimization_goals, 6
+@CHECK: .eabi_attribute 31, 6
+@CHECK-OBJ: Tag: 31
+@CHECK-OBJ-NEXT: Value: 6
+@CHECK-OBJ-NEXT: TagName: ABI_FP_optimization_goals
+@CHECK-OBJ-NEXT: Description: Best Accuracy
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-7.s b/test/tools/llvm-readobj/ARM/attribute-7.s
new file mode 100644
index 0000000..2fd1b20
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-7.s
@@ -0,0 +1,38 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 7
+@CHECK: .eabi_attribute 6, 7
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 7
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v6KZ
+
+.eabi_attribute Tag_FP_arch, 7
+@CHECK: .eabi_attribute 10, 7
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 7
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: ARMv8-a FP
+
+.eabi_attribute Tag_PCS_config, 7
+@CHECK: .eabi_attribute 13, 7
+@CHECK-OBJ: Tag: 13
+@CHECK-OBJ-NEXT: Value: 7
+@CHECK-OBJ-NEXT: TagName: PCS_config
+@CHECK-OBJ-NEXT: Description: Reserved (Symbian OS)
+
+.eabi_attribute Tag_ABI_align_needed, 7
+@CHECK: .eabi_attribute 24, 7
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 7
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 128-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 7
+@CHECK: .eabi_attribute 25, 7
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 7
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 128-byte data alignment
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-8.s b/test/tools/llvm-readobj/ARM/attribute-8.s
new file mode 100644
index 0000000..ac3e3a0
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-8.s
@@ -0,0 +1,31 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 8
+@CHECK: .eabi_attribute 6, 8
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 8
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v6T2
+
+.eabi_attribute Tag_FP_arch, 8
+@CHECK: .eabi_attribute 10, 8
+@CHECK-OBJ: Tag: 10
+@CHECK-OBJ-NEXT: Value: 8
+@CHECK-OBJ-NEXT: TagName: FP_arch
+@CHECK-OBJ-NEXT: Description: ARMv8-a FP-D16
+
+.eabi_attribute Tag_ABI_align_needed, 8
+@CHECK: .eabi_attribute 24, 8
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 8
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 256-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 8
+@CHECK: .eabi_attribute 25, 8
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 8
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 256-byte data alignment
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-9.s b/test/tools/llvm-readobj/ARM/attribute-9.s
new file mode 100644
index 0000000..68f6ccb
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-9.s
@@ -0,0 +1,24 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch, 9
+@CHECK: .eabi_attribute 6, 9
+@CHECK-OBJ: Tag: 6
+@CHECK-OBJ-NEXT: Value: 9
+@CHECK-OBJ-NEXT: TagName: CPU_arch
+@CHECK-OBJ-NEXT: Description: ARM v6K
+
+.eabi_attribute Tag_ABI_align_needed, 9
+@CHECK: .eabi_attribute 24, 9
+@CHECK-OBJ: Tag: 24
+@CHECK-OBJ-NEXT: Value: 9
+@CHECK-OBJ-NEXT: TagName: ABI_align_needed
+@CHECK-OBJ-NEXT: Description: 8-byte alignment, 512-byte extended alignment
+
+.eabi_attribute Tag_ABI_align_preserved, 9
+@CHECK: .eabi_attribute 25, 9
+@CHECK-OBJ: Tag: 25
+@CHECK-OBJ-NEXT: Value: 9
+@CHECK-OBJ-NEXT: TagName: ABI_align_preserved
+@CHECK-OBJ-NEXT: Description: 8-byte stack alignment, 512-byte data alignment
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-A.s b/test/tools/llvm-readobj/ARM/attribute-A.s
new file mode 100644
index 0000000..720f56e
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-A.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch_profile, 'A'
+@CHECK: .eabi_attribute 7, 65
+@CHECK-OBJ: Tag: 7
+@CHECK-OBJ-NEXT: Value: 65
+@CHECK-OBJ-NEXT: TagName: CPU_arch_profile
+@CHECK-OBJ-NEXT: Description: Application
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-M.s b/test/tools/llvm-readobj/ARM/attribute-M.s
new file mode 100644
index 0000000..7d1e1ef
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-M.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch_profile, 'M'
+@CHECK: .eabi_attribute 7, 77
+@CHECK-OBJ: Tag: 7
+@CHECK-OBJ-NEXT: Value: 77
+@CHECK-OBJ-NEXT: TagName: CPU_arch_profile
+@CHECK-OBJ-NEXT: Description: Microcontroller
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-R.s b/test/tools/llvm-readobj/ARM/attribute-R.s
new file mode 100644
index 0000000..096d557
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-R.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch_profile, 'R'
+@CHECK: .eabi_attribute 7, 82
+@CHECK-OBJ: Tag: 7
+@CHECK-OBJ-NEXT: Value: 82
+@CHECK-OBJ-NEXT: TagName: CPU_arch_profile
+@CHECK-OBJ-NEXT: Description: Real-time
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-S.s b/test/tools/llvm-readobj/ARM/attribute-S.s
new file mode 100644
index 0000000..cb90958
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-S.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_CPU_arch_profile, 'S'
+@CHECK: .eabi_attribute 7, 83
+@CHECK-OBJ: Tag: 7
+@CHECK-OBJ-NEXT: Value: 83
+@CHECK-OBJ-NEXT: TagName: CPU_arch_profile
+@CHECK-OBJ-NEXT: Description: Classic
+
diff --git a/test/tools/llvm-readobj/ARM/attribute-conformance-1.s b/test/tools/llvm-readobj/ARM/attribute-conformance-1.s
new file mode 100644
index 0000000..daa44c1
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-conformance-1.s
@@ -0,0 +1,8 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_conformance, "0"
+@CHECK: .eabi_attribute 67, "0"
+@CHECK-OBJ: Tag: 67
+@CHECK-OBJ-NEXT: TagName: conformance
+@CHECK-OBJ-NEXT: Value: 0
diff --git a/test/tools/llvm-readobj/ARM/attribute-conformance-2.s b/test/tools/llvm-readobj/ARM/attribute-conformance-2.s
new file mode 100644
index 0000000..47c83c0
--- /dev/null
+++ b/test/tools/llvm-readobj/ARM/attribute-conformance-2.s
@@ -0,0 +1,8 @@
+@ RUN: llvm-mc -triple armv7-elf -filetype asm -o - %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
+@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s --check-prefix=CHECK-OBJ
+.eabi_attribute Tag_conformance, "A.long--non numeric oddity...!!"
+@CHECK: .eabi_attribute 67, "A.long--non numeric oddity...!!"
+@CHECK-OBJ: Tag: 67
+@CHECK-OBJ-NEXT: TagName: conformance
+@CHECK-OBJ-NEXT: Value: A.long--non numeric oddity...!!
diff --git a/test/tools/llvm-readobj/ARM/attributes.s b/test/tools/llvm-readobj/ARM/attributes.s
deleted file mode 100644
index 594bab8..0000000
--- a/test/tools/llvm-readobj/ARM/attributes.s
+++ /dev/null
@@ -1,287 +0,0 @@
-@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s \
-@ RUN: | llvm-readobj -arm-attributes - | FileCheck %s
-
- .syntax unified
-
- .cpu cortex-a8
- .fpu neon
-
- .eabi_attribute Tag_CPU_raw_name, "Cortex-A9"
- .eabi_attribute Tag_CPU_name, "cortex-a9"
- .eabi_attribute Tag_CPU_arch, 10
- .eabi_attribute Tag_CPU_arch_profile, 'A'
- .eabi_attribute Tag_ARM_ISA_use, 0
- .eabi_attribute Tag_THUMB_ISA_use, 2
- .eabi_attribute Tag_FP_arch, 3
- .eabi_attribute Tag_WMMX_arch, 0
- .eabi_attribute Tag_Advanced_SIMD_arch, 1
- .eabi_attribute Tag_PCS_config, 2
- .eabi_attribute Tag_ABI_PCS_R9_use, 0
- .eabi_attribute Tag_ABI_PCS_RW_data, 0
- .eabi_attribute Tag_ABI_PCS_RO_data, 0
- .eabi_attribute Tag_ABI_PCS_GOT_use, 0
- .eabi_attribute Tag_ABI_PCS_wchar_t, 4
- .eabi_attribute Tag_ABI_FP_rounding, 1
- .eabi_attribute Tag_ABI_FP_denormal, 2
- .eabi_attribute Tag_ABI_FP_exceptions, 1
- .eabi_attribute Tag_ABI_FP_user_exceptions, 1
- .eabi_attribute Tag_ABI_FP_number_model, 3
- .eabi_attribute Tag_ABI_align_needed, 1
- .eabi_attribute Tag_ABI_align_preserved, 2
- .eabi_attribute Tag_ABI_enum_size, 3
- .eabi_attribute Tag_ABI_HardFP_use, 0
- .eabi_attribute Tag_ABI_VFP_args, 1
- .eabi_attribute Tag_ABI_WMMX_args, 0
- .eabi_attribute Tag_ABI_optimization_goals, 2
- .eabi_attribute Tag_ABI_FP_optimization_goals, 2
- .eabi_attribute Tag_compatibility, 1
- .eabi_attribute Tag_compatibility, 1, "aeabi"
- .eabi_attribute Tag_CPU_unaligned_access, 0
- .eabi_attribute Tag_FP_HP_extension, 0
- .eabi_attribute Tag_ABI_FP_16bit_format, 0
- .eabi_attribute Tag_MPextension_use, 0
- .eabi_attribute Tag_DIV_use, 0
- .eabi_attribute Tag_nodefaults, 0
- .eabi_attribute Tag_also_compatible_with, "gnu"
- .eabi_attribute Tag_T2EE_use, 0
- .eabi_attribute Tag_conformance, "2.09"
- .eabi_attribute Tag_Virtualization_use, 0
-
-@ CHECK: BuildAttributes {
-@ CHECK: Section 1 {
-@ CHECK: Tag: Tag_File (0x1)
-@ CHECK: FileAttributes {
-@ CHECK: Attribute {
-@ CHECK: Tag: 4
-@ CHECK: TagName: CPU_raw_name
-@ CHECK: Value: CORTEX-A9
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 5
-@ CHECK: TagName: CPU_name
-@ CHECK: Value: CORTEX-A9
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 6
-@ CHECK: Value: 10
-@ CHECK: TagName: CPU_arch
-@ CHECK: Description: ARM v7
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 7
-@ CHECK: Value: 65
-@ CHECK: TagName: CPU_arch_profile
-@ CHECK: Description: Application
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 8
-@ CHECK: Value: 0
-@ CHECK: TagName: ARM_ISA_use
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 9
-@ CHECK: Value: 2
-@ CHECK: TagName: THUMB_ISA_use
-@ CHECK: Description: Thumb-2
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 10
-@ CHECK: Value: 3
-@ CHECK: TagName: FP_arch
-@ CHECK: Description: VFPv3
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 11
-@ CHECK: Value: 0
-@ CHECK: TagName: WMMX_arch
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 12
-@ CHECK: Value: 1
-@ CHECK: TagName: Advanced_SIMD_arch
-@ CHECK: Description: NEONv1
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 13
-@ CHECK: Value: 2
-@ CHECK: TagName: PCS_config
-@ CHECK: Description: Linux Application
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 14
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_PCS_R9_use
-@ CHECK: Description: v6
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 15
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_PCS_RW_data
-@ CHECK: Description: Absolute
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 16
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_PCS_RO_data
-@ CHECK: Description: Absolute
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 17
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_PCS_GOT_use
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 18
-@ CHECK: Value: 4
-@ CHECK: TagName: ABI_PCS_wchar_t
-@ CHECK: Description: 4-byte
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 19
-@ CHECK: Value: 1
-@ CHECK: TagName: ABI_FP_rounding
-@ CHECK: Description: Runtime
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 20
-@ CHECK: Value: 2
-@ CHECK: TagName: ABI_FP_denormal
-@ CHECK: Description: Sign Only
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 21
-@ CHECK: Value: 1
-@ CHECK: TagName: ABI_FP_exceptions
-@ CHECK: Description: IEEE-754
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 22
-@ CHECK: Value: 1
-@ CHECK: TagName: ABI_FP_user_exceptions
-@ CHECK: Description: IEEE-754
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 23
-@ CHECK: Value: 3
-@ CHECK: TagName: ABI_FP_number_model
-@ CHECK: Description: IEEE-754
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 24
-@ CHECK: Value: 1
-@ CHECK: TagName: ABI_align_needed
-@ CHECK: Description: 8-byte alignment
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 25
-@ CHECK: Value: 2
-@ CHECK: TagName: ABI_align_preserved
-@ CHECK: Description: 8-byte data and code alignment
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 26
-@ CHECK: Value: 3
-@ CHECK: TagName: ABI_enum_size
-@ CHECK: Description: External Int32
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 27
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_HardFP_use
-@ CHECK: Description: Tag_FP_arch
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 28
-@ CHECK: Value: 1
-@ CHECK: TagName: ABI_VFP_args
-@ CHECK: Description: AAPCS VFP
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 29
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_WMMX_args
-@ CHECK: Description: AAPCS
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 30
-@ CHECK: Value: 2
-@ CHECK: TagName: ABI_optimization_goals
-@ CHECK: Description: Aggressive Speed
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 31
-@ CHECK: Value: 2
-@ CHECK: TagName: ABI_FP_optimization_goals
-@ CHECK: Description: Aggressive Speed
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 32
-@ CHECK: Value: 1, AEABI
-@ CHECK: TagName: compatibility
-@ CHECK: Description: AEABI Conformant
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 34
-@ CHECK: Value: 0
-@ CHECK: TagName: CPU_unaligned_access
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 36
-@ CHECK: Value: 0
-@ CHECK: TagName: FP_HP_extension
-@ CHECK: Description: If Available
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 38
-@ CHECK: Value: 0
-@ CHECK: TagName: ABI_FP_16bit_format
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 42
-@ CHECK: Value: 0
-@ CHECK: TagName: MPextension_use
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 44
-@ CHECK: Value: 0
-@ CHECK: TagName: DIV_use
-@ CHECK: Description: If Available
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 64
-@ CHECK: Value: 0
-@ CHECK: TagName: nodefaults
-@ CHECK: Description: Unspecified Tags UNDEFINED
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 65
-@ CHECK: TagName: also_compatible_with
-@ CHECK: Value: GNU
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 66
-@ CHECK: Value: 0
-@ CHECK: TagName: T2EE_use
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 67
-@ CHECK: TagName: conformance
-@ CHECK: Value: 2.09
-@ CHECK: }
-@ CHECK: Attribute {
-@ CHECK: Tag: 68
-@ CHECK: Value: 0
-@ CHECK: TagName: Virtualization_use
-@ CHECK: Description: Not Permitted
-@ CHECK: }
-@ CHECK: }
-@ CHECK: }
-@ CHECK: }
-
diff --git a/test/tools/llvm-readobj/Inputs/export-arm.dll b/test/tools/llvm-readobj/Inputs/export-arm.dll
new file mode 100755
index 0000000..a555562
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/export-arm.dll
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/export-x64.dll b/test/tools/llvm-readobj/Inputs/export-x64.dll
new file mode 100755
index 0000000..10b14e8
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/export-x64.dll
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/export-x86.dll b/test/tools/llvm-readobj/Inputs/export-x86.dll
new file mode 100755
index 0000000..9efcd31
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/export-x86.dll
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/relocs-no-symtab.obj.coff-i386 b/test/tools/llvm-readobj/Inputs/relocs-no-symtab.obj.coff-i386
new file mode 100644
index 0000000..5882daf
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/relocs-no-symtab.obj.coff-i386
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64 b/test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64
index a1034cb..658b0ea 100644
--- a/test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64
+++ b/test/tools/llvm-readobj/Inputs/relocs.obj.elf-aarch64
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/relocs.obj.elf-arm b/test/tools/llvm-readobj/Inputs/relocs.obj.elf-arm
index 908507d..206c933 100644
--- a/test/tools/llvm-readobj/Inputs/relocs.obj.elf-arm
+++ b/test/tools/llvm-readobj/Inputs/relocs.obj.elf-arm
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/relocs.py b/test/tools/llvm-readobj/Inputs/relocs.py
index ffddf3d..62dbd62 100644
--- a/test/tools/llvm-readobj/Inputs/relocs.py
+++ b/test/tools/llvm-readobj/Inputs/relocs.py
@@ -591,7 +591,7 @@ class Relocs_Elf_PPC64(Enum):
R_PPC64_TLSLD = 108
class Relocs_Elf_AArch64(Enum):
- R_AARCH64_NONE = 0x100
+ R_AARCH64_NONE = 0
R_AARCH64_ABS64 = 0x101
R_AARCH64_ABS32 = 0x102
R_AARCH64_ABS16 = 0x103
@@ -611,6 +611,7 @@ class Relocs_Elf_AArch64(Enum):
R_AARCH64_LD_PREL_LO19 = 0x111
R_AARCH64_ADR_PREL_LO21 = 0x112
R_AARCH64_ADR_PREL_PG_HI21 = 0x113
+ R_AARCH64_ADR_PREL_PG_HI21_NC = 0x114
R_AARCH64_ADD_ABS_LO12_NC = 0x115
R_AARCH64_LDST8_ABS_LO12_NC = 0x116
R_AARCH64_TSTBR14 = 0x117
@@ -620,11 +621,39 @@ class Relocs_Elf_AArch64(Enum):
R_AARCH64_LDST16_ABS_LO12_NC = 0x11c
R_AARCH64_LDST32_ABS_LO12_NC = 0x11d
R_AARCH64_LDST64_ABS_LO12_NC = 0x11e
+ R_AARCH64_MOVW_PREL_G0 = 0x11f
+ R_AARCH64_MOVW_PREL_G0_NC = 0x120
+ R_AARCH64_MOVW_PREL_G1 = 0x121
+ R_AARCH64_MOVW_PREL_G1_NC = 0x122
+ R_AARCH64_MOVW_PREL_G2 = 0x123
+ R_AARCH64_MOVW_PREL_G2_NC = 0x124
+ R_AARCH64_MOVW_PREL_G3 = 0x125
R_AARCH64_LDST128_ABS_LO12_NC = 0x12b
+ R_AARCH64_MOVW_GOTOFF_G0 = 0x12c
+ R_AARCH64_MOVW_GOTOFF_G0_NC = 0x12d
+ R_AARCH64_MOVW_GOTOFF_G1 = 0x12e
+ R_AARCH64_MOVW_GOTOFF_G1_NC = 0x12f
+ R_AARCH64_MOVW_GOTOFF_G2 = 0x130
+ R_AARCH64_MOVW_GOTOFF_G2_NC = 0x131
+ R_AARCH64_MOVW_GOTOFF_G3 = 0x132
R_AARCH64_GOTREL64 = 0x133
R_AARCH64_GOTREL32 = 0x134
+ R_AARCH64_GOT_LD_PREL19 = 0x135
+ R_AARCH64_LD64_GOTOFF_LO15 = 0x136
R_AARCH64_ADR_GOT_PAGE = 0x137
R_AARCH64_LD64_GOT_LO12_NC = 0x138
+ R_AARCH64_LD64_GOTPAGE_LO15 = 0x139
+ R_AARCH64_TLSGD_ADR_PREL21 = 0x200
+ R_AARCH64_TLSGD_ADR_PAGE21 = 0x201
+ R_AARCH64_TLSGD_ADD_LO12_NC = 0x202
+ R_AARCH64_TLSGD_MOVW_G1 = 0x203
+ R_AARCH64_TLSGD_MOVW_G0_NC = 0x204
+ R_AARCH64_TLSLD_ADR_PREL21 = 0x205
+ R_AARCH64_TLSLD_ADR_PAGE21 = 0x206
+ R_AARCH64_TLSLD_ADD_LO12_NC = 0x207
+ R_AARCH64_TLSLD_MOVW_G1 = 0x208
+ R_AARCH64_TLSLD_MOVW_G0_NC = 0x209
+ R_AARCH64_TLSLD_LD_PREL19 = 0x20a
R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 0x20b
R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 0x20c
R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 0x20d
@@ -662,10 +691,20 @@ class Relocs_Elf_AArch64(Enum):
R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 0x22d
R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 0x22e
R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 0x22f
- R_AARCH64_TLSDESC_ADR_PAGE = 0x232
+ R_AARCH64_TLSDESC_LD_PREL19 = 0x230
+ R_AARCH64_TLSDESC_ADR_PREL21 = 0x231
+ R_AARCH64_TLSDESC_ADR_PAGE21 = 0x232
R_AARCH64_TLSDESC_LD64_LO12_NC = 0x233
R_AARCH64_TLSDESC_ADD_LO12_NC = 0x234
+ R_AARCH64_TLSDESC_OFF_G1 = 0x235
+ R_AARCH64_TLSDESC_OFF_G0_NC = 0x236
+ R_AARCH64_TLSDESC_LDR = 0x237
+ R_AARCH64_TLSDESC_ADD = 0x238
R_AARCH64_TLSDESC_CALL = 0x239
+ R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 0x23a
+ R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 0x23b
+ R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 0x23c
+ R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 0x23d
R_AARCH64_COPY = 0x400
R_AARCH64_GLOB_DAT = 0x401
R_AARCH64_JUMP_SLOT = 0x402
@@ -808,6 +847,7 @@ class Relocs_Elf_ARM(Enum):
R_ARM_ME_TOO = 0x80
R_ARM_THM_TLS_DESCSEQ16 = 0x81
R_ARM_THM_TLS_DESCSEQ32 = 0x82
+ R_ARM_IRELATIVE = 0xa0
class Relocs_Elf_Mips(Enum):
R_MIPS_NONE = 0
diff --git a/test/tools/llvm-readobj/Inputs/trivial.exe.coff-arm b/test/tools/llvm-readobj/Inputs/trivial.exe.coff-arm
new file mode 100755
index 0000000..121d820
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/trivial.exe.coff-arm
Binary files differ
diff --git a/test/tools/llvm-readobj/codeview-linetables.test b/test/tools/llvm-readobj/codeview-linetables.test
index e5e344b..b2acee1 100644
--- a/test/tools/llvm-readobj/codeview-linetables.test
+++ b/test/tools/llvm-readobj/codeview-linetables.test
@@ -18,16 +18,16 @@
; z();
; }
; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively.
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \
RUN: | FileCheck %s -check-prefix MFUN32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2013-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-i368 \
RUN: | FileCheck %s -check-prefix MFUN32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \
RUN: | FileCheck %s -check-prefix MFUN64
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2013-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-x86_64 \
RUN: | FileCheck %s -check-prefix MFUN64
-MFUN32: CodeViewLineTables [
+MFUN32: CodeViewDebugInfo [
MFUN32-NEXT: Magic: 0x4
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF1
@@ -136,7 +136,7 @@ MFUN32-NEXT: ]
MFUN32-NEXT: ]
MFUN32-NEXT: ]
-MFUN64: CodeViewLineTables [
+MFUN64: CodeViewDebugInfo [
MFUN64-NEXT: Magic: 0x4
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF1
@@ -248,16 +248,16 @@ MFUN64-NEXT: ]
; g();
; }
; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively.
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2012-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-i368 \
RUN: | FileCheck %s -check-prefix MFILE32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2013-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-i368 \
RUN: | FileCheck %s -check-prefix MFILE32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \
RUN: | FileCheck %s -check-prefix MFILE64
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2013-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-x86_64 \
RUN: | FileCheck %s -check-prefix MFILE64
-MFILE32: CodeViewLineTables [
+MFILE32: CodeViewDebugInfo [
MFILE32-NEXT: Magic: 0x4
MFILE32-NEXT: Subsection [
MFILE32-NEXT: Type: 0xF1
@@ -317,7 +317,7 @@ MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: ]
-MFILE64: CodeViewLineTables [
+MFILE64: CodeViewDebugInfo [
MFILE64-NEXT: Magic: 0x4
MFILE64-NEXT: Subsection [
MFILE64-NEXT: Type: 0xF1
@@ -387,9 +387,9 @@ MFILE64-NEXT: ]
; return 0;
; }
; using 32-version of CL v17.00.61030 and v18.00.21005.1 respectively.
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/comdat-function-linetables.obj.coff-2012-i386 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2012-i386 \
RUN: | FileCheck %s -check-prefix MCOMDAT
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/comdat-function-linetables.obj.coff-2013-i386 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2013-i386 \
RUN: | FileCheck %s -check-prefix MCOMDAT
MCOMDAT: ProcStart {
diff --git a/test/tools/llvm-readobj/coff-arm-baserelocs.test b/test/tools/llvm-readobj/coff-arm-baserelocs.test
new file mode 100644
index 0000000..c0febd7
--- /dev/null
+++ b/test/tools/llvm-readobj/coff-arm-baserelocs.test
@@ -0,0 +1,7 @@
+# RUN: llvm-readobj -coff-basereloc %p/Inputs/trivial.exe.coff-arm | FileCheck %s
+
+# CHECK: Entry {
+# CHECK: Type: ARM_MOV32(T)
+# CHECK: Address: 0x9390
+# CHECK: }
+
diff --git a/test/tools/llvm-readobj/coff-exports.test b/test/tools/llvm-readobj/coff-exports.test
new file mode 100644
index 0000000..54b42fe
--- /dev/null
+++ b/test/tools/llvm-readobj/coff-exports.test
@@ -0,0 +1,11 @@
+RUN: llvm-readobj -coff-exports %p/Inputs/export-x86.dll | FileCheck %s -check-prefix CHECK -check-prefix CHECK-X86
+RUN: llvm-readobj -coff-exports %p/Inputs/export-x64.dll | FileCheck %s -check-prefix CHECK -check-prefix CHECK-X64
+RUN: llvm-readobj -coff-exports %p/Inputs/export-arm.dll | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM
+
+CHECK: Export {
+CHECK: Ordinal: 1
+CHECK: Name: function
+CHECK-X86: RVA: 0x1000
+CHECK-X64: RVA: 0x1000
+CHECK-ARM: RVA: 0x1001
+CHECK: }
diff --git a/test/tools/llvm-readobj/reloc-types.test b/test/tools/llvm-readobj/reloc-types.test
index 20c2538..36e2f70 100644
--- a/test/tools/llvm-readobj/reloc-types.test
+++ b/test/tools/llvm-readobj/reloc-types.test
@@ -149,7 +149,7 @@ ELF-PPC64: Type: R_PPC64_GOT_TPREL16_HA (90)
ELF-PPC64: Type: R_PPC64_TLSGD (107)
ELF-PPC64: Type: R_PPC64_TLSLD (108)
-ELF-AARCH64: Type: R_AARCH64_NONE (256)
+ELF-AARCH64: Type: R_AARCH64_NONE (0)
ELF-AARCH64: Type: R_AARCH64_ABS64 (257)
ELF-AARCH64: Type: R_AARCH64_ABS32 (258)
ELF-AARCH64: Type: R_AARCH64_ABS16 (259)
@@ -169,6 +169,7 @@ ELF-AARCH64: Type: R_AARCH64_MOVW_SABS_G2 (272)
ELF-AARCH64: Type: R_AARCH64_LD_PREL_LO19 (273)
ELF-AARCH64: Type: R_AARCH64_ADR_PREL_LO21 (274)
ELF-AARCH64: Type: R_AARCH64_ADR_PREL_PG_HI21 (275)
+ELF-AARCH64: Type: R_AARCH64_ADR_PREL_PG_HI21_NC (276)
ELF-AARCH64: Type: R_AARCH64_ADD_ABS_LO12_NC (277)
ELF-AARCH64: Type: R_AARCH64_LDST8_ABS_LO12_NC (278)
ELF-AARCH64: Type: R_AARCH64_TSTBR14 (279)
@@ -178,11 +179,39 @@ ELF-AARCH64: Type: R_AARCH64_CALL26 (283)
ELF-AARCH64: Type: R_AARCH64_LDST16_ABS_LO12_NC (284)
ELF-AARCH64: Type: R_AARCH64_LDST32_ABS_LO12_NC (285)
ELF-AARCH64: Type: R_AARCH64_LDST64_ABS_LO12_NC (286)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G0 (287)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G0_NC (288)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G1 (289)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G1_NC (290)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G2 (291)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G2_NC (292)
+ELF-AARCH64: Type: R_AARCH64_MOVW_PREL_G3 (293)
ELF-AARCH64: Type: R_AARCH64_LDST128_ABS_LO12_NC (299)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G0 (300)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G0_NC (301)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G1 (302)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G1_NC (303)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G2 (304)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G2_NC (305)
+ELF-AARCH64: Type: R_AARCH64_MOVW_GOTOFF_G3 (306)
ELF-AARCH64: Type: R_AARCH64_GOTREL64 (307)
ELF-AARCH64: Type: R_AARCH64_GOTREL32 (308)
+ELF-AARCH64: Type: R_AARCH64_GOT_LD_PREL19 (309)
+ELF-AARCH64: Type: R_AARCH64_LD64_GOTOFF_LO15 (310)
ELF-AARCH64: Type: R_AARCH64_ADR_GOT_PAGE (311)
ELF-AARCH64: Type: R_AARCH64_LD64_GOT_LO12_NC (312)
+ELF-AARCH64: Type: R_AARCH64_LD64_GOTPAGE_LO15 (313)
+ELF-AARCH64: Type: R_AARCH64_TLSGD_ADR_PREL21 (512)
+ELF-AARCH64: Type: R_AARCH64_TLSGD_ADR_PAGE21 (513)
+ELF-AARCH64: Type: R_AARCH64_TLSGD_ADD_LO12_NC (514)
+ELF-AARCH64: Type: R_AARCH64_TLSGD_MOVW_G1 (515)
+ELF-AARCH64: Type: R_AARCH64_TLSGD_MOVW_G0_NC (516)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_ADR_PREL21 (517)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_ADR_PAGE21 (518)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_ADD_LO12_NC (519)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_MOVW_G1 (520)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_MOVW_G0_NC (521)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_LD_PREL19 (522)
ELF-AARCH64: Type: R_AARCH64_TLSLD_MOVW_DTPREL_G2 (523)
ELF-AARCH64: Type: R_AARCH64_TLSLD_MOVW_DTPREL_G1 (524)
ELF-AARCH64: Type: R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC (525)
@@ -220,10 +249,20 @@ ELF-AARCH64: Type: R_AARCH64_TLSLE_LDST32_TPREL_LO12 (556)
ELF-AARCH64: Type: R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC (557)
ELF-AARCH64: Type: R_AARCH64_TLSLE_LDST64_TPREL_LO12 (558)
ELF-AARCH64: Type: R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC (559)
-ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADR_PAGE (562)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_LD_PREL19 (560)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADR_PREL21 (561)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADR_PAGE21 (562)
ELF-AARCH64: Type: R_AARCH64_TLSDESC_LD64_LO12_NC (563)
ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADD_LO12_NC (564)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_OFF_G1 (565)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_OFF_G0_NC (566)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_LDR (567)
+ELF-AARCH64: Type: R_AARCH64_TLSDESC_ADD (568)
ELF-AARCH64: Type: R_AARCH64_TLSDESC_CALL (569)
+ELF-AARCH64: Type: R_AARCH64_TLSLE_LDST128_TPREL_LO12 (570)
+ELF-AARCH64: Type: R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC (571)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_LDST128_DTPREL_LO12 (572)
+ELF-AARCH64: Type: R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC (573)
ELF-AARCH64: Type: R_AARCH64_COPY (1024)
ELF-AARCH64: Type: R_AARCH64_GLOB_DAT (1025)
ELF-AARCH64: Type: R_AARCH64_JUMP_SLOT (1026)
@@ -364,6 +403,7 @@ ELF-ARM: Type: R_ARM_PRIVATE_15 (127)
ELF-ARM: Type: R_ARM_ME_TOO (128)
ELF-ARM: Type: R_ARM_THM_TLS_DESCSEQ16 (129)
ELF-ARM: Type: R_ARM_THM_TLS_DESCSEQ32 (130)
+ELF-ARM: Type: R_ARM_IRELATIVE (160)
ELF-MIPS: Type: R_MIPS_NONE (0)
ELF-MIPS: Type: R_MIPS_16 (1)
diff --git a/test/tools/llvm-readobj/relocations.test b/test/tools/llvm-readobj/relocations.test
index 222dcf1..2e11aa2 100644
--- a/test/tools/llvm-readobj/relocations.test
+++ b/test/tools/llvm-readobj/relocations.test
@@ -2,6 +2,8 @@ RUN: llvm-readobj -r %p/Inputs/trivial.obj.coff-i386 \
RUN: | FileCheck %s -check-prefix COFF
RUN: llvm-readobj -r %p/Inputs/bad-relocs.obj.coff-i386 \
RUN: | FileCheck %s -check-prefix BAD-COFF-RELOCS
+RUN: llvm-readobj -r %p/Inputs/relocs-no-symtab.obj.coff-i386 \
+RUN: | FileCheck %s -check-prefix BAD-COFF-RELOCS
RUN: llvm-readobj -r %p/Inputs/trivial.obj.elf-i386 \
RUN: | FileCheck %s -check-prefix ELF
RUN: llvm-readobj -r %p/Inputs/trivial.obj.macho-i386 \