222 lines
6.3 KiB
YAML
222 lines
6.3 KiB
YAML
## In this test we check that can redefine the null section in the YAML.
|
|
|
|
## Test the default output first.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-readelf --sections %t1 | FileCheck %s --check-prefix=DEFAULT
|
|
|
|
# DEFAULT: Section Headers:
|
|
# DEFAULT-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
|
# DEFAULT-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
|
|
# DEFAULT-NEXT: [ 1] .strtab STRTAB 0000000000000000 000040 000001 00 0 0 1
|
|
# DEFAULT-NEXT: [ 2] .shstrtab STRTAB 0000000000000000 000041 000013 00 0 0 1
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
|
|
## Now define a SHT_NULL section with fields all zeroed.
|
|
## In this case it is equal to the section created by default.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
|
# RUN: llvm-readelf --sections %t2 | FileCheck %s --check-prefix=DEFAULT
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Name: ''
|
|
Flags: [ ]
|
|
AddressAlign: 0x0
|
|
Size: 0x0
|
|
EntSize: 0x0
|
|
Link: 0
|
|
Info: 0
|
|
Address: 0x0
|
|
|
|
## Check we can redefine fields of the first SHT_NULL section.
|
|
|
|
# RUN: yaml2obj --docnum=3 %s -o %t3
|
|
# RUN: llvm-readelf --sections %t3 | FileCheck %s --check-prefix=REDEFINE
|
|
|
|
# REDEFINE: Section Headers:
|
|
# REDEFINE-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
|
# REDEFINE-NEXT: [ 0] .foo NULL 0000000000000006 000000 000002 03 A 4 5 1
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Name: .foo
|
|
Flags: [ SHF_ALLOC ]
|
|
AddressAlign: 0x1
|
|
Size: 0x2
|
|
EntSize: 0x3
|
|
Link: 4
|
|
Info: 5
|
|
Address: 0x6
|
|
|
|
## Check that file size does not change if we redefine the Size
|
|
## of the first SHT_NULL section.
|
|
|
|
# RUN: yaml2obj --docnum=4 %s -o %t4
|
|
# RUN: wc -c < %t3 > %t.txt
|
|
# RUN: wc -c < %t4 >> %t.txt
|
|
# RUN: FileCheck %s --input-file=%t.txt --check-prefix=SIZE
|
|
|
|
# SIZE: [[FILESIZE:.*]]
|
|
# SIZE: [[FILESIZE]]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Name: .foo
|
|
Flags: [ SHF_ALLOC ]
|
|
AddressAlign: 0x1
|
|
Size: 0xFFFF
|
|
EntSize: 0x3
|
|
Link: 4
|
|
Info: 5
|
|
Address: 0x6
|
|
|
|
## Check we are still able to describe other sections too.
|
|
|
|
# RUN: yaml2obj --docnum=5 %s -o %t5
|
|
# RUN: llvm-readelf --sections %t5 | FileCheck %s --check-prefix=OTHER-SECTION
|
|
|
|
# OTHER-SECTION: Section Headers:
|
|
# OTHER-SECTION-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
|
# OTHER-SECTION-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
|
|
# OTHER-SECTION-NEXT: [ 1] foo PROGBITS 0000000000000000 000040 000000 00 0 0 0
|
|
# OTHER-SECTION-NEXT: [ 2] .strtab STRTAB 0000000000000000 000040 000001 00 0 0 1
|
|
# OTHER-SECTION-NEXT: [ 3] .shstrtab STRTAB 0000000000000000 000041 000017 00 0 0 1
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Name: ''
|
|
Flags: [ ]
|
|
AddressAlign: 0x0
|
|
Size: 0x0
|
|
EntSize: 0x0
|
|
Link: 0
|
|
- Type: SHT_PROGBITS
|
|
Name: 'foo'
|
|
|
|
## Check we report an error if null section sh_link field refers to an unknown section.
|
|
|
|
# RUN: not yaml2obj --docnum=6 %s -o %t6 2>&1 | FileCheck %s --check-prefix=CASE4
|
|
|
|
# CASE4: error: unknown section referenced: '.foo' by YAML section '(index 0)'
|
|
# CASE4-NEXT: error: unknown section referenced: '.bar' by YAML section '(index 1)'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Link: .foo
|
|
- Type: SHT_NULL
|
|
Link: .bar
|
|
|
|
## Check that null section fields are set to zero, if they are unspecified.
|
|
|
|
# RUN: yaml2obj --docnum=7 %s -o %t7
|
|
# RUN: llvm-readelf --sections %t7 | FileCheck %s --check-prefix=DEFAULT
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
|
|
## Check we do not crash if we have more than one SHT_NULL section.
|
|
|
|
# RUN: yaml2obj --docnum=8 %s -o %t8
|
|
# RUN: llvm-readelf --sections %t8 | FileCheck %s --check-prefix=MULTIPLE
|
|
|
|
# MULTIPLE: Section Headers:
|
|
# MULTIPLE-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
|
# MULTIPLE-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
|
|
# MULTIPLE-NEXT: [ 1] .foo NULL 0000000000000123 000040 000020 10 A 1 2 0
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
- Type: SHT_NULL
|
|
Name: .foo
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x20
|
|
EntSize: 0x10
|
|
Link: 1
|
|
Info: 2
|
|
Address: 0x123
|
|
|
|
## Check we can override the sh_offset/sh_size fields of the first SHT_NULL section if requested.
|
|
|
|
# RUN: yaml2obj --docnum=9 %s -o %t9
|
|
# RUN: llvm-readelf --sections %t9 | FileCheck %s --check-prefix=OVERRIDE
|
|
|
|
# OVERRIDE: Section Headers:
|
|
# OVERRIDE-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
|
# OVERRIDE-NEXT: [ 0] NULL 0000000000000000 000007 000008 00 0 0 0
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Size: 0x2
|
|
ShOffset: 0x7
|
|
ShSize: 0x8
|
|
|
|
## Check that we can set an offset for the SHT_NULL section explicitly using the "Offset" key.
|
|
## Check it affects the section header table offset.
|
|
# RUN: yaml2obj --docnum=10 %s -DOFFSET=0x100 -o %t10
|
|
# RUN: llvm-readelf --headers --sections %t10 | FileCheck %s --check-prefix=EXPLICIT-OFFSET-A
|
|
# RUN: yaml2obj --docnum=10 %s -DOFFSET=0x200 -o %t11
|
|
# RUN: llvm-readelf --headers --sections %t11 | FileCheck %s --check-prefix=EXPLICIT-OFFSET-B
|
|
|
|
# EXPLICIT-OFFSET-A: Start of section headers: 280 (bytes into file)
|
|
# EXPLICIT-OFFSET-A: [Nr] Name Type Address Off
|
|
# EXPLICIT-OFFSET-A-NEXT: [ 0] NULL 0000000000000000 000100
|
|
|
|
# EXPLICIT-OFFSET-B: Start of section headers: 536 (bytes into file)
|
|
# EXPLICIT-OFFSET-B: [Nr] Name Type Address Off
|
|
# EXPLICIT-OFFSET-B-NEXT: [ 0] NULL 0000000000000000 000200
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Type: SHT_NULL
|
|
Offset: [[OFFSET]]
|