// RUN: ld.lld --hash-style=sysv %t.so %t.o -o %tout
// RUN: llvm-objdump -d --no-show-raw-insn %tout | FileCheck %s --check-prefix=DISASM
// RUN: llvm-objdump -s %tout | FileCheck %s --check-prefix=GOTPLT
-// RUN: llvm-readobj -r --dynamic-table %tout | FileCheck %s
+// RUN: llvm-readobj --dynamic-table -r %tout | FileCheck %s
+
+// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
+// CHECK: DynamicSection [
+// CHECK: 0x0000000000000008 RELASZ 48 (bytes)
+// CHECK: 0x0000000000000002 PLTRELSZ 48 (bytes)
// Check that the IRELATIVE relocations are after the JUMP_SLOT in the plt
// CHECK: Relocations [
// GOTPLT-NEXT: 230460 f0022100 00000000 00000000 00000000
// GOTPLT-NEXT: 230470 00000000 00000000
-// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
-// CHECK: DynamicSection [
-// CHECK: 0x0000000000000008 RELASZ 48 (bytes)
-// CHECK: 0x0000000000000002 PLTRELSZ 48 (bytes)
-
// Check that a PLT header is written and the ifunc entries appear last
// DISASM: Disassembly of section .text:
// DISASM-EMPTY:
# CHECK: Address: [[DATA_ADDR:[0-9xa-f]+]]
# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD
+
# CHECK: Symbol {
# CHECK: Name: glob0
# CHECK: Value: [[DATA_ADDR]]
# CHECK: Type: Object
# CHECK: Section: .rodata
# CHECK: }
-
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD
-# CHECK: VirtualAddress:
-# CHECK: }
-
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD
-# CHECK: VirtualAddress:
-# CHECK: }
# CHECK: ]
# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD
+
# CHECK: Symbol {
# CHECK: Name: kernel0
# CHECK: Value:
# CHECK: Type: AMDGPU_HSA_KERNEL
# CHECK: Section: .text
# CHECK: }
-
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD
-# CHECK: VirtualAddress:
-# CHECK: }
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
# RUN: ld.lld %t.o -o %t.so -shared --apply-dynamic-relocs
-# RUN: llvm-readobj -r -S -l --section-data %t.so | FileCheck -check-prefixes=CHECK,APPLY %s
+# RUN: llvm-readobj -S --section-data -l -r %t.so | FileCheck -check-prefixes=CHECK,APPLY %s
# RUN: ld.lld %t.o -o %t2.so -shared
-# RUN: llvm-readobj -r -S -l --section-data %t2.so | FileCheck -check-prefixes=CHECK,NOAPPLY %s
+# RUN: llvm-readobj -S --section-data -l -r %t2.so | FileCheck -check-prefixes=CHECK,NOAPPLY %s
# RUN: ld.lld %t.o -o %t3.so -shared --no-apply-dynamic-relocs
# RUN: cmp %t2.so %t3.so
# NOAPPLY-NEXT: 0000: 00000000 00000000 |
# CHECK-NEXT: )
+# CHECK: Type: PT_DYNAMIC
+# CHECK-NEXT: Offset: 0x230
+# CHECK-NEXT: VirtualAddress: 0x[[DYNAMIC:.*]]
+# CHECK-NEXT: PhysicalAddress: 0x[[DYNAMIC]]
+
# CHECK: Relocations [
# CHECK-NEXT: Section ({{.*}}) .rela.dyn {
-# CHECK-NEXT: 0x[[GOT]] R_X86_64_RELATIVE - 0x[[ADDEND:.*]]
+# CHECK-NEXT: 0x[[GOT]] R_X86_64_RELATIVE - 0x[[DYNAMIC]]
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK: Type: PT_DYNAMIC
-# CHECK-NEXT: Offset: 0x230
-# CHECK-NEXT: VirtualAddress: 0x[[ADDEND]]
-# CHECK-NEXT: PhysicalAddress: 0x[[ADDEND]]
-
cmpq $0, _DYNAMIC@GOTPCREL(%rip)
# RUN: ld.lld -shared %t2.o -o %t2.so
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
# RUN: ld.lld -o %t %t.o --as-needed %t2.so
-# RUN: llvm-readobj --dynamic-table --dyn-symbols %t | FileCheck %s
+# RUN: llvm-readelf -d --dyn-symbols %t | FileCheck %s
# There must be a NEEDED entry for each undefined
-# CHECK: Name: bar
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global
-# CHECK-NEXT: Type: Function
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined
-
-# CHECK: NEEDED Shared library: [{{.*}}as-needed-no-reloc{{.*}}2.so]
+# CHECK: (NEEDED) Shared library: [{{.*}}as-needed-no-reloc{{.*}}2.so]
+# CHECK: UND bar
.globl _start
_start:
# CHECK-NEXT: EntrySize: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK-NEXT: Symbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: $x.0
-# CHECK-NEXT: Value: 0x210120
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: _start
-# CHECK-NEXT: Value: [[ENTRY]]
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
# CHECK-NEXT: ProgramHeaders [
# CHECK-NEXT: ProgramHeader {
# CHECK-NEXT: Type: PT_PHDR (0x6)
# CHECK-NEXT: Alignment: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: $x.0
+# CHECK-NEXT: Value: 0x210120
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _start
+# CHECK-NEXT: Value: [[ENTRY]]
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
# CHECK-NEXT: EntrySize: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK-NEXT: Symbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: _gp
-# CHECK-NEXT: Value: 0x38150
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other [ (0x2)
-# CHECK-NEXT: STV_HIDDEN (0x2)
-# CHECK-NEXT: ]
-# CHECK-NEXT: Section: .got
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: __start
-# CHECK-NEXT: Value: 0x20150
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
# CHECK-NEXT: ProgramHeaders [
# CHECK-NEXT: ProgramHeader {
# CHECK-NEXT: Type: PT_PHDR (0x6)
# CHECK-NEXT: Alignment: 8
# CHECK-NEXT: }
# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _gp
+# CHECK-NEXT: Value: 0x38150
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other [ (0x2)
+# CHECK-NEXT: STV_HIDDEN (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Section: .got
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: __start
+# CHECK-NEXT: Value: 0x20150
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
# CHECK-NEXT: EntrySize: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK-NEXT: Symbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: _start
-# CHECK-NEXT: Value: [[ENTRY]]
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
# CHECK-NEXT: ProgramHeaders [
# CHECK-NEXT: ProgramHeader {
# CHECK-NEXT: Type: PT_PHDR (0x6)
# CHECK-NEXT: Alignment: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _start
+# CHECK-NEXT: Value: [[ENTRY]]
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
# CHECK-NEXT: EntrySize: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK-NEXT: Symbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: _start
-# CHECK-NEXT: Value: [[ENTRY]]
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
# CHECK-NEXT: ProgramHeaders [
# CHECK-NEXT: ProgramHeader {
# CHECK-NEXT: Type: PT_PHDR (0x6)
# CHECK-NEXT: Alignment: 0
# CHECK-NEXT: }
# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _start
+# CHECK-NEXT: Value: [[ENTRY]]
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
# Test for the response file (POSIX quoting style)
# RUN: echo " -o %t2" > %t.responsefile
# and emit DT_RELACOUNT (except on MIPS) to indicate the number of relative
# relocations.
+# CHECK: DynamicSection [
+# CHECK: RELACOUNT 1
# CHECK: Relocations [
# CHECK-NEXT: Section ({{.*}}) .rela.dyn {
# CHECK-NEXT: 0x3428 R_X86_64_RELATIVE - 0x3430
# CHECK-NEXT: 0x3418 R_X86_64_64 bbb 0x0
# CHECK-NEXT: 0x3410 R_X86_64_64 ccc 0x0
# CHECK-NEXT: }
-# CHECK: DynamicSection [
-# CHECK: RELACOUNT 1
# RUN: ld.lld -z nocombreloc -shared %t.o %t1.o -o %t.so
# RUN: llvm-readobj -r --dynamic-table %t.so | FileCheck --check-prefix=NOCOMB %s
+# NOCOMB: DynamicSection [
+# NOCOMB-NOT: RELACOUNT
# NOCOMB: Relocations [
# NOCOMB-NEXT: Section ({{.*}}) .rela.dyn {
# NOCOMB-NEXT: 0x33F8 R_X86_64_64 aaa 0x0
# NOCOMB-NEXT: 0x3418 R_X86_64_RELATIVE - 0x3420
# NOCOMB-NEXT: 0x23F0 R_X86_64_GLOB_DAT aaa 0x0
# NOCOMB-NEXT: }
-# NOCOMB: DynamicSection [
-# NOCOMB-NOT: RELACOUNT
.data
.quad aaa
// CHECK-NEXT: 0000: 74210000 00000000 00000000
// CHECK-NEXT: )
+// CHECK: Type: PT_DYNAMIC
+// CHECK-NEXT: Offset: 0x174
+// CHECK-NEXT: VirtualAddress: 0x2174
+// CHECK-NEXT: PhysicalAddress: 0x2174
+
// CHECK: Relocations [
// CHECK-NEXT: Section ({{.*}}) .rel.dyn {
// CHECK-NEXT: 0x21C4 R_386_RELATIVE - 0x0
// CHECK-NEXT: }
// CHECK-NEXT: ]
-// CHECK: Type: PT_DYNAMIC
-// CHECK-NEXT: Offset: 0x174
-// CHECK-NEXT: VirtualAddress: 0x2174
-// CHECK-NEXT: PhysicalAddress: 0x2174
-
calll .L0$pb
.L0$pb:
popl %eax
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/dynamic-reloc.s -o %t3.o
// RUN: ld.lld -shared %t2.o -soname=so -o %t2.so
// RUN: ld.lld %t.o %t3.o %t2.so -o %t
-// RUN: llvm-readobj --dynamic-table -r --expand-relocs -S %t | FileCheck %s
+// RUN: llvm-readobj --dynamic-table -r -S %t | FileCheck %s
// CHECK: Index: 1
// CHECK-NEXT: Name: .dynsym
// CHECK-NEXT: SHF_EXECINSTR
// CHECK-NEXT: ]
-// CHECK: Relocations [
-// CHECK-NEXT: Section ({{.*}}) .rela.plt {
-// CHECK-NEXT: Relocation {
-// CHECK-NEXT: Offset:
-// CHECK-NEXT: Type: R_X86_64_JUMP_SLOT
-// CHECK-NEXT: Symbol: bar
-// CHECK-NEXT: Addend: 0x0
-// CHECK-NEXT: }
-// CHECK-NEXT: }
-// CHECK-NEXT: ]
-
// CHECK: DynamicSection [
// CHECK-NEXT: Tag Type Name/Value
// CHECK-NEXT: 0x0000000000000001 NEEDED Shared library: [so]
// CHECK-NEXT: 0x0000000000000000 NULL 0x0
// CHECK-NEXT: ]
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: R_X86_64_JUMP_SLOT bar 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
.global _start
_start:
.quad bar + 0x42
# At the same time, weak symbols should not cause adding DT_NEEDED;
# this case is checked with symbol qux and %t4.so.
+# CHECK-NOT: NEEDED
+# CHECK: NEEDED Shared library: [{{.*}}3.so]
+# CHECK-NOT: NEEDED
+
# CHECK: DynamicSymbols [
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name:
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK-NOT: NEEDED
-# CHECK: NEEDED Shared library: [{{.*}}3.so]
-# CHECK-NOT: NEEDED
-
# Test with %t.o at the end too.
# RUN: ld.lld --gc-sections --export-dynamic-symbol foo -o %t --as-needed %t2.so %t3.so %t4.so %t.o
# RUN: llvm-readobj --dynamic-table --dyn-symbols %t | FileCheck --check-prefix=CHECK %s
# CHECK: .rela.dyn 00000030 0000000000000248
# CHECK: .got.plt 00000010 00000000000033a0
-# TAGS: Relocations [
-# TAGS-NEXT: Section {{.*}} .rela.dyn {
-# TAGS-NEXT: R_X86_64_IRELATIVE
-# TAGS-NEXT: R_X86_64_IRELATIVE
-# TAGS-NEXT: }
-# TAGS-NEXT: ]
-
# TAGS: Tag Type Name/Value
# TAGS: 0x0000000000000007 RELA 0x248
# TAGS: 0x0000000000000008 RELASZ 48 (bytes)
# TAGS: 0x0000000000000003 PLTGOT 0x33A0
# TAGS: 0x0000000000000014 PLTREL RELA
+# TAGS: Relocations [
+# TAGS-NEXT: Section {{.*}} .rela.dyn {
+# TAGS-NEXT: R_X86_64_IRELATIVE
+# TAGS-NEXT: R_X86_64_IRELATIVE
+# TAGS-NEXT: }
+# TAGS-NEXT: ]
+
.text
.type foo STT_GNU_IFUNC
.globl foo
// RUN: llvm-objdump -s %tout | FileCheck %s --check-prefix=GOTPLT
// RUN: llvm-readobj -r --dynamic-table %tout | FileCheck %s
+/// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
+// CHECK: DynamicSection [
+// CHECK: 0x00000012 RELSZ 16 (bytes)
+// CHECK: 0x00000002 PLTRELSZ 16 (bytes)
+
// Check that the IRELATIVE relocations are after the JUMP_SLOT in the plt
// CHECK: Relocations [
// CHECK-NEXT: Section (4) .rel.dyn {
// GOTPLT: 403298 20224000 00000000 00000000 e6114000
// GOTPLT-NEXT: 4032a8 f6114000 b4114000 b5114000
-// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
-// CHECK: DynamicSection [
-// CHECK: 0x00000012 RELSZ 16 (bytes)
-// CHECK: 0x00000002 PLTRELSZ 16 (bytes)
-
// Check that a PLT header is written and the ifunc entries appear last
// DISASM: Disassembly of section .text:
// DISASM-EMPTY:
// RUN: llvm-objdump -s %tout | FileCheck %s --check-prefix=GOTPLT
// RUN: llvm-readobj -r --dynamic-table %tout | FileCheck %s
+/// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
+// CHECK: DynamicSection [
+// CHECK: 0x0000000000000008 RELASZ 48 (bytes)
+// CHECK: 0x0000000000000002 PLTRELSZ 48 (bytes)
+
// Check that the IRELATIVE relocations are after the JUMP_SLOT in the plt
// CHECK: Relocations [
// CHECK-NEXT: Section (4) .rela.dyn {
// GOTPLT-NEXT: 203450 16132000 00000000 00000000 00000000
// GOTPLT-NEXT: 203460 00000000 00000000
-// Check that the PLTRELSZ tag does not include the IRELATIVE relocations
-// CHECK: DynamicSection [
-// CHECK: 0x0000000000000008 RELASZ 48 (bytes)
-// CHECK: 0x0000000000000002 PLTRELSZ 48 (bytes)
-
// Check that a PLT header is written and the ifunc entries appear last
// DISASM: Disassembly of section .text:
// DISASM-EMPTY:
// GOTRELSHARED-NEXT: AddressAlignment: 4
// GOTRELSHARED-NEXT: EntrySize: 0
// GOTRELSHARED-NEXT: }
+// GOTRELSHARED: 0x6FFFFFFA RELCOUNT 8
// GOTRELSHARED: Relocations [
// GOTRELSHARED-NEXT: Section ({{.*}}) .rel.dyn {
// GOTRELSHARED-NEXT: 0x22DA R_386_RELATIVE - 0x0
// GOTRELSHARED-NEXT: 0x338C R_386_TLS_TPOFF tlslocal1 0x0
// GOTRELSHARED-NEXT: }
// GOTRELSHARED-NEXT: ]
-// GOTRELSHARED: 0x6FFFFFFA RELCOUNT 8
// DISASMSHARED: Disassembly of section test:
// DISASMSHARED-EMPTY:
// and should not require given symbols to be resolved
// RUN: ld.lld -shared %t -o %t2 -init=_unknown -fini=_unknown
// RUN: llvm-readobj --symbols --dynamic-table %t2 | FileCheck --check-prefix=NOENTRY %s
-// NOENTRY: Symbols [
-// NOENTRY-NOT: Name: _unknown
-// NOENTRY: ]
// NOENTRY: DynamicSection [
// NOENTRY-NOT: INIT
// NOENTRY-NOT: FINI
// NOENTRY: ]
+// NOENTRY: Symbols [
+// NOENTRY-NOT: Name: _unknown
+// NOENTRY: ]
.global _start,_init,_fini,_foo,_bar,_undef
_start:
# CHECK: foo PROGBITS 0000000000[[ADDR:[0-9a-f]*]] [[ADDR]]
# CHECK-NEXT: .data PROGBITS 0000000000[[ADDR]] [[ADDR]]
-# CHECK: Symbol table
-# CHECK: 0000000000[[ADDR]] 0 NOTYPE GLOBAL DEFAULT {{[0-9]+}} __start_foo
-# CHECK: 0000000000[[ADDR]] 0 NOTYPE GLOBAL DEFAULT {{[0-9]+}} __end_foo
-
# CHECK: Program Headers
# CHECK: LOAD
# CHECK-NEXT: LOAD 0x[[ADDR]] 0x0000000000[[ADDR]] 0x0000000000[[ADDR]]
+
+# CHECK: Symbol table
+# CHECK: 0000000000[[ADDR]] 0 NOTYPE GLOBAL DEFAULT {{[0-9]+}} __start_foo
+# CHECK: 0000000000[[ADDR]] 0 NOTYPE GLOBAL DEFAULT {{[0-9]+}} __end_foo
// REQUIRES: x86
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
// RUN: ld.lld --hash-style=sysv %t.o -o %t -pie
-// RUN: llvm-readobj -S -r -d %t | FileCheck %s
+// RUN: llvm-readobj -S -d -r %t | FileCheck %s
// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
.globl _start
// CHECK-NEXT: Offset:
// CHECK-NEXT: Size: 8
+// CHECK: 0x000000006FFFFFF9 RELACOUNT 1
+
// CHECK: Relocations [
// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
// CHECK-NEXT: 0x22C8 R_X86_64_RELATIVE - 0x1215
// CHECK-NEXT: }
// CHECK-NEXT: ]
-// CHECK: 0x000000006FFFFFF9 RELACOUNT 1
// REQUIRES: x86
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
// RUN: ld.lld %t.o -o %t -shared
-// RUN: llvm-readobj -S -r -d %t | FileCheck %s
+// RUN: llvm-readobj -S -d -r %t | FileCheck %s
// RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=DISASM %s
bar:
// CHECK-NEXT: Offset:
// CHECK-NEXT: Size: 8
+// CHECK: 0x000000006FFFFFF9 RELACOUNT 1
+
// CHECK: Relocations [
// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
// CHECK-NEXT: 0x22E0 R_X86_64_RELATIVE - 0x122D
// CHECK-NEXT: }
// CHECK-NEXT: ]
-// CHECK: 0x000000006FFFFFF9 RELACOUNT 1
# RUN: ld.lld %t2.o -shared -o %t.so
# RUN: ld.lld %t1.o %t.so -o %t.exe
# RUN: llvm-objdump -d --no-show-raw-insn --print-imm-hex %t.exe | FileCheck %s
-# RUN: llvm-readobj --dynamic-table -S -r -A %t.exe \
+# RUN: llvm-readobj -S --dynamic-table -r -A %t.exe \
# RUN: | FileCheck -check-prefix=REL %s
# CHECK: Disassembly of section .text:
# REL-NEXT: ]
# REL-NEXT: Address: 0x[[GOTPLTADDR:[0-9A-F]+]]
+# REL: 0x70000032 MIPS_PLTGOT 0x[[GOTPLTADDR]]
+
# REL: Relocations [
# REL-NEXT: Section (7) .rel.plt {
# REL-NEXT: 0x[[PLTSLOT:[0-9A-F]+]] R_MIPS_JUMP_SLOT foo0 0x0
# REL-NEXT: }
# REL-NEXT: ]
-# REL: 0x70000032 MIPS_PLTGOT 0x[[GOTPLTADDR]]
-
# REL: Primary GOT {
# REL: Local entries [
# REL-NEXT: ]
# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
# RUN: ld.lld -shared %t-el.o -script %t.script -o %t-el.so
# RUN: llvm-objdump -t -s %t-el.so | FileCheck -check-prefixes=SYM,EL %s
-# RUN: llvm-readelf -r -s --dynamic-table -A %t-el.so \
+# RUN: llvm-readelf --dynamic-table -r -s -A %t-el.so \
# RUN: | FileCheck -check-prefix=REL %s
.data
# EL: Contents of section .data:
# EL-NEXT: {{.*}} 04000000 00100100
# ^-- v2+4 ^-- v1
+
+# REL: Dynamic section
+# REL: (RELSZ) 16
+# REL: (RELENT) 8
+# REL-NOT: (RELCOUNT)
+
# REL: Relocation section
# REL: {{.*}} R_MIPS_REL32
# REL-NEXT: {{.*}} R_MIPS_REL32 [[V2:[0-9a-f]+]]
# REL: Symbol table
# REL: {{.*}}: [[V2]] {{.*}} v2
-# REL: Dynamic section
-# REL: (RELSZ) 16
-# REL: (RELENT) 8
-# REL-NOT: (RELCOUNT)
-
# REL: Global entries
# REL: {{.*}} -32744(gp) [[V2]] {{.*}} v2
# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t.o
# RUN: ld.lld -shared %t.o -o %t.so
# RUN: llvm-objdump -s -t %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-readelf -r -s --dynamic-table -A %t.so | FileCheck %s
+# RUN: llvm-readelf --dynamic-table -r -s -A %t.so | FileCheck %s
.data
.globl v2
# SYM: Contents of section .data:
# SYM-NEXT: {{.*}} 00000000 00000008 00000000 [[V1]]
+# CHECK: Dynamic section
+# CHECK: (RELSZ) 32 (bytes)
+# CHECK: (RELENT) 16 (bytes)
+
# CHECK: Relocation section
# CHECK: [[V2:[0-9a-f]+]] {{.*}} R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE
# CHECK: [[V1:[0-9a-f]+]] {{.*}} R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE [[V2]] v2
# CHECK: {{.*}}: [[V1]] {{.*}} v1
# CHECK: {{.*}}: [[V2]] {{.*}} v2
-# CHECK: Dynamic section
-# CHECK: (RELSZ) 32 (bytes)
-# CHECK: (RELENT) 16 (bytes)
-
# CHECK: Primary GOT:
# CHECK: Global entries:
# CHECK: {{.*}} -32736(gp) [[V2]] [[V2]] {{.*}} v2
# DSO-NEXT: Offset:
# DSO-NEXT: Size: 8
# DSO: ]
-# DSO: DynamicSymbols [
-# DSO: Name:
-# DSO: Name: __start
-# DSO: Name: _foo
-# DSO: ]
# DSO: DynamicSection [
# DSO-NEXT: Tag Type Name/Value
# DSO-DAG: 0x00000003 PLTGOT [[GOTADDR]]
# DSO-DAG: 0x70000011 MIPS_SYMTABNO 3
# DSO-DAG: 0x70000013 MIPS_GOTSYM 0x3
# DSO: ]
+# DSO-NEXT: DynamicSymbols [
+# DSO: Name:
+# DSO: Name: __start
+# DSO: Name: _foo
+# DSO: ]
.text
.globl __start,_foo
# RUN: llvm-readelf -r --dyn-syms --dynamic-table -A %t2.so \
# RUN: | FileCheck -check-prefixes=CHECK,SYM %s
-# CHECK: There are no relocations in this file.
-
-# CHECK: Symbol table '.dynsym'
-# CHECK-DAG: [[FOO:[0-9a-f]+]] 0 NOTYPE WEAK DEFAULT 8 foo
-# CHECK-DAG: 00000000 0 NOTYPE WEAK DEFAULT UND bar
-# CHECK-DAG: [[SYM:[0-9a-f]+]] 0 NOTYPE GLOBAL DEFAULT 8 sym
-
# CHECK: Dynamic section
# CHECK: (MIPS_SYMTABNO) 4
# NOSYM: (MIPS_LOCAL_GOTNO) 2
# SYM: (MIPS_LOCAL_GOTNO) 4
# SYM: (MIPS_GOTSYM) 0x3
+# CHECK: There are no relocations in this file.
+
+# CHECK: Symbol table '.dynsym'
+# CHECK-DAG: [[FOO:[0-9a-f]+]] 0 NOTYPE WEAK DEFAULT 8 foo
+# CHECK-DAG: 00000000 0 NOTYPE WEAK DEFAULT UND bar
+# CHECK-DAG: [[SYM:[0-9a-f]+]] 0 NOTYPE GLOBAL DEFAULT 8 sym
+
# NOSYM: Primary GOT:
# NOSYM-NOT: Local entries:
# NOSYM: Global entries:
__start:
lui $gp, %hi(%neg(%gp_rel(g1)))
-# CHECK: Name: _gp
-# CHECK-NEXT: Value: 0x[[GP:[0-9A-F]+]]
-
# CHECK: ProgramHeader {
# CHECK: Type: PT_MIPS_OPTIONS
# CHECK-NEXT: Offset:
# CHECK-NEXT: Alignment: 8
# CHECK-NEXT: }
+# CHECK: Name: _gp
+# CHECK-NEXT: Value: 0x[[GP:[0-9A-F]+]]
+
# CHECK: MIPS Options {
# CHECK-NEXT: ODK_REGINFO {
# CHECK-NEXT: GP: 0x[[GP]]
// Change upper case to lower case so that we can match unwind info (which is dumped
// in upper case) against program headers (which are dumped in lower case).
-// RUN: llvm-readelf -l --unwind %t0 | tr A-Z a-z | FileCheck %s
-// RUN: llvm-readelf -l --unwind %t1 | tr A-Z a-z | FileCheck %s
+// RUN: llvm-readelf -l --unwind %t0 | tr A-Z a-z | FileCheck --ignore-case %s
+// RUN: llvm-readelf -l --unwind %t1 | tr A-Z a-z | FileCheck --ignore-case %s
+
+// CHECK: LOAD {{[^ ]*}} 0x{{0*}}[[TEXT_ADDR:[0-9a-f]+]] {{.*}} R E
+// CHECK: EXIDX 0x{{0*}}[[EXIDX_OFFSET:[0-9a-f]+]] {{.*}} 0x00010 0x00010 R
// Each file should have one exidx section for its text section and one sentinel.
-// CHECK: sectionoffset: 0x[[EXIDX_OFFSET:.*]]
-// CHECK-NEXT: entries [
-// CHECK-NEXT: entry {
-// CHECK-NEXT: functionaddress: 0x[[TEXT_ADDR:.*]]
-// CHECK-NEXT: model: cantunwind
+// CHECK: SectionOffset: 0x[[EXIDX_OFFSET]]
+// CHECK-NEXT: Entries [
+// CHECK-NEXT: Entry {
+// CHECK-NEXT: Functionaddress: 0x[[TEXT_ADDR]]
+// CHECK-NEXT: Model: CantUnwind
// CHECK-NEXT: }
-// CHECK-NEXT: entry {
-// CHECK-NEXT: functionaddress:
-// CHECK-NEXT: model: cantunwind
+// CHECK-NEXT: Entry {
+// CHECK-NEXT: FunctionAddress:
+// CHECK-NEXT: Model: CantUnwind
// CHECK-NEXT: }
// CHECK-NEXT: ]
-// CHECK: load {{[^ ]*}} 0x{{0*}}[[TEXT_ADDR]] {{.*}} r e
-// CHECK: exidx 0x{{0*}}[[EXIDX_OFFSET]] {{.*}} 0x00010 0x00010 r
-
.section .llvm_sympart,"",%llvm_sympart
.asciz "part1"
.4byte p1
// PART0: .data PROGBITS 000000000000[[DATA_SEGMENT:.]]378
// PART1: .data PROGBITS 000000000000[[DATA_SEGMENT:.]]340
+// CHECK: Dynamic section
+// CHECK: 0x0000000060000011 (ANDROID_RELA) 0x[[ANDROID_RELA_ADDR]]
+// CHECK: 0x0000000000000024 (RELR) 0x[[RELR_ADDR]]
+
// CHECK: Relocation section '.rela.dyn'
// CHECK-NEXT: Offset
// PART0-NEXT: 000000000000[[DATA_SEGMENT]]380 {{.*}} R_X86_64_64 000000000000[[DATA_SEGMENT]]378 p0 + 0
// PART1-NEXT: 000000000000[[DATA_SEGMENT]]340 {{.*}} R_X86_64_RELATIVE
// CHECK-EMPTY:
-// CHECK: Dynamic section
-// CHECK: 0x0000000060000011 (ANDROID_RELA) 0x[[ANDROID_RELA_ADDR]]
-// CHECK: 0x0000000000000024 (RELR) 0x[[RELR_ADDR]]
-
.section .llvm_sympart,"",@llvm_sympart
.asciz "part1"
.quad p1
// CHECK-NEXT: .strtab STRTAB
// CHECK-NEXT: Key to Flags
+// CHECK: Program Headers:
+// CHECK-NEXT: Type
+// PART0-NEXT: PHDR {{.*}} 0x000230 0x000230 R
+// PART1-NEXT: PHDR {{.*}} 0x0001f8 0x0001f8 R
+// PART0-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 {{.*}} R 0x1000
+// PART0-NEXT: LOAD 0x001000 0x0000000000001000 0x0000000000001000 {{.*}} R E 0x1000
+// PART0-NEXT: LOAD 0x002000 0x0000000000002000 0x0000000000002000 {{.*}} RW 0x1000
+// PART0-NEXT: LOAD 0x002178 0x0000000000003178 0x0000000000003178 {{.*}} RW 0x1000
+// PART0-NEXT: LOAD 0x003150 0x0000000000008150 0x0000000000008150 0x000000 0x001000 RW 0x1000
+// PART1-NEXT: LOAD 0x000000 0x0000000000004000 0x0000000000004000 {{.*}} R 0x1000
+// PART1-NEXT: LOAD 0x001000 0x0000000000005000 0x0000000000005000 {{.*}} R E 0x1000
+// PART1-NEXT: LOAD 0x002000 0x0000000000006000 0x0000000000006000 {{.*}} RW 0x1000
+// PART1-NEXT: LOAD 0x002130 0x0000000000007130 0x0000000000007130 {{.*}} RW 0x1000
+// CHECK-NEXT: DYNAMIC {{.*}} 0x{{0*}}[[DYNAMIC_ADDR]] 0x{{0*}}[[DYNAMIC_ADDR]] {{.*}} RW 0x8
+// PART0-NEXT: GNU_RELRO 0x002000 0x0000000000002000 0x0000000000002000 {{.*}} R 0x1
+// PART1-NEXT: GNU_RELRO 0x002000 0x0000000000006000 0x0000000000006000 {{.*}} R 0x1
+// CHECK-NEXT: GNU_EH_FRAME {{.*}} 0x{{0*}}[[EH_FRAME_HDR_ADDR]] 0x{{0*}}[[EH_FRAME_HDR_ADDR]] {{.*}} R 0x4
+// CHECK-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0
+// CHECK-EMPTY:
+
+// CHECK: Dynamic section
+// CHECK-NEXT: Tag
+// CHECK-NEXT: 0x0000000000000001 (NEEDED) Shared library: [verneed1.so.0]
+// PART0-NEXT: 0x000000000000000e (SONAME) Library soname: [main.so]
+// PART1-NEXT: 0x0000000000000001 (NEEDED) Shared library: [main.so]
+// PART1-NEXT: 0x000000000000000e (SONAME) Library soname: [part1]
+// CHECK-NEXT: 0x0000000000000007 (RELA) 0x[[RELA_DYN_ADDR]]
+// CHECK-NEXT: 0x0000000000000008 (RELASZ)
+// CHECK-NEXT: 0x0000000000000009 (RELAENT) 24 (bytes)
+// PART1-NEXT: 0x000000006ffffff9 (RELACOUNT) 1
+// PART0-NEXT: 0x0000000000000017 (JMPREL) 0x[[RELA_PLT_ADDR]]
+// PART0-NEXT: 0x0000000000000002 (PLTRELSZ) 48 (bytes)
+// PART0-NEXT: 0x0000000000000003 (PLTGOT) 0x[[GOT_PLT_ADDR]]
+// PART0-NEXT: 0x0000000000000014 (PLTREL) RELA
+// CHECK-NEXT: 0x0000000000000006 (SYMTAB) 0x[[DYNSYM_ADDR]]
+// CHECK-NEXT: 0x000000000000000b (SYMENT) 24 (bytes)
+// CHECK-NEXT: 0x0000000000000005 (STRTAB) 0x[[DYNSTR_ADDR]]
+// CHECK-NEXT: 0x000000000000000a (STRSZ)
+// CHECK-NEXT: 0x000000006ffffef5 (GNU_HASH) 0x[[GNU_HASH_ADDR]]
+// CHECK-NEXT: 0x0000000000000004 (HASH) 0x[[HASH_ADDR]]
+// PART0-NEXT: 0x0000000000000019 (INIT_ARRAY) 0x[[INIT_ARRAY_ADDR]]
+// PART0-NEXT: 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
+// CHECK-NEXT: 0x000000006ffffff0 (VERSYM) 0x[[VERSYM_ADDR]]
+// CHECK-NEXT: 0x000000006ffffffc (VERDEF) 0x[[VERDEF_ADDR]]
+// CHECK-NEXT: 0x000000006ffffffd (VERDEFNUM) 3
+// CHECK-NEXT: 0x000000006ffffffe (VERNEED) 0x[[VERNEED_ADDR]]
+// CHECK-NEXT: 0x000000006fffffff (VERNEEDNUM) 1
+// PART0-NEXT: 0x0000000000000000 (NULL) 0x0
+
// CHECK: Relocation section '.rela.dyn'
// CHECK-NEXT: Offset
// PART0-NEXT: 000000000000[[DATA_SEGMENT]]178 {{.*}} R_X86_64_64 {{.*}} f1@v3 + 0
// PART1-NEXT: 000000000000[[DATA_SEGMENT]]130 {{.*}} R_X86_64_64 {{.*}} f2@v2 + 0
// PART1-NEXT: 000000000000[[DATA_SEGMENT]]138 {{.*}} R_X86_64_64 {{.*}} p0@@x1 + 0
// PART1-NEXT: 000000000000[[DATA_SEGMENT]]140 {{.*}} R_X86_64_64 {{.*}} p0@@x1 + 0
-// CHECK-EMPTY:
// PART0: Relocation section '.rela.plt'
// PART0-NEXT: Offset
// PART0-NEXT: 000000000000[[DATA_SEGMENT]]198 {{.*}} R_X86_64_JUMP_SLOT {{.*}} f1@v3 + 0
// PART0-NEXT: 000000000000[[DATA_SEGMENT]]1a0 {{.*}} R_X86_64_JUMP_SLOT {{.*}} f2@v2 + 0
-// PART0-EMPTY:
+
+// CHECK-NEXT: EHFrameHeader
+// CHECK: Address: 0x[[EH_FRAME_HDR_ADDR]]
+// CHECK: eh_frame_ptr: 0x[[EH_FRAME_ADDR]]
+// CHECK: initial_location: 0x[[TEXT_ADDR]]
+// CHECK: address: 0x[[FDE_ADDR:.*]]
+
+// CHECK: .eh_frame section
+// CHECK: 0x[[EH_FRAME_ADDR]]] CIE length=20
+// CHECK-NOT: FDE
+// CHECK: 0x[[FDE_ADDR]]] FDE length=20 cie={{.}}0x[[EH_FRAME_ADDR]]
+// CHECK-NEXT: initial_location: 0x[[TEXT_ADDR]]
+// CHECK-NOT: FDE
+// CHECK: CIE length=0
// CHECK: Symbol table '.dynsym'
// PART0: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f1@v3
// 0x490 + 0x3b70 = 0x4000
// PART-INDEX-NEXT: 048c 26ffffff 703b0000 50410000
-// CHECK: {{.*}}EHFrameHeader
-// CHECK: Address: 0x[[EH_FRAME_HDR_ADDR]]
-// CHECK: eh_frame_ptr: 0x[[EH_FRAME_ADDR]]
-// CHECK: initial_location: 0x[[TEXT_ADDR]]
-// CHECK: address: 0x[[FDE_ADDR:.*]]
-
-// CHECK: .eh_frame section
-// CHECK: 0x[[EH_FRAME_ADDR]]] CIE length=20
-// CHECK-NOT: FDE
-// CHECK: 0x[[FDE_ADDR]]] FDE length=20 cie={{.}}0x[[EH_FRAME_ADDR]]
-// CHECK-NEXT: initial_location: 0x[[TEXT_ADDR]]
-// CHECK-NOT: FDE
-// CHECK: CIE length=0
-
-// CHECK: Dynamic section
-// CHECK-NEXT: Tag
-// CHECK-NEXT: 0x0000000000000001 (NEEDED) Shared library: [verneed1.so.0]
-// PART0-NEXT: 0x000000000000000e (SONAME) Library soname: [main.so]
-// PART1-NEXT: 0x0000000000000001 (NEEDED) Shared library: [main.so]
-// PART1-NEXT: 0x000000000000000e (SONAME) Library soname: [part1]
-// CHECK-NEXT: 0x0000000000000007 (RELA) 0x[[RELA_DYN_ADDR]]
-// CHECK-NEXT: 0x0000000000000008 (RELASZ)
-// CHECK-NEXT: 0x0000000000000009 (RELAENT) 24 (bytes)
-// PART1-NEXT: 0x000000006ffffff9 (RELACOUNT) 1
-// PART0-NEXT: 0x0000000000000017 (JMPREL) 0x[[RELA_PLT_ADDR]]
-// PART0-NEXT: 0x0000000000000002 (PLTRELSZ) 48 (bytes)
-// PART0-NEXT: 0x0000000000000003 (PLTGOT) 0x[[GOT_PLT_ADDR]]
-// PART0-NEXT: 0x0000000000000014 (PLTREL) RELA
-// CHECK-NEXT: 0x0000000000000006 (SYMTAB) 0x[[DYNSYM_ADDR]]
-// CHECK-NEXT: 0x000000000000000b (SYMENT) 24 (bytes)
-// CHECK-NEXT: 0x0000000000000005 (STRTAB) 0x[[DYNSTR_ADDR]]
-// CHECK-NEXT: 0x000000000000000a (STRSZ)
-// CHECK-NEXT: 0x000000006ffffef5 (GNU_HASH) 0x[[GNU_HASH_ADDR]]
-// CHECK-NEXT: 0x0000000000000004 (HASH) 0x[[HASH_ADDR]]
-// PART0-NEXT: 0x0000000000000019 (INIT_ARRAY) 0x[[INIT_ARRAY_ADDR]]
-// PART0-NEXT: 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
-// CHECK-NEXT: 0x000000006ffffff0 (VERSYM) 0x[[VERSYM_ADDR]]
-// CHECK-NEXT: 0x000000006ffffffc (VERDEF) 0x[[VERDEF_ADDR]]
-// CHECK-NEXT: 0x000000006ffffffd (VERDEFNUM) 3
-// CHECK-NEXT: 0x000000006ffffffe (VERNEED) 0x[[VERNEED_ADDR]]
-// CHECK-NEXT: 0x000000006fffffff (VERNEEDNUM) 1
-// PART0-NEXT: 0x0000000000000000 (NULL) 0x0
-
-// CHECK: Program Headers:
-// CHECK-NEXT: Type
-// PART0-NEXT: PHDR {{.*}} 0x000230 0x000230 R
-// PART1-NEXT: PHDR {{.*}} 0x0001f8 0x0001f8 R
-// PART0-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 {{.*}} R 0x1000
-// PART0-NEXT: LOAD 0x001000 0x0000000000001000 0x0000000000001000 {{.*}} R E 0x1000
-// PART0-NEXT: LOAD 0x002000 0x0000000000002000 0x0000000000002000 {{.*}} RW 0x1000
-// PART0-NEXT: LOAD 0x002178 0x0000000000003178 0x0000000000003178 {{.*}} RW 0x1000
-// PART0-NEXT: LOAD 0x003150 0x0000000000008150 0x0000000000008150 0x000000 0x001000 RW 0x1000
-// PART1-NEXT: LOAD 0x000000 0x0000000000004000 0x0000000000004000 {{.*}} R 0x1000
-// PART1-NEXT: LOAD 0x001000 0x0000000000005000 0x0000000000005000 {{.*}} R E 0x1000
-// PART1-NEXT: LOAD 0x002000 0x0000000000006000 0x0000000000006000 {{.*}} RW 0x1000
-// PART1-NEXT: LOAD 0x002130 0x0000000000007130 0x0000000000007130 {{.*}} RW 0x1000
-// CHECK-NEXT: DYNAMIC {{.*}} 0x{{0*}}[[DYNAMIC_ADDR]] 0x{{0*}}[[DYNAMIC_ADDR]] {{.*}} RW 0x8
-// PART0-NEXT: GNU_RELRO 0x002000 0x0000000000002000 0x0000000000002000 {{.*}} R 0x1
-// PART1-NEXT: GNU_RELRO 0x002000 0x0000000000006000 0x0000000000006000 {{.*}} R 0x1
-// CHECK-NEXT: GNU_EH_FRAME {{.*}} 0x{{0*}}[[EH_FRAME_HDR_ADDR]] 0x{{0*}}[[EH_FRAME_HDR_ADDR]] {{.*}} R 0x4
-// CHECK-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0
-// CHECK-EMPTY:
-
// CHECK: Version symbols section '.gnu.version'
// CHECK-NEXT: Addr:
// PART0-NEXT: 000: 0 (*local*) 4 (v3) 5 (v2) 2 (x1)
# RUN: llvm-readelf -x .plt %t | FileCheck --check-prefix=HEX %s
# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s
+# SEC: .got PROGBITS 100202b8
+# RELOC: PPC_GOT 0x100202B8
+
# RELOC: .rela.plt {
# RELOC-NEXT: 0x100302C4 R_PPC_JMP_SLOT f 0x0
# RELOC-NEXT: 0x100302C8 R_PPC_JMP_SLOT g 0x0
# RELOC-NEXT: }
-# SEC: .got PROGBITS 100202b8
-# RELOC: PPC_GOT 0x100202B8
-
## .got2+0x8000-0x10004 = 0x30000+0x8000-0x10004 = 65536*2+32764
# CHECK-LABEL: _start:
# CHECK-NEXT: bl .+16
// CHECK-NEXT: Offset:
// CHECK-NEXT: Size: [[FINI_SIZE:.*]]
+// CHECK: DynamicSection
+// CHECK: PREINIT_ARRAY [[PREINIT_ADDR]]
+// CHECK: PREINIT_ARRAYSZ [[PREINIT_SIZE]] (bytes)
+// CHECK: INIT_ARRAY [[INIT_ADDR]]
+// CHECK: INIT_ARRAYSZ [[INIT_SIZE]] (bytes)
+// CHECK: FINI_ARRAY [[FINI_ADDR]]
+// CHECK: FINI_ARRAYSZ [[FINI_SIZE]] (bytes)
+
// CHECK: Relocations [
// CHECK-NEXT: ]
// CHECK-NEXT: Section: .preinit_array
// CHECK-NEXT: }
-// CHECK: DynamicSection
-// CHECK: PREINIT_ARRAY [[PREINIT_ADDR]]
-// CHECK: PREINIT_ARRAYSZ [[PREINIT_SIZE]] (bytes)
-// CHECK: INIT_ARRAY [[INIT_ADDR]]
-// CHECK: INIT_ARRAYSZ [[INIT_SIZE]] (bytes)
-// CHECK: FINI_ARRAY [[FINI_ADDR]]
-// CHECK: FINI_ARRAYSZ [[FINI_SIZE]] (bytes)
-
// DISASM: _start:
// DISASM-NEXT: callq {{.*}} <__preinit_array_start>
// DISASM-NEXT: callq {{.*}} <__fini_array_start>
// CHECK-NEXT: Offset: 0x368
// CHECK-NEXT: Size: 8
-// CHECK: 0x202368 R_X86_64_COPY a 0x0
-// CHECK: 0x20236C R_X86_64_COPY b 0x0
-
// CHECK: Type: PT_GNU_RELRO (0x6474E552)
// CHECK-NEXT: Offset: 0x2A8
// CHECK-NEXT: VirtualAddress: 0x2022A8
// CHECK-NEXT: FileSize: 192
// CHECK-NEXT: MemSize: 3416
+// CHECK: 0x202368 R_X86_64_COPY a 0x0
+// CHECK: 0x20236C R_X86_64_COPY b 0x0
+
.text
.global _start
_start:
# RUN: llvm-readelf -x .got %t.64 | FileCheck --check-prefix=LE64-GOT %s
# RUN: llvm-objdump -d --no-show-raw-insn %t.64 | FileCheck --check-prefixes=LE,LE64 %s
+# IE32-REL: FLAGS STATIC_TLS
# IE32-REL: .rela.dyn {
# IE32-REL-NEXT: 0x2218 R_RISCV_TLS_TPREL32 - 0xC
# IE32-REL-NEXT: 0x2214 R_RISCV_TLS_TPREL32 a 0x0
# IE32-REL-NEXT: }
-# IE32-REL: FLAGS STATIC_TLS
+# IE64-REL: FLAGS STATIC_TLS
# IE64-REL: .rela.dyn {
# IE64-REL-NEXT: 0x2370 R_RISCV_TLS_TPREL64 - 0xC
# IE64-REL-NEXT: 0x2368 R_RISCV_TLS_TPREL64 a 0x0
# IE64-REL-NEXT: }
-# IE64-REL: FLAGS STATIC_TLS
## rv32: &.got[0] - . = 0x2214 - . = 4096*1+112
## rv64: &.got[0] - . = 0x2368 - . = 4096*1+200
// RUN: ld.lld --hash-style=sysv -shared %t2.o -soname=t2.so -o %t2.so
// RUN: llvm-readobj -S %t2.so | FileCheck --check-prefix=SO %s
// RUN: ld.lld --hash-style=sysv -dynamic-linker /lib64/ld-linux-x86-64.so.2 -rpath foo -rpath bar --export-dynamic %t.o %t2.so -o %t
-// RUN: llvm-readobj --program-headers --dynamic-table --symbols -S --dyn-syms --section-data --hash-table %t | FileCheck %s
+// RUN: llvm-readobj -S -l --dynamic-table --symbols --dyn-syms --section-data --hash-table %t | FileCheck %s
// RUN: ld.lld --hash-style=sysv %t.o %t2.so %t2.so -o %t2
// RUN: llvm-readobj --dyn-syms %t2 | FileCheck --check-prefix=DONT_EXPORT %s
// CHECK-NEXT: AddressAlignment:
// CHECK-NEXT: EntrySize: [[SYMENT:.*]]
+// CHECK: ProgramHeaders [
+// CHECK: Type: PT_INTERP
+// CHECK-NEXT: Offset: [[INTERPOFFSET]]
+// CHECK-NEXT: VirtualAddress: [[INTERPADDR]]
+// CHECK-NEXT: PhysicalAddress: [[INTERPADDR]]
+// CHECK-NEXT: FileSize: [[INTERPSIZE]]
+// CHECK-NEXT: MemSize: [[INTERPSIZE]]
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment: 1
+// CHECK-NEXT: }
+// CHECK: Type: PT_DYNAMIC
+// CHECK-NEXT: Offset: [[OFFSET]]
+// CHECK-NEXT: VirtualAddress: [[ADDR]]
+// CHECK-NEXT: PhysicalAddress: [[ADDR]]
+// CHECK-NEXT: FileSize: [[SIZE]]
+// CHECK-NEXT: MemSize: [[SIZE]]
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: PF_W
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment: [[ALIGN]]
+// CHECK-NEXT: }
+
+// CHECK: DynamicSection [
+// CHECK-NEXT: Tag Type Name/Value
+// CHECK-NEXT: 0x0000001D RUNPATH Library runpath: [foo:bar]
+// CHECK-NEXT: 0x00000001 NEEDED Shared library: [{{.*}}2.so]
+// CHECK-NEXT: 0x00000015 DEBUG 0x0
+// CHECK-NEXT: 0x00000011 REL [[RELADDR]]
+// CHECK-NEXT: 0x00000012 RELSZ [[RELSIZE]] (bytes)
+// CHECK-NEXT: 0x00000013 RELENT [[RELENT]] (bytes)
+// CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]
+// CHECK-NEXT: 0x0000000B SYMENT [[SYMENT]] (bytes)
+// CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]
+// CHECK-NEXT: 0x0000000A STRSZ
+// CHECK-NEXT: 0x00000004 HASH [[HASHADDR]]
+// CHECK-NEXT: 0x00000000 NULL 0x0
+// CHECK-NEXT: ]
+
// CHECK: Symbols [
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name:
// DONT_EXPORT-NEXT: }
// DONT_EXPORT-NEXT: ]
-// CHECK: DynamicSection [
-// CHECK-NEXT: Tag Type Name/Value
-// CHECK-NEXT: 0x0000001D RUNPATH Library runpath: [foo:bar]
-// CHECK-NEXT: 0x00000001 NEEDED Shared library: [{{.*}}2.so]
-// CHECK-NEXT: 0x00000015 DEBUG 0x0
-// CHECK-NEXT: 0x00000011 REL [[RELADDR]]
-// CHECK-NEXT: 0x00000012 RELSZ [[RELSIZE]] (bytes)
-// CHECK-NEXT: 0x00000013 RELENT [[RELENT]] (bytes)
-// CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]
-// CHECK-NEXT: 0x0000000B SYMENT [[SYMENT]] (bytes)
-// CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]
-// CHECK-NEXT: 0x0000000A STRSZ
-// CHECK-NEXT: 0x00000004 HASH [[HASHADDR]]
-// CHECK-NEXT: 0x00000000 NULL 0x0
-// CHECK-NEXT: ]
-
-// CHECK: ProgramHeaders [
-// CHECK: Type: PT_INTERP
-// CHECK-NEXT: Offset: [[INTERPOFFSET]]
-// CHECK-NEXT: VirtualAddress: [[INTERPADDR]]
-// CHECK-NEXT: PhysicalAddress: [[INTERPADDR]]
-// CHECK-NEXT: FileSize: [[INTERPSIZE]]
-// CHECK-NEXT: MemSize: [[INTERPSIZE]]
-// CHECK-NEXT: Flags [
-// CHECK-NEXT: PF_R
-// CHECK-NEXT: ]
-// CHECK-NEXT: Alignment: 1
-// CHECK-NEXT: }
-// CHECK: Type: PT_DYNAMIC
-// CHECK-NEXT: Offset: [[OFFSET]]
-// CHECK-NEXT: VirtualAddress: [[ADDR]]
-// CHECK-NEXT: PhysicalAddress: [[ADDR]]
-// CHECK-NEXT: FileSize: [[SIZE]]
-// CHECK-NEXT: MemSize: [[SIZE]]
-// CHECK-NEXT: Flags [
-// CHECK-NEXT: PF_R
-// CHECK-NEXT: PF_W
-// CHECK-NEXT: ]
-// CHECK-NEXT: Alignment: [[ALIGN]]
-// CHECK-NEXT: }
-
// CHECK: HashTable {
// CHECK-NEXT: Num Buckets: 4
// CHECK-NEXT: Num Chains: 4
// REQUIRES: x86
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
// RUN: ld.lld %t -o %tout
-// RUN: llvm-readobj --symbols --sections -l %tout | FileCheck %s
+// RUN: llvm-readobj -S -l --symbols %tout | FileCheck %s
// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS
.global _start
// CHECK-NEXT: EntrySize:
// CHECK-NEXT: }
+// Check that the TLS NOBITS sections weren't added to the R/W PT_LOAD's size.
+
+// CHECK: ProgramHeaders [
+// CHECK: Type: PT_LOAD
+// CHECK: Type: PT_LOAD
+// CHECK: Type: PT_LOAD
+// CHECK: FileSize: 8
+// CHECK-NEXT: MemSize: 8
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: PF_W
+// CHECK-NEXT: ]
+// CHECK: Type: PT_TLS
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: VirtualAddress: [[TDATA_ADDR]]
+// CHECK-NEXT: PhysicalAddress: [[TDATA_ADDR]]
+// CHECK-NEXT: FileSize: 8
+// CHECK-NEXT: MemSize: 16
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment:
+// CHECK-NEXT: }
+
// CHECK: Symbols [
// CHECK: Name: a
// CHECK-NEXT: Value: 0x8
// CHECK-NEXT: Section: .thread_data
// CHECK-NEXT: }
-// Check that the TLS NOBITS sections weren't added to the R/W PT_LOAD's size.
-
-// CHECK: ProgramHeaders [
-// CHECK: Type: PT_LOAD
-// CHECK: Type: PT_LOAD
-// CHECK: Type: PT_LOAD
-// CHECK: FileSize: 8
-// CHECK-NEXT: MemSize: 8
-// CHECK-NEXT: Flags [
-// CHECK-NEXT: PF_R
-// CHECK-NEXT: PF_W
-// CHECK-NEXT: ]
-// CHECK: Type: PT_TLS
-// CHECK-NEXT: Offset:
-// CHECK-NEXT: VirtualAddress: [[TDATA_ADDR]]
-// CHECK-NEXT: PhysicalAddress: [[TDATA_ADDR]]
-// CHECK-NEXT: FileSize: 8
-// CHECK-NEXT: MemSize: 16
-// CHECK-NEXT: Flags [
-// CHECK-NEXT: PF_R
-// CHECK-NEXT: ]
-// CHECK-NEXT: Alignment:
-// CHECK-NEXT: }
-
// DIS: Disassembly of section .text:
// DIS-EMPTY:
// DIS-NEXT: _start:
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
# RUN: ld.lld --hash-style=sysv %t.o %t1.so %t2.so -o %t
-# RUN: llvm-readobj -V --sections --section-data --dyn-syms --dynamic-table %t | FileCheck %s
+# RUN: llvm-readobj -S -d --section-data --dyn-syms -V %t | FileCheck %s
# CHECK: Section {
# CHECK: Index: 1
# CHECK-NEXT: )
# CHECK-NEXT: }
+# CHECK: 0x000000006FFFFFF0 VERSYM [[VERSYM]]
+# CHECK-NEXT: 0x000000006FFFFFFE VERNEED [[VERNEED]]
+# CHECK-NEXT: 0x000000006FFFFFFF VERNEEDNUM 2
+
# CHECK: DynamicSymbols [
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name:
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK: 0x000000006FFFFFF0 VERSYM [[VERSYM]]
-# CHECK-NEXT: 0x000000006FFFFFFE VERNEED [[VERNEED]]
-# CHECK-NEXT: 0x000000006FFFFFFF VERNEEDNUM 2
-
# CHECK: VersionSymbols [
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Version: 0
# SEC-PIC-NEXT: AddressAlignment:
# SEC-PIC-NEXT: EntrySize:
# SEC-PIC-NEXT: }
+# SEC-PIC: 0x000000006FFFFFF9 RELACOUNT 1
# SEC-PIC: Relocations [
# SEC-PIC-NEXT: Section ({{.*}}) .rela.dyn {
# SEC-PIC-NEXT: 0x2348 R_X86_64_RELATIVE - 0x3350
# SEC-PIC-NEXT: }
# SEC-PIC-NEXT: ]
-# SEC-PIC: 0x000000006FFFFFF9 RELACOUNT 1
## Check that there was no relaxation performed. All values refer to got entry.
## Ex: 0x1000 + 4249 + 7 = 0x20A0
# If the preference is to have text relocations, don't create plt of copy relocations.
+# CHECK: DynamicSection [
+# CHECK: FLAGS TEXTREL
+# CHECK: TEXTREL 0x0
+
# CHECK: Relocations [
# CHECK-NEXT: Section {{.*}} .rela.dyn {
# CHECK-NEXT: 0x12A0 R_X86_64_RELATIVE - 0x12A0
# CHECK-NEXT: }
# CHECK-NEXT: ]
-# CHECK: DynamicSection [
-# CHECK: FLAGS TEXTREL
-# CHECK: TEXTREL 0x0
+# STATIC: DynamicSection [
+# STATIC: FLAGS TEXTREL
+# STATIC: TEXTREL 0x0
# STATIC: Relocations [
# STATIC-NEXT: Section {{.*}} .rela.dyn {
# STATIC-NEXT: }
# STATIC-NEXT: ]
-# STATIC: DynamicSection [
-# STATIC: FLAGS TEXTREL
-# STATIC: TEXTREL 0x0
-
foo:
.quad foo
.quad bar
MAIN-NEXT: [11] .shstrtab STRTAB 0000000000000000 003050 000060 00 0 0 1
MAIN-NEXT: [12] .strtab STRTAB 0000000000000000 0030b0 000011 00 0 0 1
-MAIN: Symbol table '.dynsym' contains 2 entries:
-MAIN-NEXT: Num: Value Size Type Bind Vis Ndx Name
-MAIN-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-MAIN-NEXT: 1: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 6 _start
-
-MAIN: Symbol table '.symtab' contains 3 entries:
-MAIN-NEXT: Num: Value Size Type Bind Vis Ndx Name
-MAIN-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-MAIN-NEXT: 1: 0000000000202000 0 NOTYPE LOCAL HIDDEN 7 _DYNAMIC
-MAIN-NEXT: 2: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 6 _start
-
MAIN: Program Headers:
MAIN-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
MAIN-NEXT: PHDR 0x000040 0x0000000000200040 0x0000000000200040 0x0001c0 0x0001c0 R 0x8
MAIN-NEXT: GNU_RELRO 0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x001000 R 0x1
MAIN-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0
+MAIN: Symbol table '.dynsym' contains 2 entries:
+MAIN-NEXT: Num: Value Size Type Bind Vis Ndx Name
+MAIN-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+MAIN-NEXT: 1: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 6 _start
+
+MAIN: Symbol table '.symtab' contains 3 entries:
+MAIN-NEXT: Num: Value Size Type Bind Vis Ndx Name
+MAIN-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+MAIN-NEXT: 1: 0000000000202000 0 NOTYPE LOCAL HIDDEN 7 _DYNAMIC
+MAIN-NEXT: 2: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 6 _start
+
PART1: ELF Header:
PART1-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
PART1-NEXT: Class: ELF64
PART1-NEXT: [ 9] .shstrtab STRTAB 0000000000000000 002038 00004d 00 0 0 1
PART1-NEXT: [10] .strtab STRTAB 0000000000000000 002085 000004 00 0 0 1
-PART1: Symbol table '.dynsym' contains 2 entries:
-PART1-NEXT: Num: Value Size Type Bind Vis Ndx Name
-PART1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-PART1-NEXT: 1: 0000000000205000 0 NOTYPE GLOBAL DEFAULT 15 g1
-
-PART1: Symbol table '.symtab' contains 2 entries:
-PART1-NEXT: Num: Value Size Type Bind Vis Ndx Name
-PART1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-PART1-NEXT: 1: 0000000000205000 0 NOTYPE GLOBAL DEFAULT 6 g1
-
PART1: Program Headers:
PART1-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PART1-NEXT: PHDR 0x000040 0x0000000000203040 0x0000000000203040 0x000188 0x000188 R 0x1
PART1-NEXT: GNU_RELRO 0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x001000 R 0x1
PART1-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0
+PART1: Symbol table '.dynsym' contains 2 entries:
+PART1-NEXT: Num: Value Size Type Bind Vis Ndx Name
+PART1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+PART1-NEXT: 1: 0000000000205000 0 NOTYPE GLOBAL DEFAULT 15 g1
+
+PART1: Symbol table '.symtab' contains 2 entries:
+PART1-NEXT: Num: Value Size Type Bind Vis Ndx Name
+PART1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+PART1-NEXT: 1: 0000000000205000 0 NOTYPE GLOBAL DEFAULT 6 g1
+
PART2: ELF Header:
PART2-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
PART2-NEXT: Class: ELF64
PART2-NEXT: [ 9] .shstrtab STRTAB 0000000000000000 002038 00004d 00 0 0 1
PART2-NEXT: [10] .strtab STRTAB 0000000000000000 002085 000004 00 0 0 1
-PART2: Symbol table '.dynsym' contains 2 entries:
-PART2-NEXT: Num: Value Size Type Bind Vis Ndx Name
-PART2-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-PART2-NEXT: 1: 0000000000208000 0 NOTYPE GLOBAL DEFAULT 23 g2
-
-PART2: Symbol table '.symtab' contains 2 entries:
-PART2-NEXT: Num: Value Size Type Bind Vis Ndx Name
-PART2-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-PART2-NEXT: 1: 0000000000208000 0 NOTYPE GLOBAL DEFAULT 6 g2
-
PART2: Program Headers:
PART2-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PART2-NEXT: PHDR 0x000040 0x0000000000206040 0x0000000000206040 0x000188 0x000188 R 0x1
PART2-NEXT: GNU_RELRO 0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x001000 R 0x1
PART2-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0
+PART2: Symbol table '.dynsym' contains 2 entries:
+PART2-NEXT: Num: Value Size Type Bind Vis Ndx Name
+PART2-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+PART2-NEXT: 1: 0000000000208000 0 NOTYPE GLOBAL DEFAULT 23 g2
+
+PART2: Symbol table '.symtab' contains 2 entries:
+PART2-NEXT: Num: Value Size Type Bind Vis Ndx Name
+PART2-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+PART2-NEXT: 1: 0000000000208000 0 NOTYPE GLOBAL DEFAULT 6 g2
+
RUN: not llvm-objcopy --extract-partition=part3 %p/Inputs/partitions.elf %t4 2>&1 | FileCheck --check-prefix=ERROR1 %s
ERROR1: error: could not find partition named 'part3'
# LLVM-ALL: LoadName:
# LLVM-ALL: ElfHeader {
# LLVM-ALL: Sections [
+# LLVM-ALL: ProgramHeaders [
# LLVM-ALL: Relocations [
-# LLVM-ALL: Symbols [
# LLVM-ALL: EHFrameHeader {
# LLVM-ALL: .eh_frame section at offset 0x1128 address 0x0:
-# LLVM-ALL: ProgramHeaders [
+# LLVM-ALL: Symbols [
# LLVM-ALL: VersionSymbols [
# LLVM-ALL: VersionDefinitions [
# LLVM-ALL: VersionRequirements [
# GNU-ALL: ELF Header:
# GNU-ALL: There are {{.*}} section headers, starting at offset {{.*}}:
+# GNU-ALL: Program Headers:
+# GNU-ALL: Dynamic section at offset {{.*}} contains {{.*}} entries:
# GNU-ALL: Relocation section '.rela.data' at offset {{.*}} contains {{.*}} entries:
-# GNU-ALL: Symbol table '.symtab' contains {{.*}} entries:
# GNU-ALL: EHFrameHeader {
# GNU-ALL: .eh_frame section at offset {{.*}} address 0x0:
-# GNU-ALL: Dynamic section at offset {{.*}} contains {{.*}} entries:
-# GNU-ALL: Program Headers:
+# GNU-ALL: Symbol table '.symtab' contains {{.*}} entries:
# GNU-ALL: Version symbols section '.gnu.version' contains {{.*}} entries:
# GNU-ALL: Version definition section '.gnu.version_d' contains {{.*}} entries:
# GNU-ALL: Version needs section '.gnu.version_r' contains {{.*}} entries:
# CHECK: There are 5 section headers, starting at offset
# CHECK: Section Headers:
# CHECK: Key to Flags:
-# CHECK: There are no relocations in this file.
-# CHECK: Symbol table '.symtab' contains 1 entries
-# CHECK: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-# CHECK: Dynamic section at offset
-# CHECK: 0x0000000000000000 (NULL) 0x0
-# CHECK: NeededLibraries [
-# CHECK: ]
# CHECK: Elf file type is DYN (Shared object file)
# CHECK: Entry point 0x0
# CHECK: There are 1 program headers, starting at offset 64
# CHECK: DYNAMIC
# CHECK: Section to Segment mapping:
# CHECK: None .symtab .strtab .shstrtab
+# CHECK: Dynamic section at offset
+# CHECK: 0x0000000000000000 (NULL) 0x0
+# CHECK: NeededLibraries [
+# CHECK: ]
+# CHECK: There are no relocations in this file.
+# CHECK: Symbol table '.symtab' contains 1 entries
+# CHECK: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
# CHECK: There are no section groups in this file.
# WARN: warning: '[[FILE]]': no valid dynamic table was found
# WARN-EMPTY:
# WARN: File:
+# WARN: ProgramHeaders [
# WARN: Symbols [
# WARN: ]
-# WARN: ProgramHeaders [
# WARN-GNU: warning: '[[FILE]]': invalid PT_DYNAMIC size (0x4){{$}}
# WARN-GNU: warning: '[[FILE]]': section with index 1 has invalid size (0x4){{$}}
Dumper->printFileHeaders();
if (opts::SectionHeaders)
Dumper->printSectionHeaders();
- if (opts::Relocations)
- Dumper->printRelocations();
- if (opts::DynRelocs)
- Dumper->printDynamicRelocations();
- if (opts::Symbols || opts::DynamicSymbols)
- Dumper->printSymbols(opts::Symbols, opts::DynamicSymbols);
if (opts::HashSymbols)
Dumper->printHashSymbols();
- if (opts::UnwindInfo)
- Dumper->printUnwindInfo();
+ if (opts::ProgramHeaders || opts::SectionMapping == cl::BOU_TRUE)
+ Dumper->printProgramHeaders(opts::ProgramHeaders, opts::SectionMapping);
if (opts::DynamicTable)
Dumper->printDynamicTable();
if (opts::NeededLibraries)
Dumper->printNeededLibraries();
- if (opts::ProgramHeaders || opts::SectionMapping == cl::BOU_TRUE)
- Dumper->printProgramHeaders(opts::ProgramHeaders, opts::SectionMapping);
+ if (opts::Relocations)
+ Dumper->printRelocations();
+ if (opts::DynRelocs)
+ Dumper->printDynamicRelocations();
+ if (opts::UnwindInfo)
+ Dumper->printUnwindInfo();
+ if (opts::Symbols || opts::DynamicSymbols)
+ Dumper->printSymbols(opts::Symbols, opts::DynamicSymbols);
if (!opts::StringDump.empty())
Dumper->printSectionsAsString(Obj, opts::StringDump);
if (!opts::HexDump.empty())