xref: /llvm-project/llvm/test/tools/obj2yaml/ELF/implicit-sections-order.yaml (revision d5e48f1347d50e0da4926c5e41e12fd4700abd14)
1bd3058e8SFangrui Song## Check that obj2yaml dumps SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections
2bd3058e8SFangrui Song## when they are allocatable.
3bd3058e8SFangrui Song
4bd3058e8SFangrui Song## In the following test we check the normal case: when .dynsym (SHT_DYNSYM)
5bd3058e8SFangrui Song## and .dynstr (SHT_STRTAB) are allocatable sections and .symtab (SHT_SYMTAB),
6bd3058e8SFangrui Song## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are not.
7bd3058e8SFangrui Song## Check we explicitly declare allocatable sections.
8bd3058e8SFangrui Song
9bd3058e8SFangrui Song# RUN: yaml2obj %s -o %t1.so -D FLAG1=SHF_ALLOC -D FLAG2=""
10bd3058e8SFangrui Song# RUN: llvm-readelf -S %t1.so | FileCheck %s --check-prefixes=RE,RE-1
11bd3058e8SFangrui Song# RUN: obj2yaml %t1.so | FileCheck %s --check-prefix=OUTPUT
12bd3058e8SFangrui Song
13bd3058e8SFangrui Song## Check the information about sections using an independent tool.
14bd3058e8SFangrui Song
15bd3058e8SFangrui Song# RE:        Section Headers:
16bd3058e8SFangrui Song# RE-NEXT:   [Nr] Name      Type     Address          Off    Size   ES Flg Lk Inf Al
17bd3058e8SFangrui Song# RE-NEXT:   [ 0]           NULL     0000000000000000 000000 000000 00     0   0  0
18bd3058e8SFangrui Song# RE-NEXT:   [ 1] .foo.1    PROGBITS 0000000000000000 000040 000000 00     0   0  0
19bd3058e8SFangrui Song# RE-1-NEXT: [ 2] .dynsym   DYNSYM   0000000000001000 000040 000030 18   A 4   2  0
20bd3058e8SFangrui Song# RE-2-NEXT: [ 2] .dynsym   DYNSYM   0000000000001000 000040 000030 18     4   2  0
21bd3058e8SFangrui Song# RE-NEXT:   [ 3] .foo.2    PROGBITS 0000000000000000 000070 000000 00     0   0  0
22bd3058e8SFangrui Song# RE-1-NEXT: [ 4] .dynstr   STRTAB   0000000000002000 000070 000005 00   A 0   0  0
23bd3058e8SFangrui Song# RE-2-NEXT: [ 4] .dynstr   STRTAB   0000000000002000 000070 000005 00     0   0  0
24bd3058e8SFangrui Song# RE-NEXT:   [ 5] .foo.3    PROGBITS 0000000000000000 000075 000000 00     0   0  0
25bd3058e8SFangrui Song# RE-1-NEXT: [ 6] .symtab   SYMTAB   0000000000003000 000075 000030 18     8   2  0
26bd3058e8SFangrui Song# RE-2-NEXT: [ 6] .symtab   SYMTAB   0000000000003000 000075 000030 18   A 8   2  0
27bd3058e8SFangrui Song# RE-NEXT:   [ 7] .foo.4    PROGBITS 0000000000000000 0000a5 000000 00     0   0  0
28bd3058e8SFangrui Song# RE-1-NEXT: [ 8] .strtab   STRTAB   0000000000004000 0000a5 000005 00     0   0  0
29bd3058e8SFangrui Song# RE-2-NEXT: [ 8] .strtab   STRTAB   0000000000004000 0000a5 000005 00   A 0   0  0
30bd3058e8SFangrui Song# RE-NEXT:   [ 9] .foo.5    PROGBITS 0000000000000000 0000aa 000000 00     0   0  0
31bd3058e8SFangrui Song# RE-1-NEXT: [10] .shstrtab STRTAB   0000000000005000 0000aa 000055 00     0   0  0
32bd3058e8SFangrui Song# RE-2-NEXT: [10] .shstrtab STRTAB   0000000000005000 0000aa 000055 00   A 0   0  0
33bd3058e8SFangrui Song# RE-NEXT:   [11] .foo.6    PROGBITS 0000000000000000 0000ff 000000 00     0   0  0
34bd3058e8SFangrui Song
35bd3058e8SFangrui Song# OUTPUT:      --- !ELF
36bd3058e8SFangrui Song# OUTPUT-NEXT: FileHeader:
37bd3058e8SFangrui Song# OUTPUT-NEXT:   Class: ELFCLASS64
38bd3058e8SFangrui Song# OUTPUT-NEXT:   Data:  ELFDATA2LSB
39bd3058e8SFangrui Song# OUTPUT-NEXT:   Type:  ET_DYN
40bd3058e8SFangrui Song# OUTPUT-NEXT: Sections:
41bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: .foo.1
42bd3058e8SFangrui Song# OUTPUT-NEXT:     Type: SHT_PROGBITS
43bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name:    .dynsym
44bd3058e8SFangrui Song# OUTPUT-NEXT:     Type:    SHT_DYNSYM
45bd3058e8SFangrui Song# OUTPUT-NEXT:     Flags:   [ SHF_ALLOC ]
46*9aa78982SGeorgii Rymar# OUTPUT-NEXT:     Address: 0x1000
47bd3058e8SFangrui Song# OUTPUT-NEXT:     Link:    .dynstr
48bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: .foo.2
49bd3058e8SFangrui Song# OUTPUT-NEXT:     Type: SHT_PROGBITS
50bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name:    .dynstr
51bd3058e8SFangrui Song# OUTPUT-NEXT:     Type:    SHT_STRTAB
52bd3058e8SFangrui Song# OUTPUT-NEXT:     Flags:   [ SHF_ALLOC ]
53*9aa78982SGeorgii Rymar# OUTPUT-NEXT:     Address: 0x2000
54bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: .foo.3
55bd3058e8SFangrui Song# OUTPUT-NEXT:     Type: SHT_PROGBITS
56bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: .foo.4
57bd3058e8SFangrui Song# OUTPUT-NEXT:     Type: SHT_PROGBITS
58bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: .foo.5
59bd3058e8SFangrui Song# OUTPUT-NEXT:     Type: SHT_PROGBITS
60bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: .foo.6
61bd3058e8SFangrui Song# OUTPUT-NEXT:     Type: SHT_PROGBITS
62bd3058e8SFangrui Song# OUTPUT-NEXT: Symbols:
63bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: foo
64bd3058e8SFangrui Song# OUTPUT-NEXT: DynamicSymbols:
65bd3058e8SFangrui Song# OUTPUT-NEXT:   - Name: bar
66bd3058e8SFangrui Song# OUTPUT-NEXT: ...
67bd3058e8SFangrui Song
68bd3058e8SFangrui Song--- !ELF
69bd3058e8SFangrui SongFileHeader:
70bd3058e8SFangrui Song  Class: ELFCLASS64
71bd3058e8SFangrui Song  Data:  ELFDATA2LSB
72bd3058e8SFangrui Song  Type:  ET_DYN
73bd3058e8SFangrui SongSections:
74bd3058e8SFangrui Song  - Name: .foo.1
75bd3058e8SFangrui Song    Type: SHT_PROGBITS
76bd3058e8SFangrui Song  - Name:    .dynsym
77bd3058e8SFangrui Song    Type:    SHT_DYNSYM
78bd3058e8SFangrui Song    Address: 0x1000
79bd3058e8SFangrui Song    Flags: [ [[FLAG1]] ]
80bd3058e8SFangrui Song  - Name: .foo.2
81bd3058e8SFangrui Song    Type: SHT_PROGBITS
82bd3058e8SFangrui Song  - Name:    .dynstr
83bd3058e8SFangrui Song    Type:    SHT_STRTAB
84bd3058e8SFangrui Song    Address: 0x2000
85bd3058e8SFangrui Song    Flags: [ [[FLAG1]] ]
86bd3058e8SFangrui Song  - Name: .foo.3
87bd3058e8SFangrui Song    Type: SHT_PROGBITS
88bd3058e8SFangrui Song  - Name:    .symtab
89bd3058e8SFangrui Song    Type:    SHT_SYMTAB
90bd3058e8SFangrui Song    Address: 0x3000
91bd3058e8SFangrui Song    Flags: [ [[FLAG2]] ]
92bd3058e8SFangrui Song  - Name: .foo.4
93bd3058e8SFangrui Song    Type: SHT_PROGBITS
94bd3058e8SFangrui Song  - Name:    .strtab
95bd3058e8SFangrui Song    Type:    SHT_STRTAB
96bd3058e8SFangrui Song    Address: 0x4000
97bd3058e8SFangrui Song    Flags: [ [[FLAG2]] ]
98bd3058e8SFangrui Song  - Name: .foo.5
99bd3058e8SFangrui Song    Type: SHT_PROGBITS
100bd3058e8SFangrui Song  - Name:    .shstrtab
101bd3058e8SFangrui Song    Type:    SHT_STRTAB
102bd3058e8SFangrui Song    Address: 0x5000
103bd3058e8SFangrui Song    Flags: [ [[FLAG2]] ]
104bd3058e8SFangrui Song  - Name: .foo.6
105bd3058e8SFangrui Song    Type: SHT_PROGBITS
106bd3058e8SFangrui SongSymbols:
107bd3058e8SFangrui Song  - Name: foo
108bd3058e8SFangrui SongDynamicSymbols:
109bd3058e8SFangrui Song  - Name: bar
110bd3058e8SFangrui Song
111bd3058e8SFangrui Song## Now test the abnormal case: when .symtab (SHT_SYMTAB),
112bd3058e8SFangrui Song## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are
113bd3058e8SFangrui Song## allocatable sections, but .dynsym (SHT_DYNSYM) and
114bd3058e8SFangrui Song## .dynstr (SHT_STRTAB) are not.
115bd3058e8SFangrui Song## Check that only allocatable versions are explicitly declared.
116bd3058e8SFangrui Song
117bd3058e8SFangrui Song# RUN: yaml2obj %s -o %t2.so -D FLAG1="" -D FLAG2=SHF_ALLOC
118bd3058e8SFangrui Song# RUN: llvm-readelf -S %t2.so | FileCheck %s --check-prefixes=RE,RE-2
119bd3058e8SFangrui Song# RUN: obj2yaml %t2.so | FileCheck %s --check-prefix=OUTPUT2
120bd3058e8SFangrui Song
121bd3058e8SFangrui Song## Check we explicitly declare only allocatable
122bd3058e8SFangrui Song## SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections.
123bd3058e8SFangrui Song# OUTPUT2:      --- !ELF
124bd3058e8SFangrui Song# OUTPUT2-NEXT: FileHeader:
125bd3058e8SFangrui Song# OUTPUT2-NEXT:   Class: ELFCLASS64
126bd3058e8SFangrui Song# OUTPUT2-NEXT:   Data:  ELFDATA2LSB
127bd3058e8SFangrui Song# OUTPUT2-NEXT:   Type:  ET_DYN
128bd3058e8SFangrui Song# OUTPUT2-NEXT: Sections:
129bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: .foo.1
130bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type: SHT_PROGBITS
131bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: .foo.2
132bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type: SHT_PROGBITS
133bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: .foo.3
134bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type: SHT_PROGBITS
135bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name:    .symtab
136bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type:    SHT_SYMTAB
137bd3058e8SFangrui Song# OUTPUT2-NEXT:     Flags:   [ SHF_ALLOC ]
138*9aa78982SGeorgii Rymar# OUTPUT2-NEXT:     Address: 0x3000
139bd3058e8SFangrui Song# OUTPUT2-NEXT:     Link:    .strtab
140bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: .foo.4
141bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type: SHT_PROGBITS
142bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name:    .strtab
143bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type:    SHT_STRTAB
144bd3058e8SFangrui Song# OUTPUT2-NEXT:     Flags:   [ SHF_ALLOC ]
145*9aa78982SGeorgii Rymar# OUTPUT2-NEXT:     Address: 0x4000
146bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: .foo.5
147bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type: SHT_PROGBITS
148bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name:    .shstrtab
149bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type:    SHT_STRTAB
150bd3058e8SFangrui Song# OUTPUT2-NEXT:     Flags:   [ SHF_ALLOC ]
151*9aa78982SGeorgii Rymar# OUTPUT2-NEXT:     Address: 0x5000
152bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name:    .foo.6
153bd3058e8SFangrui Song# OUTPUT2-NEXT:     Type:    SHT_PROGBITS
154bd3058e8SFangrui Song# OUTPUT2-NEXT: Symbols:
155bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: foo
156bd3058e8SFangrui Song# OUTPUT2-NEXT: DynamicSymbols:
157bd3058e8SFangrui Song# OUTPUT2-NEXT:   - Name: bar
158bd3058e8SFangrui Song# OUTPUT2-NEXT: ...
159