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
168 lines
4.2 KiB
YAML
168 lines
4.2 KiB
YAML
## For implicit string table sections, `Size` and/or `Content` fields can also
|
|
## be specified in YAML. Here we test the behavior in different cases.
|
|
|
|
## When no `Size` or `Content` is specified for a string table section,
|
|
## yaml2obj writes the default content.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-objdump %t1 -s | FileCheck %s --check-prefix=CASE1
|
|
|
|
# CASE1: Contents of section .strtab:
|
|
# CASE1-NEXT: 0000 00666f6f 00 .foo.
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
## Used to trigger adding string `foo` to the string table section.
|
|
Symbols:
|
|
- Name: foo
|
|
|
|
## For string table sections, `Size` can be used to override the
|
|
## implicit string table data. The content is filled with zeroes in this case.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
|
# RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2
|
|
|
|
# CASE2: Name: .strtab
|
|
# CASE2-NEXT: Type: SHT_STRTAB
|
|
# CASE2-NEXT: Flags [
|
|
# CASE2-NEXT: ]
|
|
# CASE2-NEXT: Address: 0x0
|
|
# CASE2-NEXT: Offset: 0x40
|
|
# CASE2-NEXT: Size: 2
|
|
# CASE2-NEXT: Link: 0
|
|
# CASE2-NEXT: Info: 0
|
|
# CASE2-NEXT: AddressAlignment: 0
|
|
# CASE2-NEXT: EntrySize: 0
|
|
# CASE2-NEXT: SectionData (
|
|
# CASE2-NEXT: 0000: 0000
|
|
# CASE2-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
Size: 2
|
|
## Used to trigger adding string `foo` to the string table section.
|
|
Symbols:
|
|
- Name: foo
|
|
|
|
## For string table sections, `Content` can be used to override the
|
|
## implicit string table data.
|
|
|
|
# RUN: yaml2obj --docnum=3 %s -o %t3
|
|
# RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE3
|
|
|
|
# CASE3: Name: .strtab
|
|
# CASE3-NEXT: Type: SHT_STRTAB
|
|
# CASE3-NEXT: Flags [
|
|
# CASE3-NEXT: ]
|
|
# CASE3-NEXT: Address: 0x0
|
|
# CASE3-NEXT: Offset: 0x40
|
|
# CASE3-NEXT: Size: 2
|
|
# CASE3-NEXT: Link: 0
|
|
# CASE3-NEXT: Info: 0
|
|
# CASE3-NEXT: AddressAlignment: 0
|
|
# CASE3-NEXT: EntrySize: 0
|
|
# CASE3-NEXT: SectionData (
|
|
# CASE3-NEXT: 0000: 0102
|
|
# CASE3-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
Content: "0102"
|
|
## Used to trigger adding string `foo` to the string table section.
|
|
Symbols:
|
|
- Name: foo
|
|
|
|
## For string table sections, check we can specify both `Size` and `Content`
|
|
## when size is greater than content size. In this case zeroes are
|
|
## added as padding after the specified content.
|
|
|
|
# RUN: yaml2obj --docnum=4 %s -o %t4
|
|
# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4
|
|
|
|
# CASE4: Name: .strtab
|
|
# CASE4-NEXT: Type: SHT_STRTAB
|
|
# CASE4-NEXT: Flags [
|
|
# CASE4-NEXT: ]
|
|
# CASE4-NEXT: Address: 0x0
|
|
# CASE4-NEXT: Offset: 0x40
|
|
# CASE4-NEXT: Size: 3
|
|
# CASE4-NEXT: Link: 0
|
|
# CASE4-NEXT: Info: 0
|
|
# CASE4-NEXT: AddressAlignment: 0
|
|
# CASE4-NEXT: EntrySize: 0
|
|
# CASE4-NEXT: SectionData (
|
|
# CASE4-NEXT: 0000: 010200
|
|
# CASE4-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
Content: "0102"
|
|
Size: 3
|
|
## Used to trigger adding string `foo` to the string table section.
|
|
Symbols:
|
|
- Name: foo
|
|
|
|
## For string table sections, check we can specify both `Size` and `Content`
|
|
## when size is equal to content size.
|
|
|
|
# RUN: yaml2obj --docnum=5 %s -o %t5
|
|
# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
|
|
|
|
# CASE5: Name: .strtab
|
|
# CASE5-NEXT: Type: SHT_STRTAB
|
|
# CASE5-NEXT: Flags [ (0x0)
|
|
# CASE5-NEXT: ]
|
|
# CASE5-NEXT: Address: 0x0
|
|
# CASE5-NEXT: Offset: 0x40
|
|
# CASE5-NEXT: Size: 2
|
|
# CASE5-NEXT: Link: 0
|
|
# CASE5-NEXT: Info: 0
|
|
# CASE5-NEXT: AddressAlignment: 0
|
|
# CASE5-NEXT: EntrySize: 0
|
|
# CASE5-NEXT: SectionData (
|
|
# CASE5-NEXT: 0000: 0102
|
|
# CASE5-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .strtab
|
|
Type: SHT_STRTAB
|
|
Content: "0102"
|
|
Size: 2
|
|
## Used to trigger adding string `foo` to the string table section.
|
|
Symbols:
|
|
- Name: foo
|