98 lines
4.6 KiB
YAML
98 lines
4.6 KiB
YAML
|
## Test that yaml2obj automatically assigns sh_addr to allocatable sections for ET_EXEC/ET_DYN files.
|
||
|
|
||
|
# RUN: yaml2obj %s -o %t.so -D TYPE=ET_DYN
|
||
|
# RUN: llvm-readelf --sections %t.so | FileCheck %s --check-prefix=EXE-DSO
|
||
|
|
||
|
# RUN: yaml2obj %s -o %t -D TYPE=ET_EXEC
|
||
|
# RUN: llvm-readelf --sections %t | FileCheck %s --check-prefix=EXE-DSO
|
||
|
|
||
|
# RUN: yaml2obj %s -o %t.o -D TYPE=ET_REL
|
||
|
# RUN: llvm-readelf --sections %t.o | FileCheck %s --check-prefix=REL
|
||
|
|
||
|
## We assign virtual addresses to allocatable sections automatically for executables and shared libraries.
|
||
|
|
||
|
# EXE-DSO: Section Headers:
|
||
|
# EXE-DSO-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
||
|
# EXE-DSO-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 1] .text.any.addr PROGBITS 0000000000001000 000040 000003 00 A 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 2] .text.shsize PROGBITS 0000000000001003 000043 001234 00 A 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 3] .text.align PROGBITS 0000000000001100 000100 000004 00 A 0 0 256
|
||
|
# EXE-DSO-NEXT: [ 4] .data.any.addr PROGBITS 0000000000002000 000104 000001 00 A 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 5] .data.after.fill PROGBITS 0000000000002101 000205 000001 00 A 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 6] .data.go.back PROGBITS 0000000000001500 000206 000001 00 A 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 7] .data.go.back.foo PROGBITS 0000000000001501 000207 000000 00 A 0 0 0
|
||
|
# EXE-DSO-NEXT: [ 8] .dynsym DYNSYM 0000000000001508 000208 000018 18 A 9 1 8
|
||
|
# EXE-DSO-NEXT: [ 9] .dynstr STRTAB 0000000000001520 000220 000001 00 A 0 0 1
|
||
|
# EXE-DSO-NEXT: [10] .strtab STRTAB 0000000000000000 000221 000001 00 0 0 1
|
||
|
# EXE-DSO-NEXT: [11] .shstrtab STRTAB 0000000000000000 000222 00008b 00 0 0 1
|
||
|
|
||
|
## We do not assign virtual addresses to allocatable sections in a relocatable object
|
||
|
## unless YAML document has an explicit request.
|
||
|
|
||
|
# REL: Section Headers:
|
||
|
# REL-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
|
||
|
# REL-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
|
||
|
# REL-NEXT: [ 1] .text.any.addr PROGBITS 0000000000001000 000040 000003 00 A 0 0 0
|
||
|
# REL-NEXT: [ 2] .text.shsize PROGBITS 0000000000000000 000043 001234 00 A 0 0 0
|
||
|
# REL-NEXT: [ 3] .text.align PROGBITS 0000000000000000 000100 000004 00 A 0 0 256
|
||
|
# REL-NEXT: [ 4] .data.any.addr PROGBITS 0000000000002000 000104 000001 00 A 0 0 0
|
||
|
# REL-NEXT: [ 5] .data.after.fill PROGBITS 0000000000000000 000205 000001 00 A 0 0 0
|
||
|
# REL-NEXT: [ 6] .data.go.back PROGBITS 0000000000001500 000206 000001 00 A 0 0 0
|
||
|
# REL-NEXT: [ 7] .data.go.back.foo PROGBITS 0000000000000000 000207 000000 00 A 0 0 0
|
||
|
# REL-NEXT: [ 8] .dynsym DYNSYM 0000000000000000 000208 000018 18 A 9 1 8
|
||
|
# REL-NEXT: [ 9] .dynstr STRTAB 0000000000000000 000220 000001 00 A 0 0 1
|
||
|
# REL-NEXT: [10] .strtab STRTAB 0000000000000000 000221 000001 00 0 0 1
|
||
|
# REL-NEXT: [11] .shstrtab STRTAB 0000000000000000 000222 00008b 00 0 0 1
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: [[TYPE]]
|
||
|
Sections:
|
||
|
## Show we can place a section at any address.
|
||
|
- Name: .text.any.addr
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Address: 0x1000
|
||
|
Size: 0x3
|
||
|
## Test that ShSize does not affect virtual addresses.
|
||
|
- Name: .text.shsize
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
ShSize: 0x1234
|
||
|
## Show we respect an address align when automatically
|
||
|
## assign virtual addresses.
|
||
|
- Name: .text.align
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
AddressAlign: 0x100
|
||
|
Size: 0x4
|
||
|
## We can set another address for a subsequent section.
|
||
|
- Name: .data.any.addr
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Address: 0x2000
|
||
|
Size: 0x1
|
||
|
## Show that Fill occupies VA space.
|
||
|
- Type: Fill
|
||
|
Pattern: "AABB"
|
||
|
Size: 0x100
|
||
|
- Name: .data.after.fill
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Size: 0x1
|
||
|
## Show we can go back in the address space and
|
||
|
## continue placing sections. The order of sections in the
|
||
|
## section header table will match the order in the YAML description.
|
||
|
- Name: .data.go.back
|
||
|
Address: 0x1500
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Size: 0x1
|
||
|
- Name: .data.go.back.foo
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
## Used to trigger creation of .dynsym and .dynstr.
|
||
|
DynamicSymbols: []
|