diff --git a/lld/test/ELF/aarch64-gnu-ifunc-plt.s b/lld/test/ELF/aarch64-gnu-ifunc-plt.s --- a/lld/test/ELF/aarch64-gnu-ifunc-plt.s +++ b/lld/test/ELF/aarch64-gnu-ifunc-plt.s @@ -5,7 +5,12 @@ // 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 [ @@ -26,11 +31,6 @@ // 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: diff --git a/lld/test/ELF/amdgpu-globals.s b/lld/test/ELF/amdgpu-globals.s --- a/lld/test/ELF/amdgpu-globals.s +++ b/lld/test/ELF/amdgpu-globals.s @@ -36,6 +36,11 @@ # 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]] @@ -51,13 +56,3 @@ # 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: } diff --git a/lld/test/ELF/amdgpu-kernels.s b/lld/test/ELF/amdgpu-kernels.s --- a/lld/test/ELF/amdgpu-kernels.s +++ b/lld/test/ELF/amdgpu-kernels.s @@ -34,6 +34,9 @@ # CHECK: ] # CHECK: } +# CHECK: ProgramHeader { +# CHECK: Type: PT_LOAD + # CHECK: Symbol { # CHECK: Name: kernel0 # CHECK: Value: @@ -51,8 +54,3 @@ # CHECK: Type: AMDGPU_HSA_KERNEL # CHECK: Section: .text # CHECK: } - -# CHECK: ProgramHeader { -# CHECK: Type: PT_LOAD -# CHECK: VirtualAddress: -# CHECK: } diff --git a/lld/test/ELF/apply-dynamic-relocs.s b/lld/test/ELF/apply-dynamic-relocs.s --- a/lld/test/ELF/apply-dynamic-relocs.s +++ b/lld/test/ELF/apply-dynamic-relocs.s @@ -4,10 +4,10 @@ # 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 @@ -18,15 +18,15 @@ # 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) diff --git a/lld/test/ELF/as-needed-no-reloc.s b/lld/test/ELF/as-needed-no-reloc.s --- a/lld/test/ELF/as-needed-no-reloc.s +++ b/lld/test/ELF/as-needed-no-reloc.s @@ -3,20 +3,13 @@ # 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: diff --git a/lld/test/ELF/basic-aarch64.s b/lld/test/ELF/basic-aarch64.s --- a/lld/test/ELF/basic-aarch64.s +++ b/lld/test/ELF/basic-aarch64.s @@ -126,35 +126,6 @@ # 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) @@ -207,3 +178,32 @@ # 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: ] diff --git a/lld/test/ELF/basic-mips.s b/lld/test/ELF/basic-mips.s --- a/lld/test/ELF/basic-mips.s +++ b/lld/test/ELF/basic-mips.s @@ -208,37 +208,6 @@ # 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) @@ -328,3 +297,34 @@ # 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: ] diff --git a/lld/test/ELF/basic-sparcv9.s b/lld/test/ELF/basic-sparcv9.s --- a/lld/test/ELF/basic-sparcv9.s +++ b/lld/test/ELF/basic-sparcv9.s @@ -126,26 +126,6 @@ # 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) @@ -198,3 +178,23 @@ # 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: ] diff --git a/lld/test/ELF/basic.s b/lld/test/ELF/basic.s --- a/lld/test/ELF/basic.s +++ b/lld/test/ELF/basic.s @@ -128,26 +128,6 @@ # 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) @@ -200,6 +180,26 @@ # 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 diff --git a/lld/test/ELF/combreloc.s b/lld/test/ELF/combreloc.s --- a/lld/test/ELF/combreloc.s +++ b/lld/test/ELF/combreloc.s @@ -12,6 +12,8 @@ # 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 @@ -21,12 +23,12 @@ # 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 @@ -36,8 +38,6 @@ # 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 diff --git a/lld/test/ELF/dynamic-got.s b/lld/test/ELF/dynamic-got.s --- a/lld/test/ELF/dynamic-got.s +++ b/lld/test/ELF/dynamic-got.s @@ -37,17 +37,17 @@ // 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 diff --git a/lld/test/ELF/dynamic-reloc.s b/lld/test/ELF/dynamic-reloc.s --- a/lld/test/ELF/dynamic-reloc.s +++ b/lld/test/ELF/dynamic-reloc.s @@ -4,7 +4,7 @@ // 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 @@ -29,17 +29,6 @@ // 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] @@ -57,6 +46,12 @@ // 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 diff --git a/lld/test/ELF/gc-sections-shared.s b/lld/test/ELF/gc-sections-shared.s --- a/lld/test/ELF/gc-sections-shared.s +++ b/lld/test/ELF/gc-sections-shared.s @@ -14,6 +14,10 @@ # 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: @@ -62,10 +66,6 @@ # 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 diff --git a/lld/test/ELF/gnu-ifunc-dyntags.s b/lld/test/ELF/gnu-ifunc-dyntags.s --- a/lld/test/ELF/gnu-ifunc-dyntags.s +++ b/lld/test/ELF/gnu-ifunc-dyntags.s @@ -11,13 +11,6 @@ # 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) @@ -26,6 +19,13 @@ # 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 diff --git a/lld/test/ELF/gnu-ifunc-plt-i386.s b/lld/test/ELF/gnu-ifunc-plt-i386.s --- a/lld/test/ELF/gnu-ifunc-plt-i386.s +++ b/lld/test/ELF/gnu-ifunc-plt-i386.s @@ -7,6 +7,11 @@ // 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 { @@ -24,11 +29,6 @@ // 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: diff --git a/lld/test/ELF/gnu-ifunc-plt.s b/lld/test/ELF/gnu-ifunc-plt.s --- a/lld/test/ELF/gnu-ifunc-plt.s +++ b/lld/test/ELF/gnu-ifunc-plt.s @@ -10,6 +10,11 @@ // 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 { @@ -28,11 +33,6 @@ // 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: diff --git a/lld/test/ELF/i386-tls-ie-shared.s b/lld/test/ELF/i386-tls-ie-shared.s --- a/lld/test/ELF/i386-tls-ie-shared.s +++ b/lld/test/ELF/i386-tls-ie-shared.s @@ -21,6 +21,7 @@ // 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 @@ -37,7 +38,6 @@ // GOTRELSHARED-NEXT: 0x338C R_386_TLS_TPOFF tlslocal1 0x0 // GOTRELSHARED-NEXT: } // GOTRELSHARED-NEXT: ] -// GOTRELSHARED: 0x6FFFFFFA RELCOUNT 8 // DISASMSHARED: Disassembly of section test: // DISASMSHARED-EMPTY: diff --git a/lld/test/ELF/init-fini.s b/lld/test/ELF/init-fini.s --- a/lld/test/ELF/init-fini.s +++ b/lld/test/ELF/init-fini.s @@ -38,13 +38,13 @@ // 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: diff --git a/lld/test/ELF/linkerscript/symbol-only-align.test b/lld/test/ELF/linkerscript/symbol-only-align.test --- a/lld/test/ELF/linkerscript/symbol-only-align.test +++ b/lld/test/ELF/linkerscript/symbol-only-align.test @@ -26,10 +26,10 @@ # 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 diff --git a/lld/test/ELF/local-got-pie.s b/lld/test/ELF/local-got-pie.s --- a/lld/test/ELF/local-got-pie.s +++ b/lld/test/ELF/local-got-pie.s @@ -1,7 +1,7 @@ // 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 @@ -31,9 +31,10 @@ // 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 diff --git a/lld/test/ELF/local-got-shared.s b/lld/test/ELF/local-got-shared.s --- a/lld/test/ELF/local-got-shared.s +++ b/lld/test/ELF/local-got-shared.s @@ -1,7 +1,7 @@ // 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: @@ -29,9 +29,10 @@ // 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 diff --git a/lld/test/ELF/mips-26.s b/lld/test/ELF/mips-26.s --- a/lld/test/ELF/mips-26.s +++ b/lld/test/ELF/mips-26.s @@ -7,7 +7,7 @@ # 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: @@ -58,14 +58,14 @@ # 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: ] diff --git a/lld/test/ELF/mips-32.s b/lld/test/ELF/mips-32.s --- a/lld/test/ELF/mips-32.s +++ b/lld/test/ELF/mips-32.s @@ -14,7 +14,7 @@ # 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 @@ -34,6 +34,12 @@ # 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]+]] @@ -41,10 +47,5 @@ # 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 diff --git a/lld/test/ELF/mips-64.s b/lld/test/ELF/mips-64.s --- a/lld/test/ELF/mips-64.s +++ b/lld/test/ELF/mips-64.s @@ -4,7 +4,7 @@ # 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 @@ -19,6 +19,10 @@ # 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 @@ -27,10 +31,6 @@ # 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 diff --git a/lld/test/ELF/mips-dynamic.s b/lld/test/ELF/mips-dynamic.s --- a/lld/test/ELF/mips-dynamic.s +++ b/lld/test/ELF/mips-dynamic.s @@ -96,11 +96,6 @@ # 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]] @@ -111,6 +106,11 @@ # 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 diff --git a/lld/test/ELF/mips-got-weak.s b/lld/test/ELF/mips-got-weak.s --- a/lld/test/ELF/mips-got-weak.s +++ b/lld/test/ELF/mips-got-weak.s @@ -9,13 +9,6 @@ # 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 @@ -23,6 +16,13 @@ # 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: diff --git a/lld/test/ELF/mips-options.s b/lld/test/ELF/mips-options.s --- a/lld/test/ELF/mips-options.s +++ b/lld/test/ELF/mips-options.s @@ -15,9 +15,6 @@ __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: @@ -31,6 +28,9 @@ # 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]] diff --git a/lld/test/ELF/partition-exidx.s b/lld/test/ELF/partition-exidx.s --- a/lld/test/ELF/partition-exidx.s +++ b/lld/test/ELF/partition-exidx.s @@ -9,25 +9,25 @@ // 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 diff --git a/lld/test/ELF/partition-pack-dyn-relocs.s b/lld/test/ELF/partition-pack-dyn-relocs.s --- a/lld/test/ELF/partition-pack-dyn-relocs.s +++ b/lld/test/ELF/partition-pack-dyn-relocs.s @@ -18,6 +18,10 @@ // 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 @@ -30,10 +34,6 @@ // 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 diff --git a/lld/test/ELF/partition-synthetic-sections.s b/lld/test/ELF/partition-synthetic-sections.s --- a/lld/test/ELF/partition-synthetic-sections.s +++ b/lld/test/ELF/partition-synthetic-sections.s @@ -51,6 +51,55 @@ // 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 @@ -59,13 +108,25 @@ // 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 @@ -88,69 +149,6 @@ // 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) diff --git a/lld/test/ELF/ppc32-call-stub-nopic.s b/lld/test/ELF/ppc32-call-stub-nopic.s --- a/lld/test/ELF/ppc32-call-stub-nopic.s +++ b/lld/test/ELF/ppc32-call-stub-nopic.s @@ -10,14 +10,14 @@ # 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 diff --git a/lld/test/ELF/pre_init_fini_array.s b/lld/test/ELF/pre_init_fini_array.s --- a/lld/test/ELF/pre_init_fini_array.s +++ b/lld/test/ELF/pre_init_fini_array.s @@ -59,6 +59,14 @@ // 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: ] @@ -128,14 +136,6 @@ // 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> diff --git a/lld/test/ELF/relocation-copy-relro.s b/lld/test/ELF/relocation-copy-relro.s --- a/lld/test/ELF/relocation-copy-relro.s +++ b/lld/test/ELF/relocation-copy-relro.s @@ -18,9 +18,6 @@ // 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 @@ -28,6 +25,9 @@ // 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: diff --git a/lld/test/ELF/riscv-tls-ie.s b/lld/test/ELF/riscv-tls-ie.s --- a/lld/test/ELF/riscv-tls-ie.s +++ b/lld/test/ELF/riscv-tls-ie.s @@ -22,17 +22,17 @@ # 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 diff --git a/lld/test/ELF/shared.s b/lld/test/ELF/shared.s --- a/lld/test/ELF/shared.s +++ b/lld/test/ELF/shared.s @@ -4,7 +4,7 @@ // 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 @@ -129,6 +129,47 @@ // 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: @@ -248,47 +289,6 @@ // 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 diff --git a/lld/test/ELF/tls.s b/lld/test/ELF/tls.s --- a/lld/test/ELF/tls.s +++ b/lld/test/ELF/tls.s @@ -1,7 +1,7 @@ // 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 @@ -101,6 +101,30 @@ // 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 @@ -138,30 +162,6 @@ // 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: diff --git a/lld/test/ELF/verneed.s b/lld/test/ELF/verneed.s --- a/lld/test/ELF/verneed.s +++ b/lld/test/ELF/verneed.s @@ -7,7 +7,7 @@ # 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 @@ -74,6 +74,10 @@ # 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: @@ -113,10 +117,6 @@ # 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 diff --git a/lld/test/ELF/x86-64-gotpc-relax-nopic.s b/lld/test/ELF/x86-64-gotpc-relax-nopic.s --- a/lld/test/ELF/x86-64-gotpc-relax-nopic.s +++ b/lld/test/ELF/x86-64-gotpc-relax-nopic.s @@ -45,12 +45,12 @@ # 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 diff --git a/lld/test/ELF/ztext.s b/lld/test/ELF/ztext.s --- a/lld/test/ELF/ztext.s +++ b/lld/test/ELF/ztext.s @@ -16,6 +16,10 @@ # 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 @@ -24,9 +28,9 @@ # 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 { @@ -35,10 +39,6 @@ # STATIC-NEXT: } # STATIC-NEXT: ] -# STATIC: DynamicSection [ -# STATIC: FLAGS TEXTREL -# STATIC: TEXTREL 0x0 - foo: .quad foo .quad bar diff --git a/llvm/test/tools/llvm-objcopy/ELF/partitions.test b/llvm/test/tools/llvm-objcopy/ELF/partitions.test --- a/llvm/test/tools/llvm-objcopy/ELF/partitions.test +++ b/llvm/test/tools/llvm-objcopy/ELF/partitions.test @@ -48,17 +48,6 @@ 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 @@ -70,6 +59,17 @@ 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 @@ -105,16 +105,6 @@ 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 @@ -125,6 +115,16 @@ 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 @@ -160,16 +160,6 @@ 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 @@ -180,6 +170,16 @@ 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' diff --git a/llvm/test/tools/llvm-readobj/ELF/all.test b/llvm/test/tools/llvm-readobj/ELF/all.test --- a/llvm/test/tools/llvm-readobj/ELF/all.test +++ b/llvm/test/tools/llvm-readobj/ELF/all.test @@ -8,11 +8,11 @@ # 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 [ @@ -25,12 +25,12 @@ # 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: diff --git a/llvm/test/tools/llvm-readobj/ELF/check-output-order.test b/llvm/test/tools/llvm-readobj/ELF/check-output-order.test --- a/llvm/test/tools/llvm-readobj/ELF/check-output-order.test +++ b/llvm/test/tools/llvm-readobj/ELF/check-output-order.test @@ -11,19 +11,19 @@ # 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. diff --git a/llvm/test/tools/llvm-readobj/ELF/dynamic-malformed.test b/llvm/test/tools/llvm-readobj/ELF/dynamic-malformed.test --- a/llvm/test/tools/llvm-readobj/ELF/dynamic-malformed.test +++ b/llvm/test/tools/llvm-readobj/ELF/dynamic-malformed.test @@ -12,9 +12,9 @@ # 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){{$}} diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -466,22 +466,22 @@ 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())