Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / tools / llvm-ifs / write-stub.test
blob44c194b77abc728567989b21d8893be4f36cc202
1 ## Test writing stub elf with minimal sections.
3 # RUN: llvm-ifs --output-elf=%t.elf32l --arch=x86_64 --bitwidth=32 --endianness=little %s
4 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf32l | FileCheck %s -DCLASS="32-bit (0x1)" -DDE="LittleEndian (0x1)" -DHS=52 -DPHES=32 -DSHES=40 -DDYNSYMAL=4 -DDYNSYMES=16 -DDYNAMICAL=4 -DDYNAMICES=8 -DDYNTABZ=0
6 # RUN: llvm-ifs --output-elf=%t.elf32b --arch=x86_64 --bitwidth=32 --endianness=big %s
7 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf32b | FileCheck %s -DCLASS="32-bit (0x1)" -DDE="BigEndian (0x2)" -DHS=52 -DPHES=32 -DSHES=40 -DDYNSYMAL=4 -DDYNSYMES=16 -DDYNAMICAL=4 -DDYNAMICES=8 -DDYNTABZ=0
9 # RUN: llvm-ifs --output-elf=%t.elf64l --arch=x86_64 --bitwidth=64 --endianness=little %s
10 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf64l | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000
12 # RUN: llvm-ifs --output-elf=%t.elf64l --target=x86_64-linux-gnu %s
13 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf64l | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000
15 # RUN: llvm-ifs --output-elf=%t.elf64b --arch=x86_64 --bitwidth=64 --endianness=big %s
16 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf64b | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="BigEndian (0x2)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000
18 # RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --bitwidth=64 --endianness=big --target=x86_64-linux-gnu %s 2>&1 | FileCheck %s --check-prefix=TRIPLEERR
20 # RUN: not llvm-ifs --output-elf=%t --bitwidth=64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="Arch" --check-prefix=TARGETERR
22 # RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="BitWidth" --check-prefix=TARGETERR
24 # RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG="Endianness" --check-prefix=TARGETERR
26 # RUN: llvm-ifs --output-ifs=%t.target --target=x86_64-linux-gnu %s
27 # RUN: not llvm-ifs --output-elf=%t --target=aarch64-linux-gnu %t.target 2>&1 | FileCheck %s -DMSG="Triple" --check-prefix=CONFLICTERR
29 # RUN: llvm-ifs --output-ifs=%t.target --arch=x86_64 --endianness=little --bitwidth=64 %s
30 # RUN: not llvm-ifs --output-elf=%t --arch=AArch64 %t.target 2>&1 | FileCheck %s -DMSG=Arch --check-prefix=CONFLICTERR
31 # RUN: not llvm-ifs --output-elf=%t --endianness=big %t.target 2>&1 | FileCheck %s -DMSG=Endianness --check-prefix=CONFLICTERR
32 # RUN: not llvm-ifs --output-elf=%t --bitwidth=32 %t.target 2>&1 | FileCheck %s -DMSG=BitWidth --check-prefix=CONFLICTERR
34 # RUN: llvm-ifs --output-ifs=%t.ifs --output-elf=%t.elf --target=x86_64-linux-gnu %s
35 # RUN: llvm-ifs --output-elf=%t.elf2 --target=x86_64-linux-gnu %t.ifs
36 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000
37 # RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf2 | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000
39 # RUN: llvm-ifs --output-elf=- --target=riscv64-linux-gnu %s | llvm-readelf -h - | FileCheck %s --check-prefix=MACHINE
41 # RUN: not llvm-ifs --output-elf=- --arch=riscv64 --endianness=little --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG=riscv64 --check-prefix=ARCHERR
43 --- !ifs-v1
44 IfsVersion: 3.0
45 NeededLibs:
46   - libc.so.6
47 Symbols:
48   - { Name: bar, Type: Object, Size: 42 }
49   - { Name: baz, Type: TLS, Size: 3 }
50   - { Name: plus, Type: Func }
51 ...
53 # CHECK:      ElfHeader {
54 # CHECK-NEXT:   Ident {
55 # CHECK-NEXT:     Magic: (7F 45 4C 46)
56 # CHECK-NEXT:     Class: [[CLASS]]
57 # CHECK-NEXT:     DataEncoding: [[DE]]
58 # CHECK-NEXT:     FileVersion: 1
59 # CHECK-NEXT:     OS/ABI: SystemV (0x0)
60 # CHECK-NEXT:     ABIVersion: 0
61 # CHECK-NEXT:     Unused: (00 00 00 00 00 00 00)
62 # CHECK-NEXT:   }
63 # CHECK-NEXT:   Type: SharedObject (0x3)
64 # CHECK-NEXT:   Machine: EM_X86_64 (0x3E)
65 # CHECK-NEXT:   Version: 1
66 # CHECK-NEXT:   Entry: 0x0
67 # CHECK:        Flags [ (0x0)
68 # CHECK-NEXT:   ]
69 # CHECK-NEXT:   HeaderSize: [[HS]]
70 # CHECK-NEXT:   ProgramHeaderEntrySize: [[PHES]]
71 # CHECK:        SectionHeaderEntrySize: [[SHES]]
72 # CHECK:        SectionHeaderCount: 5
73 # CHECK:        StringTableSectionIndex: 4
75 # CHECK:      Section {
76 # CHECK-NEXT:   Index: 0
77 # CHECK-NEXT:   Name:  (0)
78 # CHECK-NEXT:   Type: SHT_NULL
79 # CHECK-NEXT:   Flags [
80 # CHECK-NEXT:   ]
81 # CHECK-NEXT:   Address: 0x0
82 # CHECK-NEXT:   Offset: 0x0
83 # CHECK-NEXT:   Size: 0
84 # CHECK-NEXT:   Link: 0
85 # CHECK-NEXT:   Info: 0
86 # CHECK-NEXT:   AddressAlignment: 0
87 # CHECK-NEXT:   EntrySize: 0
88 # CHECK-NEXT: }
89 # CHECK-NEXT: Section {
90 # CHECK-NEXT:   Index: 1
91 # CHECK-NEXT:   Name: .dynsym
92 # CHECK-NEXT:   Type: SHT_DYNSYM
93 # CHECK-NEXT:   Flags [
94 # CHECK-NEXT:     SHF_ALLOC
95 # CHECK-NEXT:   ]
96 # CHECK-NEXT:   Address:
97 # CHECK-NEXT:   Offset:
98 # CHECK-NEXT:   Size:
99 # CHECK-NEXT:   Link: 2
100 # CHECK-NEXT:   Info: 1
101 # CHECK-NEXT:   AddressAlignment: [[DYNSYMAL]]
102 # CHECK-NEXT:   EntrySize: [[DYNSYMES]]
103 # CHECK-NEXT: }
104 # CHECK-NEXT: Section {
105 # CHECK-NEXT:   Index: 2
106 # CHECK-NEXT:   Name: .dynstr
107 # CHECK-NEXT:   Type: SHT_STRTAB
108 # CHECK-NEXT:   Flags [
109 # CHECK-NEXT:     SHF_ALLOC
110 # CHECK-NEXT:   ]
111 # CHECK-NEXT:   Address:
112 # CHECK-NEXT:   Offset:
113 # CHECK-NEXT:   Size:
114 # CHECK-NEXT:   Link: 0
115 # CHECK-NEXT:   Info: 0
116 # CHECK-NEXT:   AddressAlignment: 1
117 # CHECK-NEXT:   EntrySize: 0
118 # CHECK-NEXT: }
119 # CHECK-NEXT: Section {
120 # CHECK-NEXT:   Index: 3
121 # CHECK-NEXT:   Name: .dynamic
122 # CHECK-NEXT:   Type: SHT_DYNAMIC
123 # CHECK-NEXT:   Flags [
124 # CHECK-NEXT:     SHF_ALLOC
125 # CHECK-NEXT:   ]
126 # CHECK-NEXT:   Address:
127 # CHECK-NEXT:   Offset:
128 # CHECK-NEXT:   Size:
129 # CHECK-NEXT:   Link: 2
130 # CHECK-NEXT:   Info: 0
131 # CHECK-NEXT:   AddressAlignment: [[DYNAMICAL]]
132 # CHECK-NEXT:   EntrySize: [[DYNAMICES]]
133 # CHECK-NEXT: }
134 # CHECK-NEXT: Section {
135 # CHECK-NEXT:   Index: 4
136 # CHECK-NEXT:   Name: .shstrtab
137 # CHECK-NEXT:   Type: SHT_STRTAB
138 # CHECK-NEXT:   Flags [
139 # CHECK-NEXT:   ]
140 # CHECK-NEXT:   Address:
141 # CHECK-NEXT:   Offset:
142 # CHECK-NEXT:   Size:
143 # CHECK-NEXT:   Link: 0
144 # CHECK-NEXT:   Info: 0
145 # CHECK-NEXT:   AddressAlignment: 1
146 # CHECK-NEXT:   EntrySize: 0
147 # CHECK-NEXT: }
149 # CHECK:      DynamicSection [ (5 entries)
150 # CHECK-NEXT:   Tag                Type   Name/Value
151 # CHECK-NEXT:   0x[[DYNTABZ]]0000006 SYMTAB
152 # CHECK-NEXT:   0x[[DYNTABZ]]0000005 STRTAB
153 # CHECK-NEXT:   0x[[DYNTABZ]]000000A STRSZ
154 # CHECK-NEXT:   0x[[DYNTABZ]]0000001 NEEDED Shared library: [libc.so.6]
155 # CHECK-NEXT:   0x[[DYNTABZ]]0000000 NULL
156 # CHECK-NEXT: ]
158 # CHECK:        Symbol {
159 # CHECK-NEXT:     Name:
160 # CHECK-NEXT:     Value:
161 # CHECK-NEXT:     Size:
162 # CHECK-NEXT:     Binding: Local
163 # CHECK-NEXT:     Type: None
164 # CHECK-NEXT:     Other: 0
165 # CHECK-NEXT:     Section: Undefined
166 # CHECK-NEXT:   }
167 # CHECK-NEXT:   Symbol {
168 # CHECK-NEXT:     Name: bar
169 # CHECK-NEXT:     Value:
170 # CHECK-NEXT:     Size: 42
171 # CHECK-NEXT:     Binding: Global
172 # CHECK-NEXT:     Type: Object
173 # CHECK-NEXT:     Other: 0
174 # CHECK-NEXT:     Section: .dynsym
175 # CHECK-NEXT:   }
176 # CHECK-NEXT:   Symbol {
177 # CHECK-NEXT:     Name: baz
178 # CHECK-NEXT:     Value:
179 # CHECK-NEXT:     Size: 3
180 # CHECK-NEXT:     Binding: Global
181 # CHECK-NEXT:     Type: TLS
182 # CHECK-NEXT:     Other: 0
183 # CHECK-NEXT:     Section: .dynsym
184 # CHECK-NEXT:   }
185 # CHECK-NEXT:   Symbol {
186 # CHECK-NEXT:     Name: plus
187 # CHECK-NEXT:     Value:
188 # CHECK-NEXT:     Size:
189 # CHECK-NEXT:     Binding: Global
190 # CHECK-NEXT:     Type: Function
191 # CHECK-NEXT:     Other: 0
192 # CHECK-NEXT:     Section: .dynsym
193 # CHECK-NEXT: }
195 # CHECK:      String dump of section '.dynstr':
196 # CHECK-NEXT: [     1] baz
197 # CHECK-NEXT: [     5] plus
198 # CHECK-NEXT: [     a] bar
199 # CHECK-NEXT: [     e] libc.so.6
201 # CHECK:      String dump of section '.shstrtab':
202 # CHECK-NEXT: [     1] .dynstr
203 # CHECK-NEXT: [     9] .dynsym
204 # CHECK-NEXT: [    11] .dynamic
205 # CHECK-NEXT: [    1a] .shstrtab
207 # TRIPLEERR: error: Target triple cannot be used simultaneously with ELF target format
208 # TARGETERR: error: [[MSG]] is not defined in the text stub
209 # CONFLICTERR: error: Supplied [[MSG]] conflicts with the text stub
211 # MACHINE: Machine: RISC-V
213 # ARCHERR: error: unknown arch '[[MSG]]'