summaryrefslogtreecommitdiff
path: root/test/Object
diff options
context:
space:
mode:
Diffstat (limited to 'test/Object')
-rw-r--r--test/Object/ARM/macho-data-in-code.test7
-rw-r--r--test/Object/Inputs/COFF/i386.yaml6
-rw-r--r--test/Object/Inputs/COFF/x86-64.yaml6
-rw-r--r--test/Object/Inputs/ELF/BE32.yaml6
-rw-r--r--test/Object/Inputs/ELF/BE64.yaml6
-rw-r--r--test/Object/Inputs/ELF/LE32.yaml6
-rw-r--r--test/Object/Inputs/ELF/LE64.yaml6
-rw-r--r--test/Object/Inputs/GNU.abin0 -> 4210 bytes
-rw-r--r--test/Object/Inputs/IsNAN.obin0 -> 2280 bytes
-rw-r--r--test/Object/Inputs/MacOSX.abin0 -> 4166 bytes
-rw-r--r--test/Object/Inputs/SVR4.abin0 -> 4214 bytes
-rw-r--r--test/Object/Inputs/archive-test.a-corrupt-symbol-tablebin0 -> 2792 bytes
-rw-r--r--test/Object/Inputs/archive-test.a-empty1
-rw-r--r--test/Object/Inputs/archive-test.a-gnu-minimal2
-rw-r--r--test/Object/Inputs/archive-test.a-gnu-no-symtab5
-rw-r--r--test/Object/Inputs/coff_archive_short.libbin0 -> 1336 bytes
-rw-r--r--test/Object/Inputs/corrupt-version.elf-x86_64bin0 -> 5200 bytes
-rw-r--r--test/Object/Inputs/corrupt.elf-x86-64bin0 -> 1024 bytes
-rwxr-xr-xtest/Object/Inputs/elf-reloc-no-sym.x86_64bin0 -> 1768 bytes
-rw-r--r--test/Object/Inputs/evenlen1
-rw-r--r--test/Object/Inputs/macho-data-in-code.macho-thumbv7bin0 -> 680 bytes
-rwxr-xr-xtest/Object/Inputs/macho-universal.x86_64.i386bin0 -> 16624 bytes
-rw-r--r--test/Object/Inputs/oddlen1
-rwxr-xr-xtest/Object/Inputs/program-headers.mipsbin0 -> 648 bytes
-rwxr-xr-xtest/Object/Inputs/trivial-executable-test.macho-x86-64bin0 -> 8512 bytes
-rw-r--r--test/Object/Inputs/trivial-object-test2.elf-x86-64bin0 -> 1424 bytes
-rw-r--r--test/Object/Inputs/very_long_bytecode_file_name.bcbin0 -> 1465 bytes
-rw-r--r--test/Object/Inputs/weak-global-symbol.macho-i386bin0 -> 344 bytes
-rw-r--r--test/Object/Inputs/xpg4.abin0 -> 4214 bytes
-rw-r--r--test/Object/Mips/lit.local.cfg2
-rw-r--r--test/Object/X86/lit.local.cfg2
-rw-r--r--test/Object/X86/objdump-cfg-invalid-opcode.yaml58
-rw-r--r--test/Object/X86/objdump-cfg-textatomsize.yaml39
-rw-r--r--test/Object/X86/objdump-cfg.yaml86
-rw-r--r--test/Object/X86/objdump-disassembly-inline-relocations.test35
-rw-r--r--test/Object/X86/objdump-disassembly-symbolic.test48
-rw-r--r--test/Object/ar-create.test17
-rw-r--r--test/Object/archive-delete.test30
-rw-r--r--test/Object/archive-error-tmp.txt9
-rw-r--r--test/Object/archive-extract-dir.test13
-rw-r--r--test/Object/archive-format.test22
-rw-r--r--test/Object/archive-move.test50
-rw-r--r--test/Object/archive-replace-pos.test30
-rw-r--r--test/Object/archive-symtab.test59
-rw-r--r--test/Object/archive-toc.test28
-rw-r--r--test/Object/archive-update.test37
-rw-r--r--test/Object/check_binary_output.ll4
-rw-r--r--test/Object/coff-archive-short.test26
-rw-r--r--test/Object/corrupt.test24
-rw-r--r--test/Object/directory.ll13
-rw-r--r--test/Object/elf-reloc-no-sym.test7
-rw-r--r--test/Object/extract.ll46
-rw-r--r--test/Object/lit.local.cfg2
-rw-r--r--test/Object/nm-archive.test25
-rw-r--r--test/Object/nm-error.test17
-rw-r--r--test/Object/nm-trivial-object.test9
-rw-r--r--test/Object/nm-universal-binary.test6
-rw-r--r--test/Object/nm-weak-global-macho.test3
-rw-r--r--test/Object/obj2yaml.test187
-rw-r--r--test/Object/relocation-executable.test14
-rw-r--r--test/Object/yaml2obj-elf-bits-endian.test16
-rw-r--r--test/Object/yaml2obj-elf-file-headers.yaml11
-rw-r--r--test/Object/yaml2obj-elf-section-basic.yaml35
-rw-r--r--test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml37
-rw-r--r--test/Object/yaml2obj-elf-symbol-basic.yaml40
65 files changed, 1016 insertions, 124 deletions
diff --git a/test/Object/ARM/macho-data-in-code.test b/test/Object/ARM/macho-data-in-code.test
new file mode 100644
index 0000000000000..dca084c2cabad
--- /dev/null
+++ b/test/Object/ARM/macho-data-in-code.test
@@ -0,0 +1,7 @@
+RUN: llvm-objdump -triple thumbv7-apple-iOS -disassemble %p/../Inputs/macho-data-in-code.macho-thumbv7 -macho | FileCheck %s
+
+CHECK: 12: 80 bd pop {r7, pc}
+
+CHECK: 14: 38 00 00 00 .long 56 @ KIND_DATA
+CHECK: 16: 00 00 movs r0, r0
+
diff --git a/test/Object/Inputs/COFF/i386.yaml b/test/Object/Inputs/COFF/i386.yaml
index f7631821c1923..1badad8d5915b 100644
--- a/test/Object/Inputs/COFF/i386.yaml
+++ b/test/Object/Inputs/COFF/i386.yaml
@@ -12,17 +12,17 @@ sections:
Relocations:
- !Relocation
VirtualAddress: 0xe
- SymbolTableIndex: 5
+ SymbolName: L_.str
Type: IMAGE_REL_I386_DIR32
- !Relocation
VirtualAddress: 0x13
- SymbolTableIndex: 6
+ SymbolName: _puts
Type: IMAGE_REL_I386_REL32
- !Relocation
VirtualAddress: 0x18
- SymbolTableIndex: 7
+ SymbolName: _SomeOtherFunction
Type: IMAGE_REL_I386_REL32
- !Section
diff --git a/test/Object/Inputs/COFF/x86-64.yaml b/test/Object/Inputs/COFF/x86-64.yaml
index 5134071cda414..b775ae9cdfbdb 100644
--- a/test/Object/Inputs/COFF/x86-64.yaml
+++ b/test/Object/Inputs/COFF/x86-64.yaml
@@ -11,17 +11,17 @@ sections:
Relocations:
- !Relocation
VirtualAddress: 0xf
- SymbolTableIndex: 5
+ SymbolName: L.str
Type: IMAGE_REL_AMD64_REL32
- !Relocation
VirtualAddress: 0x14
- SymbolTableIndex: 6
+ SymbolName: puts
Type: IMAGE_REL_AMD64_REL32
- !Relocation
VirtualAddress: 0x19
- SymbolTableIndex: 7
+ SymbolName: SomeOtherFunction
Type: IMAGE_REL_AMD64_REL32
- !Section
diff --git a/test/Object/Inputs/ELF/BE32.yaml b/test/Object/Inputs/ELF/BE32.yaml
new file mode 100644
index 0000000000000..2a18d6fca7cb4
--- /dev/null
+++ b/test/Object/Inputs/ELF/BE32.yaml
@@ -0,0 +1,6 @@
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_EXEC
+ Machine: EM_PPC
diff --git a/test/Object/Inputs/ELF/BE64.yaml b/test/Object/Inputs/ELF/BE64.yaml
new file mode 100644
index 0000000000000..091793f395293
--- /dev/null
+++ b/test/Object/Inputs/ELF/BE64.yaml
@@ -0,0 +1,6 @@
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2MSB
+ Type: ET_EXEC
+ Machine: EM_PPC64
diff --git a/test/Object/Inputs/ELF/LE32.yaml b/test/Object/Inputs/ELF/LE32.yaml
new file mode 100644
index 0000000000000..021fb0d93c2e8
--- /dev/null
+++ b/test/Object/Inputs/ELF/LE32.yaml
@@ -0,0 +1,6 @@
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_386
diff --git a/test/Object/Inputs/ELF/LE64.yaml b/test/Object/Inputs/ELF/LE64.yaml
new file mode 100644
index 0000000000000..2fefc0b0c98f3
--- /dev/null
+++ b/test/Object/Inputs/ELF/LE64.yaml
@@ -0,0 +1,6 @@
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
diff --git a/test/Object/Inputs/GNU.a b/test/Object/Inputs/GNU.a
new file mode 100644
index 0000000000000..4c09881eb39dc
--- /dev/null
+++ b/test/Object/Inputs/GNU.a
Binary files differ
diff --git a/test/Object/Inputs/IsNAN.o b/test/Object/Inputs/IsNAN.o
new file mode 100644
index 0000000000000..7b3a12a69d747
--- /dev/null
+++ b/test/Object/Inputs/IsNAN.o
Binary files differ
diff --git a/test/Object/Inputs/MacOSX.a b/test/Object/Inputs/MacOSX.a
new file mode 100644
index 0000000000000..8ba1e6d30e3df
--- /dev/null
+++ b/test/Object/Inputs/MacOSX.a
Binary files differ
diff --git a/test/Object/Inputs/SVR4.a b/test/Object/Inputs/SVR4.a
new file mode 100644
index 0000000000000..3947813ac60a7
--- /dev/null
+++ b/test/Object/Inputs/SVR4.a
Binary files differ
diff --git a/test/Object/Inputs/archive-test.a-corrupt-symbol-table b/test/Object/Inputs/archive-test.a-corrupt-symbol-table
new file mode 100644
index 0000000000000..34e5ed799d3cc
--- /dev/null
+++ b/test/Object/Inputs/archive-test.a-corrupt-symbol-table
Binary files differ
diff --git a/test/Object/Inputs/archive-test.a-empty b/test/Object/Inputs/archive-test.a-empty
new file mode 100644
index 0000000000000..8b277f0dd5dcd
--- /dev/null
+++ b/test/Object/Inputs/archive-test.a-empty
@@ -0,0 +1 @@
+!<arch>
diff --git a/test/Object/Inputs/archive-test.a-gnu-minimal b/test/Object/Inputs/archive-test.a-gnu-minimal
new file mode 100644
index 0000000000000..a243273c484e7
--- /dev/null
+++ b/test/Object/Inputs/archive-test.a-gnu-minimal
@@ -0,0 +1,2 @@
+!<arch>
+test/ 1372964340 1000 1000 100664 0 `
diff --git a/test/Object/Inputs/archive-test.a-gnu-no-symtab b/test/Object/Inputs/archive-test.a-gnu-no-symtab
new file mode 100644
index 0000000000000..0a5b237a29100
--- /dev/null
+++ b/test/Object/Inputs/archive-test.a-gnu-no-symtab
@@ -0,0 +1,5 @@
+!<arch>
+// 24 `
+a-very-long-file-name/
+
+/0 1372864788 1000 1000 100664 0 `
diff --git a/test/Object/Inputs/coff_archive_short.lib b/test/Object/Inputs/coff_archive_short.lib
new file mode 100644
index 0000000000000..41cb1c25d1ef8
--- /dev/null
+++ b/test/Object/Inputs/coff_archive_short.lib
Binary files differ
diff --git a/test/Object/Inputs/corrupt-version.elf-x86_64 b/test/Object/Inputs/corrupt-version.elf-x86_64
new file mode 100644
index 0000000000000..1241a27a7bb63
--- /dev/null
+++ b/test/Object/Inputs/corrupt-version.elf-x86_64
Binary files differ
diff --git a/test/Object/Inputs/corrupt.elf-x86-64 b/test/Object/Inputs/corrupt.elf-x86-64
new file mode 100644
index 0000000000000..8ae5f1759746b
--- /dev/null
+++ b/test/Object/Inputs/corrupt.elf-x86-64
Binary files differ
diff --git a/test/Object/Inputs/elf-reloc-no-sym.x86_64 b/test/Object/Inputs/elf-reloc-no-sym.x86_64
new file mode 100755
index 0000000000000..a41b4e0d78d99
--- /dev/null
+++ b/test/Object/Inputs/elf-reloc-no-sym.x86_64
Binary files differ
diff --git a/test/Object/Inputs/evenlen b/test/Object/Inputs/evenlen
new file mode 100644
index 0000000000000..59ee8d552e373
--- /dev/null
+++ b/test/Object/Inputs/evenlen
@@ -0,0 +1 @@
+evenlen
diff --git a/test/Object/Inputs/macho-data-in-code.macho-thumbv7 b/test/Object/Inputs/macho-data-in-code.macho-thumbv7
new file mode 100644
index 0000000000000..57649302dd946
--- /dev/null
+++ b/test/Object/Inputs/macho-data-in-code.macho-thumbv7
Binary files differ
diff --git a/test/Object/Inputs/macho-universal.x86_64.i386 b/test/Object/Inputs/macho-universal.x86_64.i386
new file mode 100755
index 0000000000000..36d5fc29d6819
--- /dev/null
+++ b/test/Object/Inputs/macho-universal.x86_64.i386
Binary files differ
diff --git a/test/Object/Inputs/oddlen b/test/Object/Inputs/oddlen
new file mode 100644
index 0000000000000..8cf5bd181b1bf
--- /dev/null
+++ b/test/Object/Inputs/oddlen
@@ -0,0 +1 @@
+oddlen
diff --git a/test/Object/Inputs/program-headers.mips b/test/Object/Inputs/program-headers.mips
new file mode 100755
index 0000000000000..54ebfea31f0c6
--- /dev/null
+++ b/test/Object/Inputs/program-headers.mips
Binary files differ
diff --git a/test/Object/Inputs/trivial-executable-test.macho-x86-64 b/test/Object/Inputs/trivial-executable-test.macho-x86-64
new file mode 100755
index 0000000000000..50a6bab64c47a
--- /dev/null
+++ b/test/Object/Inputs/trivial-executable-test.macho-x86-64
Binary files differ
diff --git a/test/Object/Inputs/trivial-object-test2.elf-x86-64 b/test/Object/Inputs/trivial-object-test2.elf-x86-64
new file mode 100644
index 0000000000000..9124518bd92e3
--- /dev/null
+++ b/test/Object/Inputs/trivial-object-test2.elf-x86-64
Binary files differ
diff --git a/test/Object/Inputs/very_long_bytecode_file_name.bc b/test/Object/Inputs/very_long_bytecode_file_name.bc
new file mode 100644
index 0000000000000..f7fce249020a0
--- /dev/null
+++ b/test/Object/Inputs/very_long_bytecode_file_name.bc
Binary files differ
diff --git a/test/Object/Inputs/weak-global-symbol.macho-i386 b/test/Object/Inputs/weak-global-symbol.macho-i386
new file mode 100644
index 0000000000000..a9c8e0cde1563
--- /dev/null
+++ b/test/Object/Inputs/weak-global-symbol.macho-i386
Binary files differ
diff --git a/test/Object/Inputs/xpg4.a b/test/Object/Inputs/xpg4.a
new file mode 100644
index 0000000000000..b2bdb51188fec
--- /dev/null
+++ b/test/Object/Inputs/xpg4.a
Binary files differ
diff --git a/test/Object/Mips/lit.local.cfg b/test/Object/Mips/lit.local.cfg
index 149931749822b..88262fb1d3232 100644
--- a/test/Object/Mips/lit.local.cfg
+++ b/test/Object/Mips/lit.local.cfg
@@ -1,5 +1,3 @@
-config.suffixes = ['.test']
-
targets = set(config.root.targets_to_build.split())
if not 'Mips' in targets:
config.unsupported = True
diff --git a/test/Object/X86/lit.local.cfg b/test/Object/X86/lit.local.cfg
index 6a29e9250f3c6..ba763cf03ffcc 100644
--- a/test/Object/X86/lit.local.cfg
+++ b/test/Object/X86/lit.local.cfg
@@ -1,5 +1,3 @@
-config.suffixes = ['.test']
-
targets = set(config.root.targets_to_build.split())
if not 'X86' in targets:
config.unsupported = True
diff --git a/test/Object/X86/objdump-cfg-invalid-opcode.yaml b/test/Object/X86/objdump-cfg-invalid-opcode.yaml
new file mode 100644
index 0000000000000..56ab1d274eef7
--- /dev/null
+++ b/test/Object/X86/objdump-cfg-invalid-opcode.yaml
@@ -0,0 +1,58 @@
+# RUN: yaml2obj -format=elf %s | llvm-objdump -d -yaml-cfg=%t - && FileCheck --check-prefix=CFG < %t %s
+# REQUIRES: shell
+#
+# Generated from:
+# main:
+# .LBL0_1:
+# movq 8(%rsi), %rax
+# <invalid opcode: 06>
+# nop
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Content: "488B46080690"
+
+## 0000000000000000 <main>:
+
+#CFG: Atoms:
+#CFG: - StartAddress: 0x0000000000000000
+#CFG: Size: 4
+#CFG: Type: Text
+
+## 0: 48 8b 46 08 mov 0x8(%rsi),%rax
+#CFG: - Inst: MOV64rm
+#CFG: Size: 4
+#CFG: Ops: [ RRAX, RRSI, I1, R, I8, R ]
+
+
+#CFG: - StartAddress: 0x0000000000000004
+#CFG: Size: 1
+#CFG: Type: Data
+
+## 4: 06 (bad)
+#CFG: Content: 06
+
+#CFG: - StartAddress: 0x0000000000000005
+#CFG: Size: 1
+#CFG: Type: Text
+
+## 5: 90 nop
+#CFG: - Inst: NOOP
+#CFG: Size: 1
+#CFG: Ops: [ ]
+
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 6
diff --git a/test/Object/X86/objdump-cfg-textatomsize.yaml b/test/Object/X86/objdump-cfg-textatomsize.yaml
new file mode 100644
index 0000000000000..87cb4e13ec1e4
--- /dev/null
+++ b/test/Object/X86/objdump-cfg-textatomsize.yaml
@@ -0,0 +1,39 @@
+# RUN: yaml2obj -format=elf %s | llvm-objdump -d -yaml-cfg=%t - && FileCheck --check-prefix=CFG < %t %s
+# REQUIRES: shell
+#
+# Generated from:
+# main:
+# .LBL0_1:
+# jmp .LBL0_1
+#
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Content: "EBFE"
+
+## 0000000000000000 <main>:
+
+#CFG: Atoms:
+#CFG: - StartAddress: 0x0000000000000000
+#CFG: Size: 2
+
+## 0: eb fe jmp $-2
+#CFG: - Inst: JMP_1
+#CFG: Size: 2
+#CFG: Ops: [ I-2 ]
+
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 2
diff --git a/test/Object/X86/objdump-cfg.yaml b/test/Object/X86/objdump-cfg.yaml
new file mode 100644
index 0000000000000..c5bff03c1d0cb
--- /dev/null
+++ b/test/Object/X86/objdump-cfg.yaml
@@ -0,0 +1,86 @@
+# RUN: yaml2obj -format=elf %s | llvm-objdump -d -yaml-cfg=%t - && FileCheck --check-prefix=CFG < %t %s
+# REQUIRES: shell
+#
+# Generated from:
+# main:
+# movl $48, %eax
+# cmpl $3, %edi
+# jl .LBB0_2
+# movq 8(%rsi), %rax
+# movsbl (%rax), %eax
+# .LBB0_2:
+# ret
+#
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Content: "B83000000083FF037C07488B46080FBE00C3"
+
+## 0000000000000000 <main>:
+
+#CFG: Atoms:
+#CFG: - StartAddress: 0x0000000000000000
+#CFG: Size: 10
+
+## 0: b8 30 00 00 00 mov $0x30,%eax
+#CFG: - Inst: MOV32ri
+#CFG: Size: 5
+#CFG: Ops: [ REAX, I48 ]
+
+## 5: 83 ff 03 cmp $0x3,%edi
+#CFG: - Inst: CMP32ri8
+#CFG: Size: 3
+#CFG: Ops: [ REDI, I3 ]
+
+## 8: 7c 07 jl 11 <main+0x11>
+#CFG: - Inst: JL_1
+#CFG: Size: 2
+#CFG: Ops: [ I7 ]
+
+#CFG: - StartAddress: 0x000000000000000A
+#CFG: Size: 7
+
+## a: 48 8b 46 08 mov 0x8(%rsi),%rax
+#CFG: - Inst: MOV64rm
+#CFG: Size: 4
+#CFG: Ops: [ RRAX, RRSI, I1, R, I8, R ]
+
+## e: 0f be 00 movsbl (%rax),%eax
+#CFG: - Inst: MOVSX32rm8
+#CFG: Size: 3
+#CFG: Ops: [ REAX, RRAX, I1, R, I0, R ]
+#CFG: - StartAddress: 0x0000000000000011
+#CFG: Size: 1
+
+## 11: c3 retq
+#CFG: - Inst: RET
+#CFG: Size: 1
+#CFG: Ops: [ ]
+
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 18
+
+#CFG: Functions:
+#CFG: BasicBlocks:
+#CFG: - Address: 0x0000000000000000
+#CFG: Preds: [ ]
+#CFG: Succs: [ 0x0000000000000011, 0x000000000000000A ]
+#CFG: - Address: 0x0000000000000011
+#CFG: Preds: [ 0x0000000000000000, 0x000000000000000A ]
+#CFG: Succs: [ ]
+#CFG: - Address: 0x000000000000000A
+#CFG: Preds: [ 0x0000000000000000 ]
+#CFG: Succs: [ 0x0000000000000011 ]
diff --git a/test/Object/X86/objdump-disassembly-inline-relocations.test b/test/Object/X86/objdump-disassembly-inline-relocations.test
index a5875f6a2f960..2ef1a435d7d47 100644
--- a/test/Object/X86/objdump-disassembly-inline-relocations.test
+++ b/test/Object/X86/objdump-disassembly-inline-relocations.test
@@ -2,6 +2,10 @@ RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.coff-i386 \
RUN: | FileCheck %s -check-prefix COFF-i386
RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.coff-x86-64 \
RUN: | FileCheck %s -check-prefix COFF-x86-64
+RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.macho-i386 \
+RUN: | FileCheck %s -check-prefix MACHO-i386
+RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.macho-x86-64 \
+RUN: | FileCheck %s -check-prefix MACHO-x86-64
COFF-i386: file format COFF-i386
COFF-i386: Disassembly of section .text:
@@ -30,3 +34,34 @@ COFF-x86-64: 19: IMAGE_REL_AMD64_REL32 SomeOtherFun
COFF-x86-64: 1d: 8b 44 24 24 movl 36(%rsp), %eax
COFF-x86-64: 21: 48 83 c4 28 addq $40, %rsp
COFF-x86-64: 25: c3 ret
+
+MACHO-i386: file format Mach-O 32-bit i386
+MACHO-i386: Disassembly of section __TEXT,__text:
+MACHO-i386: _main:
+MACHO-i386: 0: 83 ec 0c subl $12, %esp
+MACHO-i386: 3: c7 44 24 08 00 00 00 00 movl $0, 8(%esp)
+MACHO-i386: b: c7 04 24 24 00 00 00 movl $36, (%esp)
+MACHO-i386: e: GENERIC_RELOC_VANILLA __cstring
+MACHO-i386: 12: e8 1f 00 00 00 calll 31
+MACHO-i386: 13: GENERIC_RELOC_VANILLA __jump_table
+MACHO-i386: 17: e8 15 00 00 00 calll 21
+MACHO-i386: 18: GENERIC_RELOC_VANILLA __jump_table
+MACHO-i386: 1c: 8b 44 24 08 movl 8(%esp), %eax
+MACHO-i386: 20: 83 c4 0c addl $12, %esp
+MACHO-i386: 23: c3 ret
+
+MACHO-x86-64: file format Mach-O 64-bit x86-64
+MACHO-x86-64: Disassembly of section __TEXT,__text:
+MACHO-x86-64: _main:
+MACHO-x86-64: 0: 48 83 ec 08 subq $8, %rsp
+MACHO-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp)
+MACHO-x86-64: c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi
+MACHO-x86-64: f: X86_64_RELOC_SIGNED L_.str
+MACHO-x86-64: 13: e8 00 00 00 00 callq 0
+MACHO-x86-64: 14: X86_64_RELOC_BRANCH _puts
+MACHO-x86-64: 18: 30 c0 xorb %al, %al
+MACHO-x86-64: 1a: e8 00 00 00 00 callq 0
+MACHO-x86-64: 1b: X86_64_RELOC_BRANCH _SomeOtherFunction
+MACHO-x86-64: 1f: 8b 44 24 04 movl 4(%rsp), %eax
+MACHO-x86-64: 23: 48 83 c4 08 addq $8, %rsp
+MACHO-x86-64: 27: c3 ret
diff --git a/test/Object/X86/objdump-disassembly-symbolic.test b/test/Object/X86/objdump-disassembly-symbolic.test
new file mode 100644
index 0000000000000..858653e95ebc0
--- /dev/null
+++ b/test/Object/X86/objdump-disassembly-symbolic.test
@@ -0,0 +1,48 @@
+RUN: llvm-objdump -d -symbolize %p/../Inputs/trivial-object-test.elf-x86-64 \
+RUN: | FileCheck %s -check-prefix ELF-x86-64
+RUN: llvm-objdump -d -symbolize %p/../Inputs/trivial-object-test.macho-x86-64 \
+RUN: | FileCheck %s -check-prefix MACHO-x86-64
+
+# Generate this using:
+# ld trivial-object-test.macho-x86-64 -undefined dynamic_lookup
+RUN: llvm-objdump -d -symbolize %p/../Inputs/trivial-executable-test.macho-x86-64 \
+RUN: | FileCheck %s -check-prefix MACHO-STUBS-x86-64
+
+ELF-x86-64: file format ELF64-x86-64
+ELF-x86-64: Disassembly of section .text:
+ELF-x86-64: main:
+ELF-x86-64: 0: 48 83 ec 08 subq $8, %rsp
+ELF-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp)
+ELF-x86-64: c: bf 00 00 00 00 movl $.rodata.str1.1, %edi
+ELF-x86-64: 11: e8 00 00 00 00 callq puts-4
+ELF-x86-64: 16: 30 c0 xorb %al, %al
+ELF-x86-64: 18: e8 00 00 00 00 callq SomeOtherFunction-4
+ELF-x86-64: 1d: 8b 44 24 04 movl 4(%rsp), %eax
+ELF-x86-64: 21: 48 83 c4 08 addq $8, %rsp
+ELF-x86-64: 25: c3 ret
+
+MACHO-x86-64: file format Mach-O 64-bit x86-64
+MACHO-x86-64: Disassembly of section __TEXT,__text:
+MACHO-x86-64: _main:
+MACHO-x86-64: 0: 48 83 ec 08 subq $8, %rsp
+MACHO-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp)
+MACHO-x86-64: c: 48 8d 3d 00 00 00 00 leaq L_.str(%rip), %rdi ## literal pool for: Hello World!
+MACHO-x86-64: 13: e8 00 00 00 00 callq _puts
+MACHO-x86-64: 18: 30 c0 xorb %al, %al
+MACHO-x86-64: 1a: e8 00 00 00 00 callq _SomeOtherFunction
+MACHO-x86-64: 1f: 8b 44 24 04 movl 4(%rsp), %eax
+MACHO-x86-64: 23: 48 83 c4 08 addq $8, %rsp
+MACHO-x86-64: 27: c3 ret
+
+MACHO-STUBS-x86-64: file format Mach-O 64-bit x86-64
+MACHO-STUBS-x86-64: Disassembly of section __TEXT,__text:
+MACHO-STUBS-x86-64: _main:
+MACHO-STUBS-x86-64: 1f90: 48 83 ec 08 subq $8, %rsp
+MACHO-STUBS-x86-64: 1f94: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp)
+MACHO-STUBS-x86-64: 1f9c: 48 8d 3d 45 00 00 00 leaq 69(%rip), %rdi ## literal pool for: Hello World!
+MACHO-STUBS-x86-64: 1fa3: e8 16 00 00 00 callq puts
+MACHO-STUBS-x86-64: 1fa8: 30 c0 xorb %al, %al
+MACHO-STUBS-x86-64: 1faa: e8 09 00 00 00 callq SomeOtherFunction
+MACHO-STUBS-x86-64: 1faf: 8b 44 24 04 movl 4(%rsp), %eax
+MACHO-STUBS-x86-64: 1fb3: 48 83 c4 08 addq $8, %rsp
+MACHO-STUBS-x86-64: 1fb7: c3 ret
diff --git a/test/Object/ar-create.test b/test/Object/ar-create.test
new file mode 100644
index 0000000000000..95d994e06a48c
--- /dev/null
+++ b/test/Object/ar-create.test
@@ -0,0 +1,17 @@
+Test which operations create an archive and which don't.
+
+RUN: touch %t
+RUN: rm -f %t.foo.a
+RUN: not llvm-ar p %t.foo.a %t 2>&1 | FileCheck %s
+RUN: not llvm-ar d %t.foo.a %t 2>&1 | FileCheck %s
+RUN: not llvm-ar m %t.foo.a %t 2>&1 | FileCheck %s
+RUN: not llvm-ar t %t.foo.a %t 2>&1 | FileCheck %s
+RUN: not llvm-ar x %t.foo.a %t 2>&1 | FileCheck %s
+
+RUN: llvm-ar q %t.foo.a %t 2>&1 | FileCheck --check-prefix=CREATE %s
+RUN: rm -f %t.foo.a
+RUN: llvm-ar r %t.foo.a %t 2>&1 | FileCheck --check-prefix=CREATE %s
+RUN: rm -f %t.foo.a
+
+CHECK: llvm-ar{{(.exe|.EXE)?}}: error loading '{{[^']+}}.foo.a':
+CREATE: creating {{.*}}.foo.a
diff --git a/test/Object/archive-delete.test b/test/Object/archive-delete.test
new file mode 100644
index 0000000000000..552b0e709f614
--- /dev/null
+++ b/test/Object/archive-delete.test
@@ -0,0 +1,30 @@
+Test the 'd' operation in llvm-ar
+
+REQUIRES: shell
+
+RUN: cd %T
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/GNU.a %t.a
+RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/MacOSX.a %t.a
+RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/SVR4.a %t.a
+RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/xpg4.a %t.a
+RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+
+CHECK: evenlen
+CHECK-NEXT: oddlen
+CHECK-NEXT: IsNAN.o
diff --git a/test/Object/archive-error-tmp.txt b/test/Object/archive-error-tmp.txt
new file mode 100644
index 0000000000000..061898655b6c2
--- /dev/null
+++ b/test/Object/archive-error-tmp.txt
@@ -0,0 +1,9 @@
+REQUIRES: shell
+
+Test that no temporary file is left behind on error.
+
+RUN: rm -rf %t
+RUN: mkdir %t
+RUN: not llvm-ar rc %t/foo.a .
+RUN: rmdir %t
+
diff --git a/test/Object/archive-extract-dir.test b/test/Object/archive-extract-dir.test
new file mode 100644
index 0000000000000..c718f90275b65
--- /dev/null
+++ b/test/Object/archive-extract-dir.test
@@ -0,0 +1,13 @@
+REQUIRES: shell
+
+RUN: mkdir -p %t
+RUN: cd %t
+RUN: rm -rf foo
+RUN: echo foo > foo
+RUN: rm -f test.a
+RUN: llvm-ar rc test.a foo
+RUN: rm foo
+RUN: mkdir foo
+RUN: not llvm-ar x test.a foo 2>&1 | FileCheck %s
+
+CHECK: foo: Is a directory
diff --git a/test/Object/archive-format.test b/test/Object/archive-format.test
new file mode 100644
index 0000000000000..20ac1a0d78fb8
--- /dev/null
+++ b/test/Object/archive-format.test
@@ -0,0 +1,22 @@
+Test the exact archive format. In particular, test which file names use the
+string table or not.
+
+REQUIRES: shell
+
+RUN: mkdir -p %t
+RUN: cd %t
+
+RUN: echo bar > 0123456789abcde
+RUN: echo zed > 0123456789abcdef
+
+RUN: rm -f test.a
+RUN: llvm-ar rc test.a 0123456789abcde 0123456789abcdef
+RUN: cat test.a | FileCheck -strict-whitespace %s
+
+CHECK: !<arch>
+CHECK-NEXT: // 18 `
+CHECK-NEXT: 0123456789abcdef/
+CHECK-NEXT: 0123456789abcde/{{................................}}4 `
+CHECK-NEXT: bar
+CHECK-NEXT: /0 {{................................}}4 `
+CHECK-NEXT: zed
diff --git a/test/Object/archive-move.test b/test/Object/archive-move.test
new file mode 100644
index 0000000000000..0378e9111a965
--- /dev/null
+++ b/test/Object/archive-move.test
@@ -0,0 +1,50 @@
+Test the 'm' operation in llvm-ar
+
+REQUIRES: shell
+
+RUN: cd %T
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/GNU.a %t.a
+RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/MacOSX.a %t.a
+RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/SVR4.a %t.a
+RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/xpg4.a %t.a
+RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck %s
+
+CHECK: evenlen
+CHECK-NEXT: oddlen
+CHECK-NEXT: IsNAN.o
+CHECK-NEXT: very_long_bytecode_file_name.bc
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/GNU.a %t.a
+RUN: llvm-ar mb evenlen %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck --check-prefix=BEFORE %s
+
+BEFORE: very_long_bytecode_file_name.bc
+BEFORE-NEXT: evenlen
+BEFORE-NEXT: oddlen
+BEFORE-NEXT: IsNAN.o
+
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/GNU.a %t.a
+RUN: llvm-ar ma evenlen %t.a very_long_bytecode_file_name.bc
+RUN: llvm-ar t %t.a | FileCheck --check-prefix=AFTER %s
+
+AFTER: evenlen
+AFTER-NEXT: very_long_bytecode_file_name.bc
+AFTER-NEXT: oddlen
+AFTER-NEXT: IsNAN.o
diff --git a/test/Object/archive-replace-pos.test b/test/Object/archive-replace-pos.test
new file mode 100644
index 0000000000000..0acead69a1e24
--- /dev/null
+++ b/test/Object/archive-replace-pos.test
@@ -0,0 +1,30 @@
+Test adding a member to a particular position
+
+RUN: touch %t.foo
+RUN: touch %t.bar
+RUN: rm -f %t.a
+RUN: llvm-ar rc %t.a %t.foo %t.bar
+RUN: touch %t.zed
+RUN: llvm-ar rca %t.foo %t.a %t.zed
+RUN: llvm-ar t %t.a | FileCheck %s
+
+CHECK: .foo
+CHECK-NEXT: .zed
+CHECK-NEXT: .bar
+
+RUN: rm -f %t.a
+RUN: llvm-ar rc %t.a %t.zed %t.foo %t.bar
+RUN: llvm-ar t %t.a | FileCheck --check-prefix=CHECK2 %s
+
+CHECK2: .zed
+CHECK2-NEXT: .foo
+CHECK2-NEXT: .bar
+
+RUN: llvm-ar rca %t.foo %t.a %t.zed
+RUN: llvm-ar t %t.a | FileCheck --check-prefix=CHECK3 %s
+CHECK3: .foo
+CHECK3-NEXT: .zed
+CHECK3-NEXT: .bar
+
+RUN: llvm-ar rc %t.a %t.zed
+RUN: llvm-ar t %t.a | FileCheck --check-prefix=CHECK3 %s
diff --git a/test/Object/archive-symtab.test b/test/Object/archive-symtab.test
new file mode 100644
index 0000000000000..6379504318a6c
--- /dev/null
+++ b/test/Object/archive-symtab.test
@@ -0,0 +1,59 @@
+RUN: rm -f %t.a
+RUN: llvm-ar rcs %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
+RUN: llvm-nm -s %t.a | FileCheck %s
+
+CHECK: Archive map
+CHECK-NEXT: main in trivial-object-test.elf-x86-64
+CHECK-NEXT: foo in trivial-object-test2.elf-x86-64
+CHECK-NEXT: main in trivial-object-test2.elf-x86-64
+CHECK-NOT: bar
+
+CHECK: trivial-object-test.elf-x86-64:
+CHECK-NEXT: U SomeOtherFunction
+CHECK-NEXT: 00000000 T main
+CHECK-NEXT: U puts
+CHECK-NEXT: trivial-object-test2.elf-x86-64:
+CHECK-NEXT: 00000000 t bar
+CHECK-NEXT: 00000006 T foo
+CHECK-NEXT: 00000016 T main
+
+RUN: rm -f %t.a
+RUN: llvm-ar rcS %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
+RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=NOMAP
+
+NOMAP-NOT: Archive map
+
+RUN: llvm-ar s %t.a
+RUN: llvm-nm -s %t.a | FileCheck %s
+
+check that the archive does have a corrupt symbol table.
+RUN: rm -f %t.a
+RUN: cp %p/Inputs/archive-test.a-corrupt-symbol-table %t.a
+RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=CORRUPT
+
+CORRUPT: Archive map
+CORRUPT-NEXT: mbin in trivial-object-test.elf-x86-64
+CORRUPT-NEXT: foo in trivial-object-test2.elf-x86-64
+CORRUPT-NEXT: main in trivial-object-test2.elf-x86-64
+
+CORRUPT: trivial-object-test.elf-x86-64:
+CORRUPT-NEXT: U SomeOtherFunction
+CORRUPT-NEXT: 00000000 T main
+CORRUPT-NEXT: U puts
+CORRUPT-NEXT: trivial-object-test2.elf-x86-64:
+CORRUPT-NEXT: 00000000 t bar
+CORRUPT-NEXT: 00000006 T foo
+CORRUPT-NEXT: 00000016 T main
+
+check that the we *don't* update the symbol table.
+RUN: llvm-ar s %t.a
+RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=CORRUPT
+
+repeate the test with llvm-ranlib
+
+RUN: rm -f %t.a
+RUN: llvm-ar rcS %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
+RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=NOMAP
+
+RUN: llvm-ranlib %t.a
+RUN: llvm-nm -s %t.a | FileCheck %s
diff --git a/test/Object/archive-toc.test b/test/Object/archive-toc.test
new file mode 100644
index 0000000000000..0a5e72b61dce4
--- /dev/null
+++ b/test/Object/archive-toc.test
@@ -0,0 +1,28 @@
+Test reading an archive created by gnu ar
+RUN: env TZ=GMT llvm-ar tv %p/Inputs/GNU.a | FileCheck %s --check-prefix=GNU -strict-whitespace
+
+GNU: rw-r--r-- 500/500 8 Nov 19 02:57 2004 evenlen
+GNU-NEXT: rw-r--r-- 500/500 7 Nov 19 02:57 2004 oddlen
+GNU-NEXT: rwxr-xr-x 500/500 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc
+GNU-NEXT: rw-r--r-- 500/500 2280 Nov 19 03:04 2004 IsNAN.o
+
+
+Test reading an archive createdy by Mac OS X ar
+RUN: env TZ=GMT llvm-ar tv %p/Inputs/MacOSX.a | FileCheck %s --check-prefix=OSX -strict-whitespace
+
+OSX-NOT: __.SYMDEF
+OSX: rw-r--r-- 501/501 8 Nov 19 02:57 2004 evenlen
+OSX-NEXT: rw-r--r-- 501/501 8 Nov 19 02:57 2004 oddlen
+OSX-NEXT: rw-r--r-- 502/502 1465 Feb 4 06:59 2010 very_long_bytecode_file_name.bc
+OSX-NEXT: rw-r--r-- 501/501 2280 Nov 19 04:32 2004 IsNAN.o
+
+Test reading an archive created on Solaris by /usr/ccs/bin/ar
+RUN: env TZ=GMT llvm-ar tv %p/Inputs/SVR4.a | FileCheck %s -strict-whitespace
+
+Test reading an archive created on Solaris by /usr/xpg4/bin/ar
+RUN: env TZ=GMT llvm-ar tv %p/Inputs/xpg4.a | FileCheck %s -strict-whitespace
+
+CHECK: rw-r--r-- 1002/102 8 Nov 19 03:24 2004 evenlen
+CHECK-NEXT: rw-r--r-- 1002/102 7 Nov 19 03:24 2004 oddlen
+CHECK-NEXT: rwxr-xr-x 1002/102 1465 Nov 19 03:24 2004 very_long_bytecode_file_name.bc
+CHECK-NEXT: rw-r--r-- 1002/102 2280 Nov 19 03:24 2004 IsNAN.o
diff --git a/test/Object/archive-update.test b/test/Object/archive-update.test
new file mode 100644
index 0000000000000..20286d2669ad8
--- /dev/null
+++ b/test/Object/archive-update.test
@@ -0,0 +1,37 @@
+Test the 'u' option of llvm-ar
+
+REQUIRES: shell
+
+RUN: cd %T
+RUN: rm -f %t.a
+
+Create a file named evenlen that is newer than the evenlen on the source dir.
+RUN: mkdir -p %t.older
+RUN: echo older > %t.older/evenlen
+
+Either the shell supports the 'touch' command with a flag to manually set the
+mtime or we sleep for over a second so that the mtime is definitely observable.
+RUN: touch -m -t 200001010000 %t.older/evenlen || sleep 1.1
+
+RUN: mkdir -p %t.newer
+RUN: echo newer > %t.newer/evenlen
+RUN: touch %t.newer/evenlen
+
+Create an achive with the newest file
+RUN: llvm-ar r %t.a %t.newer/evenlen
+RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
+
+Check that without the 'u' option the member is replaced with an older file.
+RUN: llvm-ar r %t.a %t.older/evenlen
+RUN: llvm-ar p %t.a | FileCheck --check-prefix=OLDER %s
+
+Check that with the 'u' option the member is replaced with a newer file.
+RUN: llvm-ar ru %t.a %t.newer/evenlen
+RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
+
+Check that with the 'u' option the member is not replaced with an older file.
+RUN: llvm-ar ru %t.a %t.older/evenlen
+RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
+
+NEWER: newer
+OLDER: older
diff --git a/test/Object/check_binary_output.ll b/test/Object/check_binary_output.ll
new file mode 100644
index 0000000000000..567f18e65ba57
--- /dev/null
+++ b/test/Object/check_binary_output.ll
@@ -0,0 +1,4 @@
+; This is not an assembly file, this is just to run the test.
+; The test verifies that llvm-ar produces a binary output.
+
+;RUN: llvm-ar p %p/Inputs/GNU.a very_long_bytecode_file_name.bc | cmp -s %p/Inputs/very_long_bytecode_file_name.bc -
diff --git a/test/Object/coff-archive-short.test b/test/Object/coff-archive-short.test
new file mode 100644
index 0000000000000..fa531b3b63145
--- /dev/null
+++ b/test/Object/coff-archive-short.test
@@ -0,0 +1,26 @@
+#
+# Check if the index is appearing properly in the output file
+#
+# coff_archive_short.lib does not have member whose name is longer
+# than 15 characters, thus, unlike coff_archive.lib, it has no string
+# table as the third member.
+#
+RUN: llvm-nm --numeric-sort -s %p/Inputs/coff_archive_short.lib | FileCheck -check-prefix=CHECKIDX %s
+
+CHECKIDX: Archive map
+CHECKIDX: _shortfn1 in short1.obj
+CHECKIDX: _shortfn2 in short2.obj
+CHECKIDX: short1.obj:
+CHECKIDX: 00000000 N .debug$S
+CHECKIDX: 00000000 i .drectve
+CHECKIDX: 00000000 t .text
+CHECKIDX: 00000000 T _shortfn1
+CHECKIDX: 00000001 a @feat.00
+CHECKIDX: 00aa9d1b a @comp.id
+CHECKIDX: short2.obj:
+CHECKIDX: 00000000 N .debug$S
+CHECKIDX: 00000000 i .drectve
+CHECKIDX: 00000000 t .text
+CHECKIDX: 00000000 T _shortfn2
+CHECKIDX: 00000001 a @feat.00
+CHECKIDX: 00aa9d1b a @comp.id
diff --git a/test/Object/corrupt.test b/test/Object/corrupt.test
new file mode 100644
index 0000000000000..ef72a0979b52b
--- /dev/null
+++ b/test/Object/corrupt.test
@@ -0,0 +1,24 @@
+// Section name offset overflows section name string table.
+RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -sections \
+RUN: 2>&1 | FileCheck --check-prefix=SECNAME %s
+
+// Section data offset past end of file.
+RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -sections -section-data \
+RUN: 2>&1 | FileCheck --check-prefix=SECDATA %s
+
+// Symbol name offset overflows string table.
+RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -symbols \
+RUN: 2>&1 | FileCheck --check-prefix=SYMNAME %s
+
+// Version index in .gnu.version overflows the version map.
+RUN: not llvm-readobj %p/Inputs/corrupt-version.elf-x86_64 -dt \
+RUN: 2>&1 | FileCheck --check-prefix=VER %s
+
+SECNAME: Error reading file: Invalid data was encountered while parsing the file.
+
+SECDATA: Error reading file: Invalid data was encountered while parsing the file.
+SECDATA: Error reading file: Invalid data was encountered while parsing the file.
+
+SYMNAME: Error reading file: Invalid data was encountered while parsing the file.
+
+VER: Error reading file: Invalid data was encountered while parsing the file.
diff --git a/test/Object/directory.ll b/test/Object/directory.ll
new file mode 100644
index 0000000000000..48eefcb6ecb8d
--- /dev/null
+++ b/test/Object/directory.ll
@@ -0,0 +1,13 @@
+;RUN: rm -f %T/test.a
+;RUN: not llvm-ar r %T/test.a . 2>&1 | FileCheck %s
+;CHECK: .: Is a directory
+
+;RUN: rm -f %T/test.a
+;RUN: touch %T/a-very-long-file-name
+;RUN: llvm-ar r %T/test.a %s %T/a-very-long-file-name
+;RUN: llvm-ar r %T/test.a %T/a-very-long-file-name
+;RUN: llvm-ar t %T/test.a | FileCheck -check-prefix=MEMBERS %s
+;MEMBERS-NOT: /
+;MEMBERS: directory.ll
+;MEMBERS: a-very-long-file-name
+;MEMBERS-NOT: a-very-long-file-name
diff --git a/test/Object/elf-reloc-no-sym.test b/test/Object/elf-reloc-no-sym.test
new file mode 100644
index 0000000000000..eabde0cc7348b
--- /dev/null
+++ b/test/Object/elf-reloc-no-sym.test
@@ -0,0 +1,7 @@
+RUN: llvm-readobj -r %p/Inputs/elf-reloc-no-sym.x86_64 | FileCheck %s
+
+CHECK: Relocations [
+CHECK-NEXT: Section (1) .rela.plt {
+CHECK-NEXT: 0x4011D8 R_X86_64_IRELATIVE - 0x400120
+CHECK-NEXT: }
+CHECK-NEXT: ]
diff --git a/test/Object/extract.ll b/test/Object/extract.ll
new file mode 100644
index 0000000000000..4e519aea75050
--- /dev/null
+++ b/test/Object/extract.ll
@@ -0,0 +1,46 @@
+; This isn't really an assembly file, its just here to run the test.
+
+; This test just makes sure that llvm-ar can extract bytecode members
+; from various style archives.
+
+; REQUIRES: shell
+
+; RUN: cd %T
+
+; RUN: rm -f very_long_bytecode_file_name.bc
+; RUN: llvm-ar p %p/Inputs/GNU.a very_long_bytecode_file_name.bc | \
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc -
+; RUN: llvm-ar x %p/Inputs/GNU.a very_long_bytecode_file_name.bc
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \
+; RUN: very_long_bytecode_file_name.bc
+
+; RUN: rm -f very_long_bytecode_file_name.bc
+; RUN: llvm-ar p %p/Inputs/MacOSX.a very_long_bytecode_file_name.bc | \
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc -
+; RUN: llvm-ar x %p/Inputs/MacOSX.a very_long_bytecode_file_name.bc
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \
+; RUN: very_long_bytecode_file_name.bc
+
+; RUN: rm -f very_long_bytecode_file_name.bc
+; RUN: llvm-ar p %p/Inputs/SVR4.a very_long_bytecode_file_name.bc | \
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc -
+; RUN: llvm-ar x %p/Inputs/SVR4.a very_long_bytecode_file_name.bc
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \
+; RUN: very_long_bytecode_file_name.bc
+
+; RUN: rm -f very_long_bytecode_file_name.bc
+; RUN: llvm-ar p %p/Inputs/xpg4.a very_long_bytecode_file_name.bc |\
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc -
+; RUN: llvm-ar x %p/Inputs/xpg4.a very_long_bytecode_file_name.bc
+; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \
+; RUN: very_long_bytecode_file_name.bc
+
+
+; Test that the 'o' option is working by extracting a file, putting it in o
+; new archive and checking that date.
+; RUN: rm -f very_long_bytecode_file_name.bc
+; RUN: llvm-ar xo %p/Inputs/GNU.a very_long_bytecode_file_name.bc
+; RUN: llvm-ar rc %t.a very_long_bytecode_file_name.bc
+; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s
+
+CHECK: 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc
diff --git a/test/Object/lit.local.cfg b/test/Object/lit.local.cfg
index b2439b2d1b799..d74d039d684b0 100644
--- a/test/Object/lit.local.cfg
+++ b/test/Object/lit.local.cfg
@@ -1 +1 @@
-config.suffixes = ['.test', '.ll']
+config.suffixes = ['.test', '.ll', '.yaml']
diff --git a/test/Object/nm-archive.test b/test/Object/nm-archive.test
index 2d96b73a27147..0d43cc701550f 100644
--- a/test/Object/nm-archive.test
+++ b/test/Object/nm-archive.test
@@ -1,9 +1,5 @@
RUN: llvm-nm %p/Inputs/archive-test.a-coff-i386 \
RUN: | FileCheck %s -check-prefix COFF
-RUN: llvm-as %p/Inputs/trivial.ll -o=%t1
-RUN: llvm-ar rcs %t2 %t1
-RUN: llvm-nm %t2 | FileCheck %s -check-prefix BITCODE
-
COFF: trivial-object-test.coff-i386:
COFF-NEXT: 00000000 d .data
@@ -13,6 +9,27 @@ COFF-NEXT: U _SomeOtherFunction
COFF-NEXT: 00000000 T _main
COFF-NEXT: U _puts
+
+RUN: llvm-as %p/Inputs/trivial.ll -o=%t1
+RUN: rm -f %t2
+RUN: llvm-ar rcs %t2 %t1
+RUN: llvm-nm %t2 | FileCheck %s -check-prefix BITCODE
+
BITCODE: U SomeOtherFunction
BITCODE-NEXT: T main
BITCODE-NEXT: U puts
+
+
+Test we don't error with an archive with no symtab.
+RUN: llvm-nm %p/Inputs/archive-test.a-gnu-no-symtab
+
+
+Or in an archive with no symtab or string table.
+RUN: llvm-nm %p/Inputs/archive-test.a-gnu-minimal
+
+
+And don't crash when asked to print a non existing symtab.
+RUN: llvm-nm -s %p/Inputs/archive-test.a-gnu-minimal
+
+Don't reject an empty archive.
+RUN: llvm-nm %p/Inputs/archive-test.a-empty
diff --git a/test/Object/nm-error.test b/test/Object/nm-error.test
new file mode 100644
index 0000000000000..146b88713f87c
--- /dev/null
+++ b/test/Object/nm-error.test
@@ -0,0 +1,17 @@
+Test that llvm-nm returns an error because of the unknown file type, but
+keeps processing subsequent files.
+
+Note: We use a temporary file since the tests don't run with pipefail.
+
+RUN: touch %t
+RUN: not llvm-nm %p/Inputs/trivial-object-test.elf-i386 %t \
+RUN: %p/Inputs/trivial-object-test.elf-i386 > %t.log
+RUN: FileCheck %s < %t.log
+
+CHECK: U SomeOtherFunction
+CHECK: 00000000 T main
+CHECK: U puts
+
+CHECK: U SomeOtherFunction
+CHECK: 00000000 T main
+CHECK: U puts
diff --git a/test/Object/nm-trivial-object.test b/test/Object/nm-trivial-object.test
index 5c3cc315e543a..748d6f20d5108 100644
--- a/test/Object/nm-trivial-object.test
+++ b/test/Object/nm-trivial-object.test
@@ -18,16 +18,17 @@ COFF: U {{_?}}SomeOtherFunction
COFF: 00000000 T {{_?}}main
COFF: U {{_?}}puts
+ELF-NOT: U
ELF: U SomeOtherFunction
ELF: 00000000 T main
ELF: U puts
macho: 00000000 U _SomeOtherFunction
-macho: 00000000 s _main
+macho: 00000000 T _main
macho: 00000000 U _puts
macho64: 00000028 s L_.str
-macho64: 00000000 u _SomeOtherFunction
-macho64: 00000000 s _main
-macho64: 00000000 u _puts
+macho64: 00000000 U _SomeOtherFunction
+macho64: 00000000 T _main
+macho64: 00000000 U _puts
diff --git a/test/Object/nm-universal-binary.test b/test/Object/nm-universal-binary.test
new file mode 100644
index 0000000000000..8febfdfab39c1
--- /dev/null
+++ b/test/Object/nm-universal-binary.test
@@ -0,0 +1,6 @@
+RUN: llvm-nm %p/Inputs/macho-universal.x86_64.i386 | FileCheck %s
+
+CHECK: macho-universal.x86_64.i386:x86_64
+CHECK: main
+CHECK: macho-universal.x86_64.i386:i386
+CHECK: main
diff --git a/test/Object/nm-weak-global-macho.test b/test/Object/nm-weak-global-macho.test
new file mode 100644
index 0000000000000..ede26090f9513
--- /dev/null
+++ b/test/Object/nm-weak-global-macho.test
@@ -0,0 +1,3 @@
+RUN: llvm-nm %p/Inputs/weak-global-symbol.macho-i386 | FileCheck %s
+
+CHECK: 00000000 S _a
diff --git a/test/Object/obj2yaml.test b/test/Object/obj2yaml.test
index 0d96fd2bfd8e4..49541336c6826 100644
--- a/test/Object/obj2yaml.test
+++ b/test/Object/obj2yaml.test
@@ -2,169 +2,152 @@ RUN: obj2yaml %p/Inputs/trivial-object-test.coff-i386 | FileCheck %s --check-pre
RUN: obj2yaml %p/Inputs/trivial-object-test.coff-x86-64 | FileCheck %s --check-prefix COFF-X86-64
-COFF-I386: header: !Header
-COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386 # (0x14c)
+COFF-I386: header:
+COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386
COFF-I386: sections:
-COFF-I386-NEXT: - !Section
-COFF-I386-NEXT: Name: .text
-COFF-I386-NEXT: Characteristics: [IMAGE_SCN_CNT_CODE, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ, ] # 0x60500020
-COFF-I386-NEXT: SectionData: !hex "83EC0CC744240800000000C7042400000000E800000000E8000000008B44240883C40CC3" # |....D$.......$...............D$.....|
+COFF-I386-NEXT: - Name: .text
+COFF-I386-NEXT: Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+COFF-I386-NEXT: Alignment: 16
+COFF-I386-NEXT: SectionData: 83EC0CC744240800000000C7042400000000E800000000E8000000008B44240883C40CC3
COFF-I386: Relocations:
-COFF-I386-NEXT: - !Relocation
-COFF-I386-NEXT: VirtualAddress: 0xe
-COFF-I386-NEXT: SymbolTableIndex: 5
+COFF-I386-NEXT: - VirtualAddress: 14
+COFF-I386-NEXT: SymbolName: L_.str
COFF-I386-NEXT: Type: IMAGE_REL_I386_DIR32
-COFF-I386: - !Relocation
-COFF-I386-NEXT: VirtualAddress: 0x13
-COFF-I386-NEXT: SymbolTableIndex: 6
+COFF-I386: - VirtualAddress: 19
+COFF-I386-NEXT: SymbolName: _puts
COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32
-COFF-I386: - !Relocation
-COFF-I386-NEXT: VirtualAddress: 0x18
-COFF-I386-NEXT: SymbolTableIndex: 7
+COFF-I386: - VirtualAddress: 24
+COFF-I386-NEXT: SymbolName: _SomeOtherFunction
COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32
-COFF-I386: - !Section
-COFF-I386-NEXT: Name: .data
-COFF-I386-NEXT: Characteristics: [IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, ] # 0xc0100040
-COFF-I386-NEXT: SectionData: !hex "48656C6C6F20576F726C642100" # |Hello World!.|
+COFF-I386: - Name: .data
+COFF-I386-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+COFF-I386-NEXT: Alignment: 1
+COFF-I386-NEXT: SectionData: 48656C6C6F20576F726C642100
COFF-I386: symbols:
-COFF-I386-NEXT: - !Symbol
-COFF-I386-NEXT: Name: .text
+COFF-I386-NEXT: - Name: .text
COFF-I386-NEXT: Value: 0
COFF-I386-NEXT: SectionNumber: 1
-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC
COFF-I386-NEXT: NumberOfAuxSymbols: 1
-COFF-I386-NEXT: AuxillaryData: !hex "240000000300000000000000010000000000" # |$.................|
+COFF-I386-NEXT: AuxiliaryData: 240000000300000000000000010000000000
-COFF-I386: - !Symbol
-COFF-I386-NEXT: Name: .data
+COFF-I386: - Name: .data
COFF-I386-NEXT: Value: 0
COFF-I386-NEXT: SectionNumber: 2
-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC
COFF-I386-NEXT: NumberOfAuxSymbols: 1
-COFF-I386-NEXT: AuxillaryData: !hex "0D0000000000000000000000020000000000" # |..................|
+COFF-I386-NEXT: AuxiliaryData: 0D0000000000000000000000020000000000
-COFF-I386: - !Symbol
-COFF-I386-NEXT: Name: _main
+COFF-I386: - Name: _main
COFF-I386-NEXT: Value: 0
COFF-I386-NEXT: SectionNumber: 1
-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_FUNCTION # (2)
-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-COFF-I386: - !Symbol
-COFF-I386-NEXT: Name: L_.str
+COFF-I386: - Name: L_.str
COFF-I386-NEXT: Value: 0
COFF-I386-NEXT: SectionNumber: 2
-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC
-COFF-I386: - !Symbol
-COFF-I386-NEXT: Name: _puts
+COFF-I386: - Name: _puts
COFF-I386-NEXT: Value: 0
COFF-I386-NEXT: SectionNumber: 0
-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-COFF-I386: - !Symbol
-COFF-I386-NEXT: Name: _SomeOtherFunction
+COFF-I386: - Name: _SomeOtherFunction
COFF-I386-NEXT: Value: 0
COFF-I386-NEXT: SectionNumber: 0
-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-COFF-X86-64: header: !Header
-COFF-X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 # (0x8664)
+COFF-X86-64: header:
+COFF-X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64
COFF-X86-64: sections:
-COFF-X86-64-NEXT: - !Section
-COFF-X86-64-NEXT: Name: .text
-COFF-X86-64-NEXT: Characteristics: [IMAGE_SCN_CNT_CODE, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ, ] # 0x60500020
-COFF-X86-64-NEXT: SectionData: !hex "4883EC28C744242400000000488D0D00000000E800000000E8000000008B4424244883C428C3" # |H..(.D$$....H.................D$$H..(.|
+COFF-X86-64-NEXT: - Name: .text
+COFF-X86-64-NEXT: Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+COFF-X86-64-NEXT: Alignment: 16
+COFF-X86-64-NEXT: SectionData: 4883EC28C744242400000000488D0D00000000E800000000E8000000008B4424244883C428C3
COFF-X86-64: Relocations:
-COFF-X86-64-NEXT: - !Relocation
-COFF-X86-64-NEXT: VirtualAddress: 0xf
-COFF-X86-64-NEXT: SymbolTableIndex: 5
+COFF-X86-64-NEXT: - VirtualAddress: 15
+COFF-X86-64-NEXT: SymbolName: L.str
COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32
-COFF-X86-64: - !Relocation
-COFF-X86-64-NEXT: VirtualAddress: 0x14
-COFF-X86-64-NEXT: SymbolTableIndex: 6
+COFF-X86-64: - VirtualAddress: 20
+COFF-X86-64-NEXT: SymbolName: puts
COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32
-COFF-X86-64: - !Relocation
-COFF-X86-64-NEXT: VirtualAddress: 0x19
-COFF-X86-64-NEXT: SymbolTableIndex: 7
+COFF-X86-64: - VirtualAddress: 25
+COFF-X86-64-NEXT: SymbolName: SomeOtherFunction
COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32
-COFF-X86-64: - !Section
-COFF-X86-64-NEXT: Name: .data
-COFF-X86-64-NEXT: Characteristics: [IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, ] # 0xc0100040
-COFF-X86-64-NEXT: SectionData: !hex "48656C6C6F20576F726C642100" # |Hello World!.|
+COFF-X86-64: - Name: .data
+COFF-X86-64-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+COFF-X86-64-NEXT: Alignment: 1
+COFF-X86-64-NEXT: SectionData: 48656C6C6F20576F726C642100
COFF-X86-64: symbols:
-COFF-X86-64-NEXT: - !Symbol
-COFF-X86-64-NEXT: Name: .text
+COFF-X86-64-NEXT: - Name: .text
COFF-X86-64-NEXT: Value: 0
COFF-X86-64-NEXT: SectionNumber: 1
-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC
COFF-X86-64-NEXT: NumberOfAuxSymbols: 1
-COFF-X86-64-NEXT: AuxillaryData: !hex "260000000300000000000000010000000000" # |&.................|
+COFF-X86-64-NEXT: AuxiliaryData: 260000000300000000000000010000000000
-COFF-X86-64: - !Symbol
-COFF-X86-64-NEXT: Name: .data
+COFF-X86-64: - Name: .data
COFF-X86-64-NEXT: Value: 0
COFF-X86-64-NEXT: SectionNumber: 2
-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC
COFF-X86-64-NEXT: NumberOfAuxSymbols: 1
-COFF-X86-64-NEXT: AuxillaryData: !hex "0D0000000000000000000000020000000000" # |..................|
+COFF-X86-64-NEXT: AuxiliaryData: 0D0000000000000000000000020000000000
-COFF-X86-64: - !Symbol
-COFF-X86-64-NEXT: Name: main
+COFF-X86-64: - Name: main
COFF-X86-64-NEXT: Value: 0
COFF-X86-64-NEXT: SectionNumber: 1
-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-COFF-X86-64: - !Symbol
-COFF-X86-64-NEXT: Name: L.str
+COFF-X86-64: - Name: L.str
COFF-X86-64-NEXT: Value: 0
COFF-X86-64-NEXT: SectionNumber: 2
-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC
-COFF-X86-64: - !Symbol
-COFF-X86-64-NEXT: Name: puts
+COFF-X86-64: - Name: puts
COFF-X86-64-NEXT: Value: 0
COFF-X86-64-NEXT: SectionNumber: 0
-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-COFF-X86-64: - !Symbol
-COFF-X86-64-NEXT: Name: SomeOtherFunction
+COFF-X86-64: - Name: SomeOtherFunction
COFF-X86-64-NEXT: Value: 0
COFF-X86-64-NEXT: SectionNumber: 0
-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)
-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL
+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL
+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+COFF-X86-64-NOT: NumberOfAuxSymbols
diff --git a/test/Object/relocation-executable.test b/test/Object/relocation-executable.test
index 98f5b4ee2fd62..1236035d9f683 100644
--- a/test/Object/relocation-executable.test
+++ b/test/Object/relocation-executable.test
@@ -2,17 +2,25 @@ RUN: llvm-readobj -r -expand-relocs %p/Inputs/hello-world.elf-x86-64 \
RUN: | FileCheck %s
// CHECK: Relocations [
-// CHECK: Section (11) .plt {
+// CHECK-NEXT: Section (8) .rela.dyn {
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset: 0x4018D8
+// CHECK-NEXT: Type: R_X86_64_GLOB_DAT (6)
+// CHECK-NEXT: Symbol: __gmon_start__
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: }
+// CHECK-NEXT: Section (9) .rela.plt {
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x4018F8
// CHECK-NEXT: Type: R_X86_64_JUMP_SLOT (7)
// CHECK-NEXT: Symbol: __libc_start_main
-// CHECK-NEXT: Info: 0x0
+// CHECK-NEXT: Addend: 0x0
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x401900
// CHECK-NEXT: Type: R_X86_64_JUMP_SLOT (7)
// CHECK-NEXT: Symbol: puts
-// CHECK-NEXT: Info: 0x0
+// CHECK-NEXT: Addend: 0x0
// CHECK-NEXT: }
// CHECK-NEXT: }
diff --git a/test/Object/yaml2obj-elf-bits-endian.test b/test/Object/yaml2obj-elf-bits-endian.test
new file mode 100644
index 0000000000000..4be9a4465b813
--- /dev/null
+++ b/test/Object/yaml2obj-elf-bits-endian.test
@@ -0,0 +1,16 @@
+RUN: yaml2obj -format=elf %p/Inputs/ELF/LE64.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix LE64
+RUN: yaml2obj -format=elf %p/Inputs/ELF/BE64.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix BE64
+RUN: yaml2obj -format=elf %p/Inputs/ELF/LE32.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix LE32
+RUN: yaml2obj -format=elf %p/Inputs/ELF/BE32.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix BE32
+
+LE64: Class: 64-bit (0x2)
+LE64-NEXT: DataEncoding: LittleEndian (0x1)
+
+BE64: Class: 64-bit (0x2)
+BE64-NEXT: DataEncoding: BigEndian (0x2)
+
+LE32: Class: 32-bit (0x1)
+LE32-NEXT: DataEncoding: LittleEndian (0x1)
+
+BE32: Class: 32-bit (0x1)
+BE32-NEXT: DataEncoding: BigEndian (0x2)
diff --git a/test/Object/yaml2obj-elf-file-headers.yaml b/test/Object/yaml2obj-elf-file-headers.yaml
new file mode 100644
index 0000000000000..285170170a20c
--- /dev/null
+++ b/test/Object/yaml2obj-elf-file-headers.yaml
@@ -0,0 +1,11 @@
+# RUN: yaml2obj -format=elf %s | llvm-readobj -file-headers - | FileCheck %s
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+
+# CHECK: OS/ABI: GNU/Linux
+# CHECK: Type: Relocatable
diff --git a/test/Object/yaml2obj-elf-section-basic.yaml b/test/Object/yaml2obj-elf-section-basic.yaml
new file mode 100644
index 0000000000000..34be11d3658cc
--- /dev/null
+++ b/test/Object/yaml2obj-elf-section-basic.yaml
@@ -0,0 +1,35 @@
+# RUN: yaml2obj -format=elf %s | llvm-readobj -sections -section-data - | FileCheck %s
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0xCAFEBABE
+ Link: .text # Doesn't make sense for SHT_PROGBITS, but good enough for test.
+ Content: EBFE
+ AddressAlign: 2
+
+# CHECK: Section {
+# CHECK: Index: 0
+# CHECK: Type: SHT_NULL (0x0)
+#
+# CHECK: Section {
+# CHECK: Name: .text
+# CHECK: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_EXECINSTR (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0xCAFEBABE
+# CHECK: Size: 2
+# Check that Link != 0.
+# CHECK: Link: {{[1-9][0-9]*}}
+# CHECK: AddressAlignment: 2
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: EBFE
+# CHECK-NEXT: )
diff --git a/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml b/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml
new file mode 100644
index 0000000000000..3c4e830c0df64
--- /dev/null
+++ b/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml
@@ -0,0 +1,37 @@
+# RUN: yaml2obj -format=elf %s | llvm-readobj -symbols - | FileCheck %s
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_WRITE ]
+ Content: "DEADBEEF"
+Symbols:
+ Local:
+ - Name: local_symbol
+ Type: STT_OBJECT
+ Section: .data
+ Global:
+ - Name: global_symbol
+ Type: STT_OBJECT
+ Section: .data
+ Weak:
+ - Name: weak_symbol
+ Type: STT_OBJECT
+ Section: .data
+
+# CHECK: Symbol {
+# CHECK: Name: (0)
+# CHECK: Symbol {
+# CHECK: Name: local_symbol
+# CHECK: Binding: Local
+# CHECK: Symbol {
+# CHECK: Name: global_symbol
+# CHECK: Binding: Global
+# CHECK: Symbol {
+# CHECK: Name: weak_symbol
+# CHECK: Binding: Weak
diff --git a/test/Object/yaml2obj-elf-symbol-basic.yaml b/test/Object/yaml2obj-elf-symbol-basic.yaml
new file mode 100644
index 0000000000000..3fb9b17655fd8
--- /dev/null
+++ b/test/Object/yaml2obj-elf-symbol-basic.yaml
@@ -0,0 +1,40 @@
+# RUN: yaml2obj -format=elf %s | llvm-readobj -symbols - | FileCheck %s
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Content: "90EBFE" # x86 machine code
+ # NOP ; To make main's `Value` non-zero (for testing).
+ # main:
+ # JMP -2 ; (infloop)
+ # This YAML file is a valid relocatable object that,
+ # when linked and run on x86_64, will go into an
+ # infloop.
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1
+ Size: 2
+ - Name: undefined_symbol
+
+# CHECK: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK: Symbol {
+# CHECK-NEXT: Name: main
+# CHECK-NEXT: Value: 0x1
+# CHECK-NEXT: Size: 2
+# CHECK: Binding: Global
+# CHECK-NEXT: Type: Function
+# CHECK: Section: .text
+# CHECK: Symbol {
+# CHECK: Name: undefined_symbol
+# CHECK: Section: (0x0)