aboutsummaryrefslogtreecommitdiffstats
path: root/test/Object
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/Object
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/Object')
-rw-r--r--test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml10
-rw-r--r--test/Object/Inputs/archive-test.a-irix6-mips64elbin0 -> 6608 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-bad-symbol-indexbin0 -> 4536 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-getsection-indexbin0 -> 316 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-no-size-for-sectionsbin0 -> 104 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentNamebin0 -> 4536 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-section-index-getSectionRawNamebin0 -> 4536 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-symbol-name-past-eofbin0 -> 4536 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-too-small-load-commandbin0 -> 36 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-too-small-segment-load-commandbin0 -> 104 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-zero-ncmdsbin0 -> 32 bytes
-rwxr-xr-xtest/Object/Inputs/macho-no-exports.dylibbin0 -> 4208 bytes
-rwxr-xr-xtest/Object/Inputs/macho-rpath-x86_64bin0 -> 4296 bytes
-rw-r--r--test/Object/Inputs/macho64-invalid-getsection-indexbin0 -> 4536 bytes
-rw-r--r--test/Object/Inputs/macho64-invalid-incomplete-load-commandbin0 -> 36 bytes
-rw-r--r--test/Object/Inputs/macho64-invalid-no-size-for-sectionsbin0 -> 104 bytes
-rw-r--r--test/Object/Inputs/macho64-invalid-too-small-load-commandbin0 -> 40 bytes
-rw-r--r--test/Object/Inputs/macho64-invalid-too-small-segment-load-commandbin0 -> 104 bytes
-rwxr-xr-xtest/Object/Inputs/micro-mips.elf-mipselbin0 -> 2394 bytes
-rw-r--r--test/Object/Inputs/sectionGroup.elf.x86-64bin0 -> 1512 bytes
-rw-r--r--test/Object/Inputs/thin.abin0 -> 474 bytes
-rw-r--r--test/Object/Mips/elf-mips64-rel.yaml113
-rw-r--r--test/Object/Mips/objdump-micro-mips.test12
-rw-r--r--test/Object/archive-toc.test8
-rw-r--r--test/Object/elf-unknown-type.test10
-rw-r--r--test/Object/macho-invalid.test51
-rw-r--r--test/Object/nm-irix6.test27
-rw-r--r--test/Object/obj2yaml-sectiongroup.test26
-rw-r--r--test/Object/obj2yaml.test8
-rw-r--r--test/Object/objdump-export-list.test4
-rw-r--r--test/Object/objdump-private-headers.test7
31 files changed, 266 insertions, 10 deletions
diff --git a/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml b/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml
index 6147025..c27e888 100644
--- a/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml
+++ b/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml
@@ -10,7 +10,9 @@
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: main
# CHECK-NEXT: Type: R_AARCH64_ABS64
-# CHECK-NEXT: Addend: 0
+# CHECK-NEXT: - Offset: 0x0000000000000008
+# CHECK-NEXT: Symbol: main
+# CHECK-NEXT: Type: R_AARCH64_TLSGD_ADR_PREL21
FileHeader:
Class: ELFCLASS64
@@ -22,7 +24,7 @@ Sections:
Name: .text
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x04
- Content: 0000000000000000
+ Content: 00000000000000000000000000000000
- Type: SHT_RELA
Name: .rela.text
Link: .symtab
@@ -33,6 +35,10 @@ Sections:
Symbol: main
Type: R_AARCH64_ABS64
Addend: 0
+ - Offset: 8
+ Symbol: main
+ Type: R_AARCH64_TLSGD_ADR_PREL21
+ Addend: 0
Symbols:
Local:
diff --git a/test/Object/Inputs/archive-test.a-irix6-mips64el b/test/Object/Inputs/archive-test.a-irix6-mips64el
new file mode 100644
index 0000000..ccc2634
--- /dev/null
+++ b/test/Object/Inputs/archive-test.a-irix6-mips64el
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-bad-symbol-index b/test/Object/Inputs/macho-invalid-bad-symbol-index
new file mode 100644
index 0000000..294bbde
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-bad-symbol-index
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-getsection-index b/test/Object/Inputs/macho-invalid-getsection-index
new file mode 100644
index 0000000..b7e4b95
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-getsection-index
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-no-size-for-sections b/test/Object/Inputs/macho-invalid-no-size-for-sections
new file mode 100644
index 0000000..89fa95a
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-no-size-for-sections
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName b/test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName
new file mode 100644
index 0000000..e3f6586
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-section-index-getSectionRawName b/test/Object/Inputs/macho-invalid-section-index-getSectionRawName
new file mode 100644
index 0000000..9cd3e1c
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-section-index-getSectionRawName
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-symbol-name-past-eof b/test/Object/Inputs/macho-invalid-symbol-name-past-eof
new file mode 100644
index 0000000..8747884
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-symbol-name-past-eof
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-too-small-load-command b/test/Object/Inputs/macho-invalid-too-small-load-command
new file mode 100644
index 0000000..3602169
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-too-small-load-command
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-too-small-segment-load-command b/test/Object/Inputs/macho-invalid-too-small-segment-load-command
new file mode 100644
index 0000000..8cbfbf9
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-too-small-segment-load-command
Binary files differ
diff --git a/test/Object/Inputs/macho-invalid-zero-ncmds b/test/Object/Inputs/macho-invalid-zero-ncmds
new file mode 100644
index 0000000..0505419
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-zero-ncmds
Binary files differ
diff --git a/test/Object/Inputs/macho-no-exports.dylib b/test/Object/Inputs/macho-no-exports.dylib
new file mode 100755
index 0000000..6e1be6c
--- /dev/null
+++ b/test/Object/Inputs/macho-no-exports.dylib
Binary files differ
diff --git a/test/Object/Inputs/macho-rpath-x86_64 b/test/Object/Inputs/macho-rpath-x86_64
new file mode 100755
index 0000000..c518fcd
--- /dev/null
+++ b/test/Object/Inputs/macho-rpath-x86_64
Binary files differ
diff --git a/test/Object/Inputs/macho64-invalid-getsection-index b/test/Object/Inputs/macho64-invalid-getsection-index
new file mode 100644
index 0000000..a2a7bc1
--- /dev/null
+++ b/test/Object/Inputs/macho64-invalid-getsection-index
Binary files differ
diff --git a/test/Object/Inputs/macho64-invalid-incomplete-load-command b/test/Object/Inputs/macho64-invalid-incomplete-load-command
new file mode 100644
index 0000000..a569c9e
--- /dev/null
+++ b/test/Object/Inputs/macho64-invalid-incomplete-load-command
Binary files differ
diff --git a/test/Object/Inputs/macho64-invalid-no-size-for-sections b/test/Object/Inputs/macho64-invalid-no-size-for-sections
new file mode 100644
index 0000000..5aae5ff
--- /dev/null
+++ b/test/Object/Inputs/macho64-invalid-no-size-for-sections
Binary files differ
diff --git a/test/Object/Inputs/macho64-invalid-too-small-load-command b/test/Object/Inputs/macho64-invalid-too-small-load-command
new file mode 100644
index 0000000..0028451
--- /dev/null
+++ b/test/Object/Inputs/macho64-invalid-too-small-load-command
Binary files differ
diff --git a/test/Object/Inputs/macho64-invalid-too-small-segment-load-command b/test/Object/Inputs/macho64-invalid-too-small-segment-load-command
new file mode 100644
index 0000000..ce6a201
--- /dev/null
+++ b/test/Object/Inputs/macho64-invalid-too-small-segment-load-command
Binary files differ
diff --git a/test/Object/Inputs/micro-mips.elf-mipsel b/test/Object/Inputs/micro-mips.elf-mipsel
new file mode 100755
index 0000000..80b8472
--- /dev/null
+++ b/test/Object/Inputs/micro-mips.elf-mipsel
Binary files differ
diff --git a/test/Object/Inputs/sectionGroup.elf.x86-64 b/test/Object/Inputs/sectionGroup.elf.x86-64
new file mode 100644
index 0000000..b88ad0c
--- /dev/null
+++ b/test/Object/Inputs/sectionGroup.elf.x86-64
Binary files differ
diff --git a/test/Object/Inputs/thin.a b/test/Object/Inputs/thin.a
new file mode 100644
index 0000000..bb9d532
--- /dev/null
+++ b/test/Object/Inputs/thin.a
Binary files differ
diff --git a/test/Object/Mips/elf-mips64-rel.yaml b/test/Object/Mips/elf-mips64-rel.yaml
new file mode 100644
index 0000000..8b59509
--- /dev/null
+++ b/test/Object/Mips/elf-mips64-rel.yaml
@@ -0,0 +1,113 @@
+# RUN: yaml2obj -format=elf %s > %t
+# RUN: llvm-readobj -r %t | FileCheck -check-prefix=OBJ %s
+# RUN: obj2yaml %t | FileCheck -check-prefix=YAML %s
+
+# OBJ: Relocations [
+# OBJ-NEXT: Section (2) .rela.text {
+# OBJ-NEXT: 0x14 R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 main 0x4
+# OBJ-NEXT: 0x1C R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 main 0x8
+# OBJ-NEXT: 0x20 R_MIPS_GOT_PAGE/R_MIPS_NONE/R_MIPS_NONE .rodata 0x0
+# OBJ-NEXT: 0x24 R_MIPS_GOT_OFST/R_MIPS_NONE/R_MIPS_NONE .rodata 0x0
+# OBJ-NEXT: 0x28 R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE printf 0x0
+# OBJ-NEXT: 0x30 R_MIPS_GPREL16/R_MIPS_LO16/R_MIPS_NONE printf 0x0
+# OBJ-NEXT: }
+# OBJ-NEXT: ]
+
+# YAML: Relocations:
+# YAML-NEXT: - Offset: 0x0000000000000014
+# YAML-NEXT: Symbol: main
+# YAML-NEXT: Type: R_MIPS_GPREL16
+# YAML-NEXT: Type2: R_MIPS_SUB
+# YAML-NEXT: Type3: R_MIPS_HI16
+# YAML-NEXT: Addend: 4
+# YAML-NEXT: - Offset: 0x000000000000001C
+# YAML-NEXT: Symbol: main
+# YAML-NEXT: Type: R_MIPS_GPREL16
+# YAML-NEXT: Type2: R_MIPS_SUB
+# YAML-NEXT: Type3: R_MIPS_LO16
+# YAML-NEXT: Addend: 8
+# YAML-NEXT: - Offset: 0x0000000000000020
+# YAML-NEXT: Symbol: .rodata
+# YAML-NEXT: Type: R_MIPS_GOT_PAGE
+# YAML-NEXT: - Offset: 0x0000000000000024
+# YAML-NEXT: Symbol: .rodata
+# YAML-NEXT: Type: R_MIPS_GOT_OFST
+# YAML-NEXT: - Offset: 0x0000000000000028
+# YAML-NEXT: Symbol: printf
+# YAML-NEXT: Type: R_MIPS_CALL16
+# YAML-NEXT: - Offset: 0x0000000000000030
+# YAML-NEXT: Symbol: printf
+# YAML-NEXT: Type: R_MIPS_GPREL16
+# YAML-NEXT: Type2: R_MIPS_LO16
+# YAML-NEXT: SpecSym: RSS_GP0
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_NOREORDER, EF_MIPS_ARCH_64R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x60
+ - Name: .rela.text
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Info: .text
+ Relocations:
+ - Offset: 0x14
+ Symbol: main
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_SUB
+ Type3: R_MIPS_HI16
+ Addend: 4
+ - Offset: 0x1C
+ Symbol: main
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_SUB
+ Type3: R_MIPS_LO16
+ Addend: 8
+ - Offset: 0x20
+ Symbol: .rodata
+ Type: R_MIPS_GOT_PAGE
+ Addend: 0
+ - Offset: 0x24
+ Symbol: .rodata
+ Type: R_MIPS_GOT_OFST
+ Addend: 0
+ - Offset: 0x28
+ Symbol: printf
+ Type: R_MIPS_CALL16
+ Addend: 0
+ - Offset: 0x30
+ Symbol: printf
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_LO16
+ SpecSym: RSS_GP0
+ Addend: 0
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x10
+ Size: 0x0F
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x58
+ - Name: printf
+...
diff --git a/test/Object/Mips/objdump-micro-mips.test b/test/Object/Mips/objdump-micro-mips.test
new file mode 100644
index 0000000..0f28dc1
--- /dev/null
+++ b/test/Object/Mips/objdump-micro-mips.test
@@ -0,0 +1,12 @@
+RUN: llvm-objdump -d -mattr=micromips %p/../Inputs/micro-mips.elf-mipsel \
+RUN: | FileCheck %s
+
+CHECK: foo:
+CHECK-NEXT: 330: bd 33 f8 ff addiu $sp, $sp, -8
+CHECK-NEXT: 334: dd fb 04 00 sw $fp, 4($sp)
+CHECK-NEXT: 338: 1d 00 50 f1 addu $fp, $sp, $zero
+
+CHECK: bar:
+CHECK-NEXT: 350: a2 41 02 00 lui $2, 2
+CHECK-NEXT: 354: 42 30 8f 80 addiu $2, $2, -32625
+CHECK-NEXT: 358: bd 33 e8 ff addiu $sp, $sp, -24
diff --git a/test/Object/archive-toc.test b/test/Object/archive-toc.test
index 4195c40..79a6e0e 100644
--- a/test/Object/archive-toc.test
+++ b/test/Object/archive-toc.test
@@ -26,3 +26,11 @@ CHECK: rw-r--r-- 1002/102 8 2004-11-19 03:24:02.000000000 evenlen
CHECK-NEXT: rw-r--r-- 1002/102 7 2004-11-19 03:24:02.000000000 oddlen
CHECK-NEXT: rwxr-xr-x 1002/102 1465 2004-11-19 03:24:02.000000000 very_long_bytecode_file_name.bc
CHECK-NEXT: rw-r--r-- 1002/102 2280 2004-11-19 03:24:02.000000000 IsNAN.o
+
+Test reading a thin archive created by gnu ar
+RUN: env TZ=GMT llvm-ar tv %p/Inputs/thin.a | FileCheck %s --check-prefix=THIN -strict-whitespace
+
+THIN: rw-r--r-- 1000/1000 8 2014-12-16 00:56:27.000000000 evenlen
+THIN-NEXT: rw-r--r-- 1000/1000 7 2014-12-16 00:56:27.000000000 oddlen
+THIN-NEXT: rwxr-xr-x 1000/1000 1465 2014-12-16 00:56:27.000000000 very_long_bytecode_file_name.bc
+THIN-NEXT: rw-r--r-- 1000/1000 2280 2014-12-16 00:56:27.000000000 IsNAN.o
diff --git a/test/Object/elf-unknown-type.test b/test/Object/elf-unknown-type.test
new file mode 100644
index 0000000..9993c09
--- /dev/null
+++ b/test/Object/elf-unknown-type.test
@@ -0,0 +1,10 @@
+# RUN: yaml2obj -format=elf %s | llvm-readobj -file-headers - | FileCheck %s
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: 42
+ Machine: EM_X86_64
+
+# CHECK: Type: 0x2A
diff --git a/test/Object/macho-invalid.test b/test/Object/macho-invalid.test
new file mode 100644
index 0000000..ac4bbeb
--- /dev/null
+++ b/test/Object/macho-invalid.test
@@ -0,0 +1,51 @@
+// No crash, might not be totally invalid
+RUN: llvm-objdump -private-headers %p/Inputs/macho-invalid-zero-ncmds
+
+RUN: not llvm-objdump -private-headers %p/Inputs/macho64-invalid-incomplete-load-command 2>&1 \
+RUN: | FileCheck -check-prefix INCOMPLETE-LOADC %s
+
+RUN: not llvm-objdump -private-headers %p/Inputs/macho-invalid-too-small-load-command 2>&1 \
+RUN: | FileCheck -check-prefix SMALL-LOADC-SIZE %s
+RUN: not llvm-objdump -private-headers %p/Inputs/macho64-invalid-too-small-load-command 2>&1 \
+RUN: | FileCheck -check-prefix SMALL-LOADC-SIZE %s
+
+RUN: not llvm-objdump -private-headers %p/Inputs/macho-invalid-too-small-segment-load-command 2>&1 \
+RUN: | FileCheck -check-prefix SMALL-SEGLOADC-SIZE %s
+RUN: not llvm-objdump -private-headers %p/Inputs/macho64-invalid-too-small-segment-load-command 2>&1 \
+RUN: | FileCheck -check-prefix SMALL-SEGLOADC-SIZE %s
+
+RUN: not llvm-objdump -private-headers %p/Inputs/macho-invalid-no-size-for-sections 2>&1 \
+RUN: | FileCheck -check-prefix TOO-MANY-SECTS %s
+RUN: not llvm-objdump -private-headers %p/Inputs/macho64-invalid-no-size-for-sections 2>&1 \
+RUN: | FileCheck -check-prefix TOO-MANY-SECTS %s
+
+RUN: not llvm-objdump -t %p/Inputs/macho-invalid-bad-symbol-index 2>&1 \
+RUN: | FileCheck -check-prefix BAD-SYMBOL %s
+
+RUN: not llvm-objdump -t %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \
+RUN: | FileCheck -check-prefix NAME-PAST-EOF %s
+
+RUN: not llvm-objdump -t %p/Inputs/macho-invalid-section-index-getSectionRawFinalSegmentName 2>&1 \
+RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SEG-NAME %s
+
+RUN: not llvm-nm %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
+RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SECT-NAME %s
+
+RUN: not llvm-objdump -t %p/Inputs/macho-invalid-getsection-index 2>&1 \
+RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-GETSECT %s
+
+RUN: not llvm-objdump -t %p/Inputs/macho64-invalid-getsection-index 2>&1 \
+RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-GETSECT64 %s
+
+
+SMALL-LOADC-SIZE: Load command with size < 8 bytes
+SMALL-SEGLOADC-SIZE: Segment load command size is too small
+INCOMPLETE-LOADC: Malformed MachO file
+TOO-MANY-SECTS: Number of sections too large for size of load command
+BAD-SYMBOL: Requested symbol index is out of range
+NAME-PAST-EOF: Symbol name entry points before beginning or past end of file
+
+INVALID-SECTION-IDX-SEG-NAME: getSectionRawFinalSegmentName: Invalid section index
+INVALID-SECTION-IDX-SECT-NAME: getSectionRawName: Invalid section index
+INVALID-SECTION-IDX-GETSECT: getSection: Invalid section index
+INVALID-SECTION-IDX-GETSECT64: getSection64: Invalid section index
diff --git a/test/Object/nm-irix6.test b/test/Object/nm-irix6.test
new file mode 100644
index 0000000..047665c
--- /dev/null
+++ b/test/Object/nm-irix6.test
@@ -0,0 +1,27 @@
+# Check reading IRIX 6.0 64-bit archive file.
+RUN: llvm-nm %p/Inputs/archive-test.a-irix6-mips64el | FileCheck %s
+
+CHECK: f1.o:
+CHECK-NEXT: 00000028 T f1
+CHECK-NEXT: 00000000 d s_d
+CHECK-NEXT: 00000000 t s_foo
+
+CHECK: f2.o:
+CHECK-NEXT: 00000028 T f2
+CHECK-NEXT: 00000000 d s_d
+CHECK-NEXT: 00000000 t s_foo
+
+CHECK: f3.o:
+CHECK-NEXT: 00000028 T f3
+CHECK-NEXT: 00000000 d s_d
+CHECK-NEXT: 00000000 t s_foo
+
+CHECK: f4.o:
+CHECK-NEXT: 00000028 T f4
+CHECK-NEXT: 00000000 d s_d
+CHECK-NEXT: 00000000 t s_foo
+
+CHECK: f5.o:
+CHECK-NEXT: 00000028 T f5
+CHECK-NEXT: 00000000 d s_d
+CHECK-NEXT: 00000000 t s_foo
diff --git a/test/Object/obj2yaml-sectiongroup.test b/test/Object/obj2yaml-sectiongroup.test
new file mode 100644
index 0000000..66e8e38
--- /dev/null
+++ b/test/Object/obj2yaml-sectiongroup.test
@@ -0,0 +1,26 @@
+# Checks that the tool is able to read section groups with ELF.
+RUN: obj2yaml %p/Inputs/sectionGroup.elf.x86-64 > %t1.sectiongroup.yaml
+RUN: FileCheck %s --check-prefix ELF-GROUP < %t1.sectiongroup.yaml
+RUN: yaml2obj -format=elf %t1.sectiongroup.yaml -o %t2.o.elf
+RUN: llvm-readobj -sections %t2.o.elf | FileCheck %s -check-prefix=SECTIONS
+#ELF-GROUP: - Name: .group
+#ELF-GROUP: Type: SHT_GROUP
+#ELF-GROUP: Link: .symtab
+#ELF-GROUP: Info: a
+#ELF-GROUP: Members:
+#ELF-GROUP: - SectionOrType: GRP_COMDAT
+#ELF-GROUP: - SectionOrType: .rodata.a
+#SECTIONS: Format: ELF64-x86-64
+#SECTIONS: Arch: x86_64
+#SECTIONS: AddressSize: 64bit
+#SECTIONS: Section {
+#SECTIONS: Index: 1
+#SECTIONS: Name: .group (21)
+#SECTIONS: Type: SHT_GROUP (0x11)
+#SECTIONS: Flags [ (0x0)
+#SECTIONS: ]
+#SECTIONS: Address: 0x0
+#SECTIONS: Size: 8
+#SECTIONS: AddressAlignment: 4
+#SECTIONS: EntrySize: 4
+#SECTIONS: }
diff --git a/test/Object/obj2yaml.test b/test/Object/obj2yaml.test
index 1c79e98..e654dcd 100644
--- a/test/Object/obj2yaml.test
+++ b/test/Object/obj2yaml.test
@@ -210,27 +210,21 @@ ELF-MIPSEL-NEXT: Relocations:
ELF-MIPSEL-NEXT: - Offset: 0x0000000000000000
ELF-MIPSEL-NEXT: Symbol: _gp_disp
ELF-MIPSEL-NEXT: Type: R_MIPS_HI16
-ELF-MIPSEL-NEXT: Addend: 0
ELF-MIPSEL-NEXT: - Offset: 0x0000000000000004
ELF-MIPSEL-NEXT: Symbol: _gp_disp
ELF-MIPSEL-NEXT: Type: R_MIPS_LO16
-ELF-MIPSEL-NEXT: Addend: 0
ELF-MIPSEL-NEXT: - Offset: 0x0000000000000018
ELF-MIPSEL-NEXT: Symbol: '$.str'
ELF-MIPSEL-NEXT: Type: R_MIPS_GOT16
-ELF-MIPSEL-NEXT: Addend: 0
ELF-MIPSEL-NEXT: - Offset: 0x000000000000001C
ELF-MIPSEL-NEXT: Symbol: '$.str'
ELF-MIPSEL-NEXT: Type: R_MIPS_LO16
-ELF-MIPSEL-NEXT: Addend: 0
ELF-MIPSEL-NEXT: - Offset: 0x0000000000000020
ELF-MIPSEL-NEXT: Symbol: puts
ELF-MIPSEL-NEXT: Type: R_MIPS_CALL16
-ELF-MIPSEL-NEXT: Addend: 0
ELF-MIPSEL-NEXT: - Offset: 0x000000000000002C
ELF-MIPSEL-NEXT: Symbol: SomeOtherFunction
ELF-MIPSEL-NEXT: Type: R_MIPS_CALL16
-ELF-MIPSEL-NEXT: Addend: 0
ELF-MIPSEL-NEXT: - Name: .data
ELF-MIPSEL-NEXT: Type: SHT_PROGBITS
ELF-MIPSEL-NEXT: Flags: [ SHF_WRITE, SHF_ALLOC ]
@@ -328,7 +322,6 @@ ELF-MIPS64EL-NEXT: Relocations:
ELF-MIPS64EL-NEXT: - Offset: 0
ELF-MIPS64EL-NEXT: Symbol: zed
ELF-MIPS64EL-NEXT: Type: R_MIPS_64
-ELF-MIPS64EL-NEXT: Addend: 0
ELF-MIPS64EL-NEXT: - Name: .bss
ELF-MIPS64EL-NEXT: Type: SHT_NOBITS
ELF-MIPS64EL-NEXT: Flags: [ SHF_WRITE, SHF_ALLOC ]
@@ -398,7 +391,6 @@ ELF-X86-64-NEXT: Relocations:
ELF-X86-64-NEXT: - Offset: 0x000000000000000D
ELF-X86-64-NEXT: Symbol: .rodata.str1.1
ELF-X86-64-NEXT: Type: R_X86_64_32S
-ELF-X86-64-NEXT: Addend: 0
ELF-X86-64-NEXT: - Offset: 0x0000000000000012
ELF-X86-64-NEXT: Symbol: puts
ELF-X86-64-NEXT: Type: R_X86_64_PC32
diff --git a/test/Object/objdump-export-list.test b/test/Object/objdump-export-list.test
new file mode 100644
index 0000000..74344c1
--- /dev/null
+++ b/test/Object/objdump-export-list.test
@@ -0,0 +1,4 @@
+RUN: llvm-objdump -exports-trie %p/Inputs/macho-no-exports.dylib | FileCheck %s
+
+; Test that we don't crash with an empty export list.
+CHECK: macho-no-exports.dylib: file format Mach-O 64-bit x86-64
diff --git a/test/Object/objdump-private-headers.test b/test/Object/objdump-private-headers.test
index c562044..d311bec 100644
--- a/test/Object/objdump-private-headers.test
+++ b/test/Object/objdump-private-headers.test
@@ -2,6 +2,8 @@ RUN: llvm-objdump -p %p/Inputs/program-headers.elf-i386 \
RUN: | FileCheck %s -check-prefix ELF-i386
RUN: llvm-objdump -p %p/Inputs/program-headers.elf-x86-64 \
RUN: | FileCheck %s -check-prefix ELF-x86-64
+RUN: llvm-objdump -p %p/Inputs/macho-rpath-x86_64 \
+RUN: | FileCheck %s -check-prefix MACHO-x86_64
ELF-i386: Program Header:
ELF-i386: LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
@@ -16,3 +18,8 @@ ELF-x86-64: EH_FRAME off 0x00000000000000f4 vaddr 0x00000000004000f4 paddr 0x
ELF-x86-64: filesz 0x0000000000000014 memsz 0x0000000000000014 flags r--
ELF-x86-64: STACK off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**3
ELF-x86-64: filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
+
+MACHO-x86_64: Load command 12
+MACHO-x86_64: cmd LC_RPATH
+MACHO-x86_64: cmdsize 32
+MACHO-x86_64: path @executable_path/. (offset 12)