1## Test that yaml2obj automatically assigns sh_addr to allocatable sections for ET_EXEC/ET_DYN files.
2
3# RUN: yaml2obj %s -o %t.so -D TYPE=ET_DYN
4# RUN: llvm-readelf --sections %t.so | FileCheck %s --check-prefix=EXE-DSO
5
6# RUN: yaml2obj %s -o %t -D TYPE=ET_EXEC
7# RUN: llvm-readelf --sections %t | FileCheck %s --check-prefix=EXE-DSO
8
9# RUN: yaml2obj %s -o %t.o -D TYPE=ET_REL
10# RUN: llvm-readelf --sections %t.o | FileCheck %s --check-prefix=REL
11
12## We assign virtual addresses to allocatable sections automatically for executables and shared libraries.
13
14# EXE-DSO:      Section Headers:
15# EXE-DSO-NEXT:   [Nr] Name              Type     Address          Off    Size   ES Flg Lk Inf Al
16# EXE-DSO-NEXT:   [ 0]                   NULL     0000000000000000 000000 000000 00     0   0  0
17# EXE-DSO-NEXT:   [ 1] .text.any.addr    PROGBITS 0000000000001000 000040 000003 00   A 0   0  0
18# EXE-DSO-NEXT:   [ 2] .text.shsize      PROGBITS 0000000000001003 000043 001234 00   A 0   0  0
19# EXE-DSO-NEXT:   [ 3] .text.align       PROGBITS 0000000000001100 000100 000004 00   A 0   0  256
20# EXE-DSO-NEXT:   [ 4] .data.any.addr    PROGBITS 0000000000002000 000104 000001 00   A 0   0  0
21# EXE-DSO-NEXT:   [ 5] .data.after.fill  PROGBITS 0000000000002101 000205 000001 00   A 0   0  0
22# EXE-DSO-NEXT:   [ 6] .data.go.back     PROGBITS 0000000000001500 000206 000001 00   A 0   0  0
23# EXE-DSO-NEXT:   [ 7] .data.go.back.foo PROGBITS 0000000000001501 000207 000000 00   A 0   0  0
24# EXE-DSO-NEXT:   [ 8] .dynsym           DYNSYM   0000000000001508 000208 000018 18   A 9   1  8
25# EXE-DSO-NEXT:   [ 9] .dynstr           STRTAB   0000000000001520 000220 000001 00   A 0   0  1
26# EXE-DSO-NEXT:   [10] .strtab           STRTAB   0000000000000000 000221 000001 00     0   0  1
27# EXE-DSO-NEXT:   [11] .shstrtab         STRTAB   0000000000000000 000222 00008b 00     0   0  1
28
29## We do not assign virtual addresses to allocatable sections in a relocatable object
30## unless YAML document has an explicit request.
31
32# REL:      Section Headers:
33# REL-NEXT:   [Nr] Name              Type     Address          Off    Size   ES Flg Lk Inf Al
34# REL-NEXT:   [ 0]                   NULL     0000000000000000 000000 000000 00     0   0  0
35# REL-NEXT:   [ 1] .text.any.addr    PROGBITS 0000000000001000 000040 000003 00   A 0   0  0
36# REL-NEXT:   [ 2] .text.shsize      PROGBITS 0000000000000000 000043 001234 00   A 0   0  0
37# REL-NEXT:   [ 3] .text.align       PROGBITS 0000000000000000 000100 000004 00   A 0   0  256
38# REL-NEXT:   [ 4] .data.any.addr    PROGBITS 0000000000002000 000104 000001 00   A 0   0  0
39# REL-NEXT:   [ 5] .data.after.fill  PROGBITS 0000000000000000 000205 000001 00   A 0   0  0
40# REL-NEXT:   [ 6] .data.go.back     PROGBITS 0000000000001500 000206 000001 00   A 0   0  0
41# REL-NEXT:   [ 7] .data.go.back.foo PROGBITS 0000000000000000 000207 000000 00   A 0   0  0
42# REL-NEXT:   [ 8] .dynsym           DYNSYM   0000000000000000 000208 000018 18   A 9   1  8
43# REL-NEXT:   [ 9] .dynstr           STRTAB   0000000000000000 000220 000001 00   A 0   0  1
44# REL-NEXT:   [10] .strtab           STRTAB   0000000000000000 000221 000001 00     0   0  1
45# REL-NEXT:   [11] .shstrtab         STRTAB   0000000000000000 000222 00008b 00     0   0  1
46
47--- !ELF
48FileHeader:
49  Class: ELFCLASS64
50  Data:  ELFDATA2LSB
51  Type:  [[TYPE]]
52Sections:
53## Show we can place a section at any address.
54  - Name:    .text.any.addr
55    Type:    SHT_PROGBITS
56    Flags:   [ SHF_ALLOC ]
57    Address: 0x1000
58    Size:    0x3
59## Test that ShSize does not affect virtual addresses.
60  - Name:   .text.shsize
61    Type:   SHT_PROGBITS
62    Flags:  [ SHF_ALLOC ]
63    ShSize: 0x1234
64## Show we respect an address align when automatically
65## assign virtual addresses.
66  - Name:         .text.align
67    Type:         SHT_PROGBITS
68    Flags:        [ SHF_ALLOC ]
69    AddressAlign: 0x100
70    Size:         0x4
71## We can set another address for a subsequent section.
72  - Name:    .data.any.addr
73    Type:    SHT_PROGBITS
74    Flags:   [ SHF_ALLOC ]
75    Address: 0x2000
76    Size:    0x1
77## Show that Fill occupies VA space.
78  - Type:    Fill
79    Pattern: "AABB"
80    Size:    0x100
81  - Name:  .data.after.fill
82    Type:  SHT_PROGBITS
83    Flags: [ SHF_ALLOC ]
84    Size:  0x1
85## Show we can go back in the address space and
86## continue placing sections. The order of sections in the
87## section header table will match the order in the YAML description.
88  - Name:    .data.go.back
89    Address: 0x1500
90    Type:    SHT_PROGBITS
91    Flags:   [ SHF_ALLOC ]
92    Size:    0x1
93  - Name:    .data.go.back.foo
94    Type:    SHT_PROGBITS
95    Flags:   [ SHF_ALLOC ]
96## Used to trigger creation of .dynsym and .dynstr.
97DynamicSymbols: []
98