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