230 lines
5.6 KiB
YAML
230 lines
5.6 KiB
YAML
## For implicit dynamic symbol 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 dynamic symbol table section,
|
|
## yaml2obj writes the default content.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-readelf %t1 --dyn-symbols | FileCheck %s --check-prefix=CASE1
|
|
|
|
# CASE1: Symbol table '.dynsym' contains 2 entries:
|
|
# CASE1-NEXT: Num: Value Size Type Bind Vis Ndx Name
|
|
# CASE1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
|
|
# CASE1-NEXT: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND foo
|
|
# CASE1-EMPTY:
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
DynamicSymbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|
|
|
|
## Specifying both `Size` and symbols at the same time is not allowed for .dynsym.
|
|
|
|
# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --implicit-check-not=error --check-prefix=CASE2
|
|
# RUN: not yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --implicit-check-not=error --check-prefix=CASE2
|
|
|
|
# CASE2: yaml2obj: error: cannot specify both `Size` and `DynamicSymbols` for symbol table section '.dynsym'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Size: 0x100
|
|
- Name: .dynsym2
|
|
Type: SHT_DYNSYM
|
|
Size: 0x100
|
|
DynamicSymbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Size: 0x100
|
|
- Name: .dynsym2
|
|
Type: SHT_DYNSYM
|
|
Size: 0x100
|
|
DynamicSymbols: []
|
|
|
|
## Specifying both `Content` and symbols at the same time is not allowed for .dynsym.
|
|
|
|
# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --implicit-check-not=error --check-prefix=CASE3
|
|
# RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --implicit-check-not=error --check-prefix=CASE3
|
|
|
|
# CASE3: yaml2obj: error: cannot specify both `Content` and `DynamicSymbols` for symbol table section '.dynsym'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "00"
|
|
- Name: .dynsym2
|
|
Type: SHT_DYNSYM
|
|
Content: "00"
|
|
DynamicSymbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "00"
|
|
- Name: .dynsym2
|
|
Type: SHT_DYNSYM
|
|
Content: "00"
|
|
DynamicSymbols: []
|
|
|
|
## Check we can use just `Content` to emit custom data in the symbol table section.
|
|
# RUN: yaml2obj --docnum=6 %s -o %t4
|
|
# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4
|
|
|
|
# CASE4: Name: .dynsym
|
|
# CASE4-NEXT: Type: SHT_DYNSYM
|
|
# CASE4-NEXT: Flags [
|
|
# CASE4-NEXT: SHF_ALLOC
|
|
# CASE4-NEXT: ]
|
|
# CASE4-NEXT: Address: 0x0
|
|
# CASE4-NEXT: Offset: 0x40
|
|
# CASE4-NEXT: Size: 2
|
|
# CASE4-NEXT: Link: 0
|
|
# CASE4-NEXT: Info: 1
|
|
# CASE4-NEXT: AddressAlignment: 0
|
|
# CASE4-NEXT: EntrySize: 24
|
|
# CASE4-NEXT: SectionData (
|
|
# CASE4-NEXT: 0000: 0123
|
|
# CASE4-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "0123"
|
|
|
|
## Check we can use just `Size` to emit custom data filled with zeroes
|
|
## in the symbol table section.
|
|
# RUN: yaml2obj --docnum=7 %s -o %t5
|
|
# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
|
|
|
|
# CASE5: Name: .dynsym
|
|
# CASE5-NEXT: Type: SHT_DYNSYM
|
|
# CASE5-NEXT: Flags [
|
|
# CASE5-NEXT: SHF_ALLOC
|
|
# CASE5-NEXT: ]
|
|
# CASE5-NEXT: Address: 0x0
|
|
# CASE5-NEXT: Offset: 0x40
|
|
# CASE5-NEXT: Size: 5
|
|
# CASE5-NEXT: Link: 0
|
|
# CASE5-NEXT: Info: 1
|
|
# CASE5-NEXT: AddressAlignment: 0
|
|
# CASE5-NEXT: EntrySize: 24
|
|
# CASE5-NEXT: SectionData (
|
|
# CASE5-NEXT: 0000: 00000000 00
|
|
# CASE5-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Size: 5
|
|
|
|
## Check we can specify both `Size` and `Content` when size is greater
|
|
## than content size. In this case zeroes are added as padding
|
|
## after after the specified content.
|
|
|
|
# RUN: yaml2obj --docnum=8 %s -o %t6
|
|
# RUN: llvm-readobj %t6 --section-data -S | FileCheck %s --check-prefix=CASE6
|
|
|
|
# CASE6: Name: .dynsym
|
|
# CASE6-NEXT: Type: SHT_DYNSYM
|
|
# CASE6-NEXT: Flags [
|
|
# CASE6-NEXT: SHF_ALLOC
|
|
# CASE6-NEXT: ]
|
|
# CASE6-NEXT: Address: 0x0
|
|
# CASE6-NEXT: Offset: 0x40
|
|
# CASE6-NEXT: Size: 4
|
|
# CASE6-NEXT: Link: 0
|
|
# CASE6-NEXT: Info: 1
|
|
# CASE6-NEXT: AddressAlignment: 0
|
|
# CASE6-NEXT: EntrySize: 24
|
|
# CASE6-NEXT: SectionData (
|
|
# CASE6-NEXT: 0000: 01230000
|
|
# CASE6-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "0123"
|
|
Size: 4
|
|
|
|
## Check we can specify both `Size` and `Content` when size is
|
|
## equal to content size.
|
|
|
|
# RUN: yaml2obj --docnum=9 %s -o %t7
|
|
# RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7
|
|
|
|
# CASE7: Name: .dynsym
|
|
# CASE7-NEXT: Type: SHT_DYNSYM
|
|
# CASE7-NEXT: Flags [
|
|
# CASE7-NEXT: SHF_ALLOC
|
|
# CASE7-NEXT: ]
|
|
# CASE7-NEXT: Address: 0x0
|
|
# CASE7-NEXT: Offset: 0x40
|
|
# CASE7-NEXT: Size: 2
|
|
# CASE7-NEXT: Link: 0
|
|
# CASE7-NEXT: Info: 1
|
|
# CASE7-NEXT: AddressAlignment: 0
|
|
# CASE7-NEXT: EntrySize: 24
|
|
# CASE7-NEXT: SectionData (
|
|
# CASE7-NEXT: 0000: 0123
|
|
# CASE7-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "0123"
|
|
Size: 2
|