mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-21 03:53:04 +02:00
c21ea7e2f4
Linkers (ld.bfd/gold/lld) place the section header table at the very end. This allows tools to strip it, which is optional in executable/shared objects. In addition, if we add or section, the size of the section header table will change. Placing the section header table in the end keeps section offsets unchanged. yaml2obj currently places the section header table immediately after the program header. Follow what linkers do to make offset updating easier. Reviewed By: grimar Differential Revision: https://reviews.llvm.org/D67221 llvm-svn: 371074
87 lines
2.9 KiB
Plaintext
87 lines
2.9 KiB
Plaintext
## Check the section header properties of ".dynsym",
|
|
## ".dynstr", ".symtab", ".strtab", ".shstrtab".
|
|
## These sections sections are usually added implicitly,
|
|
## but here we add them explicitly in YAML and verify.
|
|
## We check their order matches YAML and that file offset is
|
|
## ascending. This is a natural default behavior.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-readelf -S %t1 | FileCheck %s
|
|
|
|
# CHECK: Section Headers:
|
|
# CHECK-NEXT: [Nr] Name Type Address Off Size
|
|
# CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000
|
|
# CHECK-NEXT: [ 1] .dynstr STRTAB 0000000000000100 000040 000009
|
|
# CHECK-NEXT: [ 2] .dynsym DYNSYM 0000000000000150 000049 000030
|
|
# CHECK-NEXT: [ 3] .symtab SYMTAB 0000000000000000 000079 000018
|
|
# CHECK-NEXT: [ 4] .strtab STRTAB 0000000000000000 000091 000001
|
|
# CHECK-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000092 000035
|
|
# CHECK-NEXT: [ 6] .text.foo PROGBITS 0000000000000200 0000c7 000000
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynstr
|
|
Type: SHT_STRTAB
|
|
Address: 0x100
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Address: 0x150
|
|
- Name: .symtab
|
|
Type: SHT_SYMTAB
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
- Name: .shstrtab
|
|
Type: SHT_STRTAB
|
|
- Name: .text.foo
|
|
Type: SHT_PROGBITS
|
|
Address: 0x200
|
|
## Symbol is required for the .dynsym to be generated.
|
|
DynamicSymbols:
|
|
- Name: _Z3fooi
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that yaml2obj creates empty .dynstr and .dynsym sections for
|
|
## the case when no dynamic symbols were specified and Content wasn't set,
|
|
## but the sections were explicitly listed. Check their VAs are correct.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
|
# RUN: llvm-readelf -S %t2 | FileCheck %s --check-prefix=NODYNSYM
|
|
|
|
# NODYNSYM: Section Headers:
|
|
# NODYNSYM-NEXT: [Nr] Name Type Address Off Size
|
|
# NODYNSYM-NEXT: [ 0] NULL 0000000000000000 000000 000000
|
|
# NODYNSYM-NEXT: [ 1] .dynstr STRTAB 0000000000000100 000040 000001
|
|
# NODYNSYM-NEXT: [ 2] .dynsym DYNSYM 0000000000000150 000041 000018
|
|
# NODYNSYM-NEXT: [ 3] .symtab SYMTAB 0000000000000000 000059 000018
|
|
# NODYNSYM-NEXT: [ 4] .strtab STRTAB 0000000000000000 000071 000001
|
|
# NODYNSYM-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000072 000035
|
|
# NODYNSYM-NEXT: [ 6] .text.foo PROGBITS 0000000000000200 0000a7 000000
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynstr
|
|
Type: SHT_STRTAB
|
|
Address: 0x100
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Address: 0x150
|
|
- Name: .symtab
|
|
Type: SHT_SYMTAB
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
- Name: .shstrtab
|
|
Type: SHT_STRTAB
|
|
- Name: .text.foo
|
|
Type: SHT_PROGBITS
|
|
Address: 0x200
|