It allows handling cases when we have SHT_REL[A] sections before target sections in objects. This fixes https://bugs.llvm.org/show_bug.cgi?id=46632 which says: "Normally it is not what compilers would emit. We have to support it, because some custom tools might want to use this feature, which is not restricted by ELF gABI" Differential revision: https://reviews.llvm.org/D83469
39 lines
1.2 KiB
Plaintext
39 lines
1.2 KiB
Plaintext
## If the section header index of a SHT_REL[A] section is smaller than the
|
|
## section header index of the relocated section, we should handle it properly.
|
|
## Normally it is not what compilers would emit, but some custom tools might
|
|
## want to use this feature, which is not restricted by ELF gABI.
|
|
## GNU ld supports this as well.
|
|
|
|
# RUN: yaml2obj %s -DTYPE=SHT_RELA -o %t1.o
|
|
# RUN: ld.lld -shared %t1.o -o %t1
|
|
# RUN: llvm-readelf --relocs %t1 | FileCheck %s
|
|
|
|
# RUN: yaml2obj %s -DTYPE=SHT_REL -o %t2.o
|
|
# RUN: ld.lld -shared %t2.o -o %t2
|
|
# RUN: llvm-readelf --relocs %t2 | FileCheck %s
|
|
|
|
## Check we handle the relocation properly.
|
|
# CHECK: Relocation section '.rela.dyn' at offset 0x238 contains 1 entries:
|
|
# CHECK-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
|
|
# CHECK-NEXT: 00000000000022f0 0000000100000001 R_X86_64_64 0000000000000000 foo + 0
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .relx.data
|
|
Type: [[TYPE]]
|
|
Info: .data
|
|
Relocations:
|
|
- Symbol: foo
|
|
Type: R_X86_64_64
|
|
- Name: .data
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_ALLOC, SHF_WRITE ]
|
|
Symbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|