aboutsummaryrefslogtreecommitdiff
path: root/test/Object
diff options
context:
space:
mode:
Diffstat (limited to 'test/Object')
-rw-r--r--test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml2
-rw-r--r--test/Object/Inputs/archive-test.a-irix6-mips64elbin0 -> 6608 bytes
-rwxr-xr-xtest/Object/Inputs/macho-empty-kext-bundle-x86-64bin0 -> 4288 bytes
-rw-r--r--test/Object/Inputs/macho-invalid-bad-symbol-indexbin0 -> 4536 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-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-ncmds (renamed from test/Object/Inputs/macho-zero-ncmds)bin32 -> 32 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/program-headers.mipsbin648 -> 992 bytes
-rw-r--r--test/Object/Inputs/sectionGroup.elf.x86-64bin0 -> 1512 bytes
-rw-r--r--test/Object/Inputs/trivial.ll2
-rw-r--r--test/Object/Mips/abi-flags.yaml63
-rw-r--r--test/Object/Mips/elf-abi.yaml136
-rw-r--r--test/Object/Mips/elf-flags.yaml52
-rw-r--r--test/Object/Mips/elf-mips64-rel.yaml113
-rw-r--r--test/Object/archive-delete.test2
-rw-r--r--test/Object/archive-extract-dir.test4
-rw-r--r--test/Object/archive-format.test11
-rw-r--r--test/Object/archive-move.test2
-rw-r--r--test/Object/archive-update.test2
-rw-r--r--test/Object/elf-unknown-type.test10
-rw-r--r--test/Object/extract.ll2
-rw-r--r--test/Object/kext.test7
-rw-r--r--test/Object/macho-invalid.test38
-rw-r--r--test/Object/nm-irix6.test27
-rw-r--r--test/Object/nm-trivial-object.test46
-rw-r--r--test/Object/obj2yaml-sectiongroup.test26
-rw-r--r--test/Object/obj2yaml.test15
-rw-r--r--test/Object/objdump-macho-quirks.test9
-rw-r--r--test/Object/objdump-symbol-table.test4
-rw-r--r--test/Object/yaml2obj-elf-rel-noref.yaml77
37 files changed, 594 insertions, 56 deletions
diff --git a/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml b/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml
index b8fb68113c76..c27e888a47c0 100644
--- a/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml
+++ b/test/Object/AArch64/yaml2obj-elf-aarch64-rel.yaml
@@ -10,11 +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
-# CHECK-NEXT: Addend: 0
FileHeader:
Class: ELFCLASS64
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 000000000000..ccc2634be7a2
--- /dev/null
+++ b/test/Object/Inputs/archive-test.a-irix6-mips64el
Binary files differ
diff --git a/test/Object/Inputs/macho-empty-kext-bundle-x86-64 b/test/Object/Inputs/macho-empty-kext-bundle-x86-64
new file mode 100755
index 000000000000..bf75d3041ce0
--- /dev/null
+++ b/test/Object/Inputs/macho-empty-kext-bundle-x86-64
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 000000000000..294bbde3ddff
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-bad-symbol-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 000000000000..89fa95acbcf8
--- /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-getSectionRawName b/test/Object/Inputs/macho-invalid-section-index-getSectionRawName
new file mode 100644
index 000000000000..9cd3e1cace8c
--- /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 000000000000..874788407879
--- /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 000000000000..36021692ee55
--- /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 000000000000..8cbfbf965785
--- /dev/null
+++ b/test/Object/Inputs/macho-invalid-too-small-segment-load-command
Binary files differ
diff --git a/test/Object/Inputs/macho-zero-ncmds b/test/Object/Inputs/macho-invalid-zero-ncmds
index 0505419195e9..0505419195e9 100644
--- a/test/Object/Inputs/macho-zero-ncmds
+++ b/test/Object/Inputs/macho-invalid-zero-ncmds
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 000000000000..a569c9e14b3a
--- /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 000000000000..5aae5ffed3ae
--- /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 000000000000..0028451d1905
--- /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 000000000000..ce6a20134a99
--- /dev/null
+++ b/test/Object/Inputs/macho64-invalid-too-small-segment-load-command
Binary files differ
diff --git a/test/Object/Inputs/program-headers.mips b/test/Object/Inputs/program-headers.mips
index 54ebfea31f0c..e3485b223747 100755
--- a/test/Object/Inputs/program-headers.mips
+++ b/test/Object/Inputs/program-headers.mips
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 000000000000..b88ad0c596e6
--- /dev/null
+++ b/test/Object/Inputs/sectionGroup.elf.x86-64
Binary files differ
diff --git a/test/Object/Inputs/trivial.ll b/test/Object/Inputs/trivial.ll
index 463442eb90ac..37a6bc20a8c2 100644
--- a/test/Object/Inputs/trivial.ll
+++ b/test/Object/Inputs/trivial.ll
@@ -2,7 +2,7 @@
define i32 @main() nounwind {
entry:
- %call = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0)) nounwind
+ %call = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0)) nounwind
tail call void bitcast (void (...)* @SomeOtherFunction to void ()*)() nounwind
ret i32 0
}
diff --git a/test/Object/Mips/abi-flags.yaml b/test/Object/Mips/abi-flags.yaml
new file mode 100644
index 000000000000..8a11fc4124c3
--- /dev/null
+++ b/test/Object/Mips/abi-flags.yaml
@@ -0,0 +1,63 @@
+# RUN: yaml2obj -format=elf %s > %t
+# RUN: llvm-readobj -mips-abi-flags %t | FileCheck -check-prefix=OBJ %s
+# RUN: obj2yaml %t | FileCheck -check-prefix=YAML %s
+
+# OBJ: MIPS ABI Flags {
+# OBJ-NEXT: Version: 0
+# OBJ-NEXT: ISA: MIPS64r5
+# OBJ-NEXT: ISA Extension: Cavium Networks Octeon3 (0x13)
+# OBJ-NEXT: ASEs [ (0x103)
+# OBJ-NEXT: DSP (0x1)
+# OBJ-NEXT: DSPR2 (0x2)
+# OBJ-NEXT: VZ (0x100)
+# OBJ-NEXT: ]
+# OBJ-NEXT: FP ABI: Hard float (double precision) (0x1)
+# OBJ-NEXT: GPR size: 64
+# OBJ-NEXT: CPR1 size: 64
+# OBJ-NEXT: CPR2 size: 0
+# OBJ-NEXT: Flags 1 [ (0x1)
+# OBJ-NEXT: ODDSPREG (0x1)
+# OBJ-NEXT: ]
+# OBJ-NEXT: Flags 2: 0x0
+# OBJ-NEXT: }
+
+# YAML: Sections:
+# YAML-NEXT: - Name: .MIPS.abiflags
+# YAML-NEXT: Type: SHT_MIPS_ABIFLAGS
+# YAML-NEXT: AddressAlign: 0x0000000000000008
+# YAML-NEXT: ISA: MIPS64
+# YAML-NEXT: ISARevision: 0x05
+# YAML-NEXT: ISAExtension: EXT_OCTEON3
+# YAML-NEXT: ASEs: [ DSP, DSPR2, VIRT ]
+# YAML-NEXT: FpABI: FP_DOUBLE
+# YAML-NEXT: GPRSize: REG_64
+# YAML-NEXT: CPR1Size: REG_64
+# YAML-NEXT: Flags1: [ ODDSPREG ]
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ Version: 0
+ ISA: MIPS64
+ ISARevision: 5
+ ISAExtension: EXT_OCTEON3
+ ASEs: [ DSP, DSPR2, VIRT ]
+ FpABI: FP_DOUBLE
+ GPRSize: REG_64
+ CPR1Size: REG_64
+ CPR2Size: REG_NONE
+ Flags1: [ ODDSPREG ]
+ Flags2: 0x0
+
+Symbols:
+ Local:
+ - Name: .MIPS.abiflags
+ Type: STT_SECTION
+ Section: .MIPS.abiflags
diff --git a/test/Object/Mips/elf-abi.yaml b/test/Object/Mips/elf-abi.yaml
new file mode 100644
index 000000000000..5f11b14da596
--- /dev/null
+++ b/test/Object/Mips/elf-abi.yaml
@@ -0,0 +1,136 @@
+# RUN: yaml2obj -format=elf -docnum=1 %s > %t.o32
+# RUN: llvm-readobj -file-headers %t.o32 | FileCheck -check-prefix=O32OBJ %s
+# RUN: obj2yaml %t.o32 | FileCheck -check-prefix=O32YAML %s
+
+# O32OBJ: Flags [ (0x50001002)
+# O32OBJ-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# O32OBJ-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# O32OBJ-NEXT: EF_MIPS_PIC (0x2)
+# O32OBJ-NEXT: ]
+
+# O32YAML: Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+# RUN: yaml2obj -format=elf -docnum=2 %s > %t.o64
+# RUN: llvm-readobj -file-headers %t.o64 | FileCheck -check-prefix=O64OBJ %s
+# RUN: obj2yaml %t.o64 | FileCheck -check-prefix=O64YAML %s
+
+# O64OBJ: Flags [ (0x60002002)
+# O64OBJ-NEXT: EF_MIPS_ABI_O64 (0x2000)
+# O64OBJ-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# O64OBJ-NEXT: EF_MIPS_PIC (0x2)
+# O64OBJ-NEXT: ]
+
+# O64YAML: Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_O64, EF_MIPS_ARCH_64 ]
+
+# RUN: yaml2obj -format=elf -docnum=3 %s > %t.eabi32
+# RUN: llvm-readobj -file-headers %t.eabi32 | FileCheck -check-prefix=E32OBJ %s
+# RUN: obj2yaml %t.eabi32 | FileCheck -check-prefix=E32YAML %s
+
+# E32OBJ: Flags [ (0x50003002)
+# E32OBJ-NEXT: EF_MIPS_ABI_EABI32 (0x3000)
+# E32OBJ-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# E32OBJ-NEXT: EF_MIPS_PIC (0x2)
+# E32OBJ-NEXT: ]
+
+# E32YAML: Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_EABI32, EF_MIPS_ARCH_32 ]
+
+# RUN: yaml2obj -format=elf -docnum=4 %s > %t.eabi64
+# RUN: llvm-readobj -file-headers %t.eabi64 | FileCheck -check-prefix=E64OBJ %s
+# RUN: obj2yaml %t.eabi64 | FileCheck -check-prefix=E64YAML %s
+
+# E64OBJ: Flags [ (0x60004002)
+# E64OBJ-NEXT: EF_MIPS_ABI_EABI64 (0x4000)
+# E64OBJ-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# E64OBJ-NEXT: EF_MIPS_PIC (0x2)
+# E64OBJ-NEXT: ]
+
+# E64YAML: Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_EABI64, EF_MIPS_ARCH_64 ]
+
+# o32
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+
+# o64
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_O64, EF_MIPS_ARCH_64 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+
+# eabio32
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_EABI32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+
+# eabi64
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_ABI_EABI64, EF_MIPS_ARCH_64 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+...
diff --git a/test/Object/Mips/elf-flags.yaml b/test/Object/Mips/elf-flags.yaml
new file mode 100644
index 000000000000..f79be9d4e078
--- /dev/null
+++ b/test/Object/Mips/elf-flags.yaml
@@ -0,0 +1,52 @@
+# RUN: yaml2obj -format=elf %s > %t
+# RUN: llvm-readobj -file-headers %t | FileCheck -check-prefix=OBJ %s
+# RUN: obj2yaml %t | FileCheck -check-prefix=YAML %s
+
+# OBJ: Flags [ (0x9E8B1727)
+# OBJ-NEXT: EF_MIPS_32BITMODE (0x100)
+# OBJ-NEXT: EF_MIPS_ABI2 (0x20)
+# OBJ-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# OBJ-NEXT: EF_MIPS_ARCH_32R6 (0x90000000)
+# OBJ-NEXT: EF_MIPS_ARCH_ASE_M16 (0x4000000)
+# OBJ-NEXT: EF_MIPS_ARCH_ASE_MDMX (0x8000000)
+# OBJ-NEXT: EF_MIPS_CPIC (0x4)
+# OBJ-NEXT: EF_MIPS_FP64 (0x200)
+# OBJ-NEXT: EF_MIPS_MACH_OCTEON (0x8B0000)
+# OBJ-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# OBJ-NEXT: EF_MIPS_NAN2008 (0x400)
+# OBJ-NEXT: EF_MIPS_NOREORDER (0x1)
+# OBJ-NEXT: EF_MIPS_PIC (0x2)
+# OBJ-NEXT: ]
+
+# YAML: FileHeader:
+# YAML-NEXT: Class: ELFCLASS32
+# YAML-NEXT: Data: ELFDATA2LSB
+# YAML-NEXT: Type: ET_REL
+# YAML-NEXT: Machine: EM_MIPS
+# YAML-NEXT: Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI2, EF_MIPS_32BITMODE, EF_MIPS_FP64, EF_MIPS_NAN2008, EF_MIPS_MICROMIPS, EF_MIPS_ARCH_ASE_M16, EF_MIPS_ARCH_ASE_MDMX, EF_MIPS_ABI_O32, EF_MIPS_MACH_OCTEON, EF_MIPS_ARCH_32R6 ]
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI2,
+ EF_MIPS_32BITMODE, EF_MIPS_FP64, EF_MIPS_NAN2008,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6,
+ EF_MIPS_MICROMIPS, EF_MIPS_ARCH_ASE_M16,
+ EF_MIPS_ARCH_ASE_MDMX, EF_MIPS_MACH_OCTEON ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+...
diff --git a/test/Object/Mips/elf-mips64-rel.yaml b/test/Object/Mips/elf-mips64-rel.yaml
new file mode 100644
index 000000000000..8b595099b9e5
--- /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/archive-delete.test b/test/Object/archive-delete.test
index 552b0e709f61..c8530beafce4 100644
--- a/test/Object/archive-delete.test
+++ b/test/Object/archive-delete.test
@@ -1,7 +1,5 @@
Test the 'd' operation in llvm-ar
-REQUIRES: shell
-
RUN: cd %T
RUN: rm -f %t.a
diff --git a/test/Object/archive-extract-dir.test b/test/Object/archive-extract-dir.test
index c718f90275b6..5182a2f91411 100644
--- a/test/Object/archive-extract-dir.test
+++ b/test/Object/archive-extract-dir.test
@@ -1,5 +1,3 @@
-REQUIRES: shell
-
RUN: mkdir -p %t
RUN: cd %t
RUN: rm -rf foo
@@ -10,4 +8,4 @@ RUN: rm foo
RUN: mkdir foo
RUN: not llvm-ar x test.a foo 2>&1 | FileCheck %s
-CHECK: foo: Is a directory
+CHECK: foo: {{[Ii]}}s a directory
diff --git a/test/Object/archive-format.test b/test/Object/archive-format.test
index 20ac1a0d78fb..f076123d2ea1 100644
--- a/test/Object/archive-format.test
+++ b/test/Object/archive-format.test
@@ -1,13 +1,11 @@
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: echo -n bar. > 0123456789abcde
+RUN: echo -n zed. > 0123456789abcdef
RUN: rm -f test.a
RUN: llvm-ar rc test.a 0123456789abcde 0123456789abcdef
@@ -17,6 +15,5 @@ CHECK: !<arch>
CHECK-NEXT: // 18 `
CHECK-NEXT: 0123456789abcdef/
CHECK-NEXT: 0123456789abcde/{{................................}}4 `
-CHECK-NEXT: bar
-CHECK-NEXT: /0 {{................................}}4 `
-CHECK-NEXT: zed
+CHECK-NEXT: bar./0 {{................................}}4 `
+CHECK-NEXT: zed.
diff --git a/test/Object/archive-move.test b/test/Object/archive-move.test
index 0378e9111a96..adc114994d28 100644
--- a/test/Object/archive-move.test
+++ b/test/Object/archive-move.test
@@ -1,7 +1,5 @@
Test the 'm' operation in llvm-ar
-REQUIRES: shell
-
RUN: cd %T
RUN: rm -f %t.a
diff --git a/test/Object/archive-update.test b/test/Object/archive-update.test
index 20286d2669ad..91ca8102c7e1 100644
--- a/test/Object/archive-update.test
+++ b/test/Object/archive-update.test
@@ -1,7 +1,5 @@
Test the 'u' option of llvm-ar
-REQUIRES: shell
-
RUN: cd %T
RUN: rm -f %t.a
diff --git a/test/Object/elf-unknown-type.test b/test/Object/elf-unknown-type.test
new file mode 100644
index 000000000000..9993c096376c
--- /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/extract.ll b/test/Object/extract.ll
index a4e76499ca6c..8d77f09fe88c 100644
--- a/test/Object/extract.ll
+++ b/test/Object/extract.ll
@@ -3,8 +3,6 @@
; 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
diff --git a/test/Object/kext.test b/test/Object/kext.test
new file mode 100644
index 000000000000..8e7c3d148719
--- /dev/null
+++ b/test/Object/kext.test
@@ -0,0 +1,7 @@
+// Check that we understand kext bundles.
+// Test input generated by "clang -x c++ -fapple-kext -Wl,-kext /dev/null"
+
+RUN: llvm-readobj %p/Inputs/macho-empty-kext-bundle-x86-64 | FileCheck %s
+CHECK: Format: Mach-O 64-bit x86-64
+CHECK: Arch: x86_64
+CHECK: AddressSize: 64bit
diff --git a/test/Object/macho-invalid.test b/test/Object/macho-invalid.test
new file mode 100644
index 000000000000..e2c9b6b7360e
--- /dev/null
+++ b/test/Object/macho-invalid.test
@@ -0,0 +1,38 @@
+// 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-nm %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
+RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC %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-SYMBOL-SEC: getSymbolSection: Invalid section index
diff --git a/test/Object/nm-irix6.test b/test/Object/nm-irix6.test
new file mode 100644
index 000000000000..047665cbf32b
--- /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/nm-trivial-object.test b/test/Object/nm-trivial-object.test
index 0135f2df3cb0..def6549d6563 100644
--- a/test/Object/nm-trivial-object.test
+++ b/test/Object/nm-trivial-object.test
@@ -1,9 +1,11 @@
RUN: yaml2obj %p/Inputs/COFF/i386.yaml | llvm-nm -a -S - \
-RUN: | FileCheck %s -check-prefix COFF
+RUN: | FileCheck %s -check-prefix COFF32
RUN: yaml2obj %p/Inputs/COFF/x86-64.yaml | llvm-nm -a -S - \
-RUN: | FileCheck %s -check-prefix COFF
+RUN: | FileCheck %s -check-prefix COFF64
RUN: llvm-nm %p/Inputs/trivial-object-test.elf-i386 \
RUN: | FileCheck %s -check-prefix ELF
+RUN: llvm-nm %p/Inputs/trivial-object-test.elf-i386 -S \
+RUN: | FileCheck %s -check-prefix ELF-SIZE
RUN: llvm-nm -o %p/Inputs/trivial-object-test.elf-i386 \
RUN: | FileCheck %s -check-prefix ELF-o
RUN: llvm-nm -u %p/Inputs/trivial-object-test.elf-i386 \
@@ -46,23 +48,30 @@ RUN: mkdir -p %t
RUN: cd %t
RUN: cp %p/Inputs/trivial-object-test.macho-i386 a.out
RUN: llvm-nm | FileCheck %s -check-prefix A-OUT
-REQUIRES: shell
-COFF: 00000000 {{.*}} d .data
-COFF: 00000000 {{.*}} t .text
-COFF: 00000000 0000000d d L{{_?}}.str
-COFF: U {{_?}}SomeOtherFunction
-COFF: 00000000 {{.*}} T {{_?}}main
-COFF: U {{_?}}puts
+COFF32: 00000000 d .data
+COFF32-NEXT: 00000000 t .text
+COFF32-NEXT: 00000000 d L_.str
+COFF32-NEXT: U _SomeOtherFunction
+COFF32-NEXT: 00000000 T _main
+COFF32-NEXT: U _puts
-COFF-COMMON: 00000000 00000000 b .bss
-COFF-COMMON-NEXT: 00000000 00000000 d .data
-COFF-COMMON-NEXT: 00000000 00000014 d .drectve
-COFF-COMMON-NEXT: 00000000 00000000 n .file
-COFF-COMMON-NEXT: 00000000 00000014 r .rdata$zzz
-COFF-COMMON-NEXT: 00000000 00000000 t .text
-COFF-COMMON-NEXT: 00000004 C _a
+COFF64: 00000000 d .data
+COFF64-NEXT: 00000000 t .text
+COFF64-NEXT: 00000000 r ??__Ex@@YAXXZ
+COFF64-NEXT: 00000000 d L.str
+COFF64-NEXT: U SomeOtherFunction
+COFF64-NEXT: 00000000 T main
+COFF64-NEXT: U puts
+
+COFF-COMMON: 00000000 b .bss
+COFF-COMMON-NEXT: 00000000 d .data
+COFF-COMMON-NEXT: 00000000 d .drectve
+COFF-COMMON-NEXT: 00000000 n .file
+COFF-COMMON-NEXT: 00000000 r .rdata$zzz
+COFF-COMMON-NEXT: 00000000 t .text
+COFF-COMMON-NEXT: C _a
ELF-NOT: U
@@ -70,6 +79,11 @@ ELF: U SomeOtherFunction
ELF: 00000000 T main
ELF: U puts
+FIXME: we should not print the size of undefined symbols.
+ELF-SIZE: 00000000 U SomeOtherFunction
+ELF-SIZE-NEXT: 00000000 00000024 T main
+ELF-SIZE-NEXT: 00000000 U puts
+
ELF-o: {{.*}}/trivial-object-test.elf-i386: U SomeOtherFunction
ELF-o: {{.*}}/trivial-object-test.elf-i386: 00000000 T main
ELF-o: {{.*}}/trivial-object-test.elf-i386: U puts
diff --git a/test/Object/obj2yaml-sectiongroup.test b/test/Object/obj2yaml-sectiongroup.test
new file mode 100644
index 000000000000..66e8e3875be2
--- /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 1c79e98fdc3b..2a3f7c841dd1 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 ]
@@ -259,7 +253,12 @@ ELF-MIPSEL-NEXT: - Name: .MIPS.abiflags
ELF-MIPSEL-NEXT: Type: SHT_MIPS_ABIFLAGS
ELF-MIPSEL-NEXT: Flags: [ SHF_ALLOC ]
ELF-MIPSEL-NEXT: AddressAlign: 0x0000000000000008
-ELF-MIPSEL-NEXT: Content: '000020010101000100000000000000000100000000000000'
+ELF-MIPSEL-NEXT: ISA: MIPS32
+ELF-MIPSEL-NEXT: ISARevision: 0x01
+ELF-MIPSEL-NEXT: FpABI: FP_DOUBLE
+ELF-MIPSEL-NEXT: GPRSize: REG_32
+ELF-MIPSEL-NEXT: CPR1Size: REG_32
+ELF-MIPSEL-NEXT: Flags1: [ ODDSPREG ]
ELF-MIPSEL-NEXT: Symbols:
ELF-MIPSEL-NEXT: Local:
ELF-MIPSEL-NEXT: - Name: trivial.ll
@@ -328,7 +327,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 +396,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-macho-quirks.test b/test/Object/objdump-macho-quirks.test
deleted file mode 100644
index eeee1537def7..000000000000
--- a/test/Object/objdump-macho-quirks.test
+++ /dev/null
@@ -1,9 +0,0 @@
-RUN: llvm-objdump -private-headers %p/Inputs/macho-zero-ncmds \
-RUN: | FileCheck %s -check-prefix A
-
-// Check that we don't get an infinite loop if ncmds = 0
-A: file format Mach-O 64-bit unknown
-A: Mach header
-A: magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
-A: MH_MAGIC_64 0x00 OBJECT 0 0 0x00000000
-
diff --git a/test/Object/objdump-symbol-table.test b/test/Object/objdump-symbol-table.test
index c94b07773550..3d09e1a45f39 100644
--- a/test/Object/objdump-symbol-table.test
+++ b/test/Object/objdump-symbol-table.test
@@ -30,12 +30,14 @@ ELF-i386: 00000000 *UND* 00000000 puts
macho-i386: trivial-object-test.macho-i386: file format Mach-O 32-bit i386
macho-i386: SYMBOL TABLE:
-macho-i386: 00000000 g F __TEXT,__text 00000024 _main
+macho-i386: 00000000 g F __TEXT,__text 00000000 _main
macho-i386: 00000000 *UND* 00000000 _SomeOtherFunction
macho-i386: 00000000 *UND* 00000000 _puts
ELF-shared: shared-object-test.elf-i386: file format
ELF-shared: SYMBOL TABLE:
ELF-shared: 00000200 l F .text 00000003 local_func
+ELF-shared: 000012b8 l *ABS* 00000000 .hidden _GLOBAL_OFFSET_TABLE_
+ELF-shared: 00001248 l *ABS* 00000000 .hidden _DYNAMIC
ELF-shared: 000012c4 g .data 00000004 defined_sym
ELF-shared: 000001f0 g F .text 00000003 global_func
diff --git a/test/Object/yaml2obj-elf-rel-noref.yaml b/test/Object/yaml2obj-elf-rel-noref.yaml
new file mode 100644
index 000000000000..69fcf0854434
--- /dev/null
+++ b/test/Object/yaml2obj-elf-rel-noref.yaml
@@ -0,0 +1,77 @@
+# RUN: yaml2obj -format=elf %s | llvm-readobj -sections -relocations - | FileCheck %s
+
+!ELF
+FileHeader: !FielHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 03308FE0022093E7000052E31EFF2F01
+ - Name: .rel.text
+ Type: SHT_REL
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000000C
+ Symbol: ''
+ Type: R_ARM_V4BX
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .ARM.attributes
+ Type: SHT_ARM_ATTRIBUTES
+ AddressAlign: 0x0000000000000001
+ Content: 4115000000616561626900010B000000060208010901
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: '$a'
+ Section: .text
+ - Name: call_weak_fn
+ Type: STT_FUNC
+ Section: .text
+ - Name: .ARM.attributes
+ Type: STT_SECTION
+ Section: .ARM.attributes
+
+# CHECK: Section {
+# CHECK-NEXT: Index: 0
+# CHECK: }
+# CHECK: Section {
+# CHECK-NEXT: Index: 1
+# CHECK-NEXT: Name: .text (5)
+# CHECK: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 2
+# CHECK-NEXT: Name: .rel.text (1)
+# CHECK-NEXT: Type: SHT_REL (0x9)
+# CHECK-NEXT: Flags [ (0x40)
+# CHECK: }
+# CHECK: Relocations [
+# CHECK-NEXT: Section (2) .rel.text {
+# CHECK-NEXT: 0xC R_ARM_V4BX - 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]