1 ## Check that obj2yaml dumps SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections
2 ## when they are allocatable.
4 ## In the following test we check the normal case: when .dynsym (SHT_DYNSYM)
5 ## and .dynstr (SHT_STRTAB) are allocatable sections and .symtab (SHT_SYMTAB),
6 ## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are not.
7 ## Check we explicitly declare allocatable sections.
9 # RUN: yaml2obj %s -o %t1.so -D FLAG1=SHF_ALLOC -D FLAG2=""
10 # RUN: llvm-readelf -S %t1.so | FileCheck %s --check-prefixes=RE,RE-1
11 # RUN: obj2yaml %t1.so | FileCheck %s --check-prefix=OUTPUT
13 ## Check the information about sections using an independent tool.
15 # RE: Section Headers:
16 # RE-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
17 # RE-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
18 # RE-NEXT: [ 1] .foo.1 PROGBITS 0000000000000000 000040 000000 00 0 0 0
19 # RE-1-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 A 4 2 0
20 # RE-2-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 4 2 0
21 # RE-NEXT: [ 3] .foo.2 PROGBITS 0000000000000000 000070 000000 00 0 0 0
22 # RE-1-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 A 0 0 0
23 # RE-2-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 0 0 0
24 # RE-NEXT: [ 5] .foo.3 PROGBITS 0000000000000000 000075 000000 00 0 0 0
25 # RE-1-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 8 2 0
26 # RE-2-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 A 8 2 0
27 # RE-NEXT: [ 7] .foo.4 PROGBITS 0000000000000000 0000a5 000000 00 0 0 0
28 # RE-1-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 0 0 0
29 # RE-2-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 A 0 0 0
30 # RE-NEXT: [ 9] .foo.5 PROGBITS 0000000000000000 0000aa 000000 00 0 0 0
31 # RE-1-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 0 0 0
32 # RE-2-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 A 0 0 0
33 # RE-NEXT: [11] .foo.6 PROGBITS 0000000000000000 0000ff 000000 00 0 0 0
36 # OUTPUT-NEXT: FileHeader:
37 # OUTPUT-NEXT: Class: ELFCLASS64
38 # OUTPUT-NEXT: Data: ELFDATA2LSB
39 # OUTPUT-NEXT: Type: ET_DYN
40 # OUTPUT-NEXT: Sections:
41 # OUTPUT-NEXT: - Name: .foo.1
42 # OUTPUT-NEXT: Type: SHT_PROGBITS
43 # OUTPUT-NEXT: - Name: .dynsym
44 # OUTPUT-NEXT: Type: SHT_DYNSYM
45 # OUTPUT-NEXT: Flags: [ SHF_ALLOC ]
46 # OUTPUT-NEXT: Address: 0x1000
47 # OUTPUT-NEXT: Link: .dynstr
48 # OUTPUT-NEXT: - Name: .foo.2
49 # OUTPUT-NEXT: Type: SHT_PROGBITS
50 # OUTPUT-NEXT: - Name: .dynstr
51 # OUTPUT-NEXT: Type: SHT_STRTAB
52 # OUTPUT-NEXT: Flags: [ SHF_ALLOC ]
53 # OUTPUT-NEXT: Address: 0x2000
54 # OUTPUT-NEXT: - Name: .foo.3
55 # OUTPUT-NEXT: Type: SHT_PROGBITS
56 # OUTPUT-NEXT: - Name: .foo.4
57 # OUTPUT-NEXT: Type: SHT_PROGBITS
58 # OUTPUT-NEXT: - Name: .foo.5
59 # OUTPUT-NEXT: Type: SHT_PROGBITS
60 # OUTPUT-NEXT: - Name: .foo.6
61 # OUTPUT-NEXT: Type: SHT_PROGBITS
62 # OUTPUT-NEXT: Symbols:
63 # OUTPUT-NEXT: - Name: foo
64 # OUTPUT-NEXT: DynamicSymbols:
65 # OUTPUT-NEXT: - Name: bar
111 ## Now test the abnormal case: when .symtab (SHT_SYMTAB),
112 ## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are
113 ## allocatable sections, but .dynsym (SHT_DYNSYM) and
114 ## .dynstr (SHT_STRTAB) are not.
115 ## Check that only allocatable versions are explicitly declared.
117 # RUN: yaml2obj %s -o %t2.so -D FLAG1="" -D FLAG2=SHF_ALLOC
118 # RUN: llvm-readelf -S %t2.so | FileCheck %s --check-prefixes=RE,RE-2
119 # RUN: obj2yaml %t2.so | FileCheck %s --check-prefix=OUTPUT2
121 ## Check we explicitly declare only allocatable
122 ## SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections.
124 # OUTPUT2-NEXT: FileHeader:
125 # OUTPUT2-NEXT: Class: ELFCLASS64
126 # OUTPUT2-NEXT: Data: ELFDATA2LSB
127 # OUTPUT2-NEXT: Type: ET_DYN
128 # OUTPUT2-NEXT: Sections:
129 # OUTPUT2-NEXT: - Name: .foo.1
130 # OUTPUT2-NEXT: Type: SHT_PROGBITS
131 # OUTPUT2-NEXT: - Name: .foo.2
132 # OUTPUT2-NEXT: Type: SHT_PROGBITS
133 # OUTPUT2-NEXT: - Name: .foo.3
134 # OUTPUT2-NEXT: Type: SHT_PROGBITS
135 # OUTPUT2-NEXT: - Name: .symtab
136 # OUTPUT2-NEXT: Type: SHT_SYMTAB
137 # OUTPUT2-NEXT: Flags: [ SHF_ALLOC ]
138 # OUTPUT2-NEXT: Address: 0x3000
139 # OUTPUT2-NEXT: Link: .strtab
140 # OUTPUT2-NEXT: - Name: .foo.4
141 # OUTPUT2-NEXT: Type: SHT_PROGBITS
142 # OUTPUT2-NEXT: - Name: .strtab
143 # OUTPUT2-NEXT: Type: SHT_STRTAB
144 # OUTPUT2-NEXT: Flags: [ SHF_ALLOC ]
145 # OUTPUT2-NEXT: Address: 0x4000
146 # OUTPUT2-NEXT: - Name: .foo.5
147 # OUTPUT2-NEXT: Type: SHT_PROGBITS
148 # OUTPUT2-NEXT: - Name: .shstrtab
149 # OUTPUT2-NEXT: Type: SHT_STRTAB
150 # OUTPUT2-NEXT: Flags: [ SHF_ALLOC ]
151 # OUTPUT2-NEXT: Address: 0x5000
152 # OUTPUT2-NEXT: - Name: .foo.6
153 # OUTPUT2-NEXT: Type: SHT_PROGBITS
154 # OUTPUT2-NEXT: Symbols:
155 # OUTPUT2-NEXT: - Name: foo
156 # OUTPUT2-NEXT: DynamicSymbols:
157 # OUTPUT2-NEXT: - Name: bar