313 lines
7.5 KiB
YAML
313 lines
7.5 KiB
YAML
|
## Check how yaml2obj produces SHT_HASH sections.
|
||
|
|
||
|
## Check we can describe a SHT_HASH section using the "Content" tag.
|
||
|
## Check default values of section fields.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
||
|
# RUN: llvm-readobj --sections --section-data %t1 | \
|
||
|
# RUN: FileCheck %s -DENTSIZE=4 --check-prefix=CONTENT
|
||
|
|
||
|
# CONTENT: Name: .hash
|
||
|
# CONTENT-NEXT: Type: SHT_HASH
|
||
|
# CONTENT-NEXT: Flags [
|
||
|
# CONTENT-NEXT: ]
|
||
|
# CONTENT-NEXT: Address: 0x0
|
||
|
# CONTENT-NEXT: Offset: 0x44
|
||
|
# CONTENT-NEXT: Size: 20
|
||
|
# CONTENT-NEXT: Link: 1
|
||
|
# CONTENT-NEXT: Info: 0
|
||
|
# CONTENT-NEXT: AddressAlignment: 0
|
||
|
# CONTENT-NEXT: EntrySize: [[ENTSIZE]]{{$}}
|
||
|
# CONTENT-NEXT: SectionData (
|
||
|
# CONTENT-NEXT: 0000: 01000000 02000000 03000000 04000000
|
||
|
# CONTENT-NEXT: 0010: 05000000
|
||
|
# CONTENT-NEXT: )
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
## SHT_HASH is linked to dynamic symbol table by default.
|
||
|
- Name: .dynsym
|
||
|
Type: SHT_DYNSYM
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Content: '0100000002000000030000000400000005000000'
|
||
|
EntSize: [[ENTSIZE=<none>]]
|
||
|
|
||
|
## Check we can set an arbitrary entry size for the SHT_HASH section.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=1 -DENTSIZE=0xFF %s -o %t1.entsize
|
||
|
# RUN: llvm-readobj --sections --section-data %t1.entsize | \
|
||
|
# RUN: FileCheck %s -DENTSIZE=255 --check-prefix=CONTENT
|
||
|
|
||
|
## Check we can describe a SHT_HASH section using "Bucket" and "Chain" tags.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
||
|
# RUN: llvm-readobj --sections --section-data %t2 | FileCheck %s --check-prefix=BUCKET-CHAIN
|
||
|
|
||
|
# BUCKET-CHAIN: Name: .hash
|
||
|
# BUCKET-CHAIN: Size:
|
||
|
# BUCKET-CHAIN-SAME: 28
|
||
|
# BUCKET-CHAIN: Link:
|
||
|
# BUCKET-CHAIN-SAME: 0
|
||
|
# BUCKET-CHAIN: SectionData (
|
||
|
# BUCKET-CHAIN-NEXT: 0000: 02000000 03000000 01000000 02000000 |
|
||
|
# BUCKET-CHAIN-NEXT: 0010: 03000000 04000000 05000000 |
|
||
|
# BUCKET-CHAIN-NEXT: )
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Bucket: [ 1, 2 ]
|
||
|
Chain: [ 3, 4, 5 ]
|
||
|
|
||
|
## Check we can't use "Content" and "Bucket" tags together.
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-BUCKET
|
||
|
|
||
|
# CONTENT-BUCKET: "Bucket" and "Chain" cannot be used with "Content" or "Size"
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Bucket: [ 1 ]
|
||
|
Content: '00'
|
||
|
|
||
|
## Check we can't use "Content" and "Chain" tags together.
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-CHAIN
|
||
|
|
||
|
# CONTENT-CHAIN: "Chain" cannot be used with "Content" or "Size"
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Chain: [ 1 ]
|
||
|
Content: '00'
|
||
|
|
||
|
## Check we can't use "Bucket" without "Chain".
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=NO-BUCKET-OR-CHAIN
|
||
|
|
||
|
# NO-BUCKET-OR-CHAIN: error: "Bucket" and "Chain" must be used together
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Bucket: [ 1 ]
|
||
|
|
||
|
## Check we can't use "Chain" without "Bucket".
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=6 %s 2>&1 | FileCheck %s --check-prefix=NO-BUCKET-OR-CHAIN
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Chain: [ 1 ]
|
||
|
|
||
|
## Check we emit an empty section if neither "Bucket", "Chain",
|
||
|
## "Content" nor "Size" were set.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=7 %s -o %t7
|
||
|
# RUN: llvm-readelf --sections %t7 | FileCheck %s --check-prefix=NO-TAGS
|
||
|
|
||
|
# NO-TAGS: [Nr] Name Type Address Off Size
|
||
|
# NO-TAGS: [ 1] .hash HASH 00000000 000034 000000
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
|
||
|
## Check we can set any sh_link value with use of the "Link" tag.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=8 %s -o %t8
|
||
|
# RUN: llvm-readobj --sections %t8 | FileCheck %s --check-prefix=LINK
|
||
|
|
||
|
# LINK: Name: .hash1
|
||
|
# LINK: Link:
|
||
|
# LINK-SAME: 123
|
||
|
|
||
|
# LINK: Name: .hash2
|
||
|
# LINK: Link:
|
||
|
# LINK-SAME: 1
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash1
|
||
|
Type: SHT_HASH
|
||
|
Content: ""
|
||
|
Link: 123
|
||
|
- Name: .hash2
|
||
|
Type: SHT_HASH
|
||
|
Content: ""
|
||
|
Link: .hash1
|
||
|
## SHT_HASH is linked to dynamic symbol table by default if it exists.
|
||
|
- Name: .dynsym
|
||
|
Type: SHT_DYNSYM
|
||
|
|
||
|
## Check we can use only "Size" to create a SHT_HASH section.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=9 %s -o %t9
|
||
|
# RUN: llvm-readobj --sections --section-data %t9 | FileCheck %s --check-prefix=SIZE
|
||
|
|
||
|
# SIZE: Name: .hash
|
||
|
# SIZE: Size:
|
||
|
# SIZE-SAME: 17
|
||
|
# SIZE: SectionData (
|
||
|
# SIZE-NEXT: 0000: 00000000 00000000 00000000 00000000 |
|
||
|
# SIZE-NEXT: 0010: 00 |
|
||
|
# SIZE-NEXT: )
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Size: 0x11
|
||
|
|
||
|
## Check we can use "Size" and "Content" together to create a SHT_HASH section.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=10 %s -o %t10
|
||
|
# RUN: llvm-readobj --sections --section-data %t10 | FileCheck %s --check-prefix=SIZE-CONTENT
|
||
|
|
||
|
# SIZE-CONTENT: Name: .hash
|
||
|
# SIZE-CONTENT: Size:
|
||
|
# SIZE-CONTENT-SAME: 5
|
||
|
# SIZE-CONTENT: SectionData (
|
||
|
# SIZE-CONTENT-NEXT: 0000: 11223300 00 |
|
||
|
# SIZE-CONTENT-NEXT: )
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Size: 0x5
|
||
|
Content: "112233"
|
||
|
|
||
|
## Check that when "Size" and "Content" are used together, the size
|
||
|
## must be greater than or equal to the content size.
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=11 %s 2>&1 | FileCheck %s --check-prefix=SIZE-CONTENT-ERR
|
||
|
|
||
|
# SIZE-CONTENT-ERR: error: Section size must be greater than or equal to the content size
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Size: 0x1
|
||
|
Content: "1122"
|
||
|
|
||
|
## Check we can't use "Size" and "Bucket" tags together.
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=12 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-BUCKET
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Size: 0x1
|
||
|
Bucket: [ 1 ]
|
||
|
|
||
|
## Check we can't use "Size" and "Chain" tags together.
|
||
|
|
||
|
# RUN: not yaml2obj --docnum=13 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-CHAIN
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Size: 0x1
|
||
|
Chain: [ 1 ]
|
||
|
|
||
|
## Check we can override "nbucket" and "nchain" values of a SHT_HASH section using "NBucket"
|
||
|
## and "NChain" tags. Check that the section size is unaffected when we do this.
|
||
|
|
||
|
# RUN: yaml2obj --docnum=14 %s -o %t14
|
||
|
# RUN: llvm-readobj --sections --section-data %t14 | FileCheck %s --check-prefix=OVERRIDE
|
||
|
|
||
|
# OVERRIDE: Name: .hash
|
||
|
# OVERRIDE-NEXT: Type: SHT_HASH
|
||
|
# OVERRIDE-NEXT: Flags [
|
||
|
# OVERRIDE-NEXT: ]
|
||
|
# OVERRIDE-NEXT: Address: 0x0
|
||
|
# OVERRIDE-NEXT: Offset: 0x34
|
||
|
# OVERRIDE-NEXT: Size: 28
|
||
|
# OVERRIDE-NEXT: Link: 0
|
||
|
# OVERRIDE-NEXT: Info: 0
|
||
|
# OVERRIDE-NEXT: AddressAlignment: 0
|
||
|
# OVERRIDE-NEXT: EntrySize: 4
|
||
|
# OVERRIDE-NEXT: SectionData (
|
||
|
# OVERRIDE-NEXT: 0000: AA000000 BB000000 01000000 02000000
|
||
|
# OVERRIDE-NEXT: 0010: 03000000 04000000 05000000
|
||
|
# OVERRIDE-NEXT: )
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_DYN
|
||
|
Sections:
|
||
|
- Name: .hash
|
||
|
Type: SHT_HASH
|
||
|
Bucket: [ 1, 2 ]
|
||
|
Chain: [ 3, 4, 5 ]
|
||
|
NBucket: 0xAA
|
||
|
NChain: 0xBB
|