## 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: []