]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/wasm/weak-alias.ll
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / wasm / weak-alias.ll
1 ; RUN: llc -filetype=obj -o %t.o %s
2 ; RUN: llc -filetype=obj %S/Inputs/weak-alias.ll -o %t2.o
3 ; RUN: wasm-ld %t.o %t2.o -o %t.wasm
4 ; RUN: obj2yaml %t.wasm | FileCheck %s
5
6 ; Test that weak aliases (alias_fn is a weak alias of direct_fn) are linked correctly
7
8 target triple = "wasm32-unknown-unknown"
9
10 declare i32 @alias_fn() local_unnamed_addr #1
11
12 ; Function Attrs: nounwind uwtable
13 define void @_start() local_unnamed_addr #1 {
14 entry:
15   %call = tail call i32 @alias_fn() #2
16   ret void
17 }
18
19 ; CHECK:      --- !WASM
20 ; CHECK-NEXT: FileHeader:
21 ; CHECK-NEXT:   Version:         0x00000001
22 ; CHECK-NEXT: Sections:
23 ; CHECK-NEXT:   - Type:            TYPE
24 ; CHECK-NEXT:     Signatures:
25 ; CHECK-NEXT:       - Index:           0
26 ; CHECK-NEXT:         ReturnType:      NORESULT
27 ; CHECK-NEXT:         ParamTypes:
28 ; CHECK-NEXT:       - Index:           1
29 ; CHECK-NEXT:         ReturnType:      I32
30 ; CHECK-NEXT:         ParamTypes:
31 ; CHECK-NEXT:   - Type:            FUNCTION
32 ; CHECK-NEXT:     FunctionTypes:   [ 0, 0, 1, 1, 1, 1, 1 ]
33 ; CHECK-NEXT:   - Type:            TABLE
34 ; CHECK-NEXT:     Tables:
35 ; CHECK-NEXT:       - ElemType:        ANYFUNC
36 ; CHECK-NEXT:         Limits:
37 ; CHECK-NEXT:           Flags:           [ HAS_MAX ]
38 ; CHECK-NEXT:           Initial:         0x00000002
39 ; CHECK-NEXT:           Maximum:         0x00000002
40 ; CHECK-NEXT:   - Type:            MEMORY
41 ; CHECK-NEXT:     Memories:
42 ; CHECK-NEXT:       - Initial:         0x00000002
43 ; CHECK-NEXT:   - Type:            GLOBAL
44 ; CHECK-NEXT:     Globals:
45 ; CHECK-NEXT:       - Index:           0
46 ; CHECK-NEXT:         Type:            I32
47 ; CHECK-NEXT:         Mutable:         true
48 ; CHECK-NEXT:         InitExpr:
49 ; CHECK-NEXT:           Opcode:          I32_CONST
50 ; CHECK-NEXT:           Value:           66560
51 ; CHECK-NEXT:       - Index:           1
52 ; CHECK-NEXT:         Type:            I32
53 ; CHECK-NEXT:         Mutable:         false
54 ; CHECK-NEXT:         InitExpr:
55 ; CHECK-NEXT:           Opcode:          I32_CONST
56 ; CHECK-NEXT:           Value:           66560
57 ; CHECK-NEXT:       - Index:           2
58 ; CHECK-NEXT:         Type:            I32
59 ; CHECK-NEXT:         Mutable:         false
60 ; CHECK-NEXT:         InitExpr:
61 ; CHECK-NEXT:           Opcode:          I32_CONST
62 ; CHECK-NEXT:           Value:           1024
63 ; CHECK-NEXT:   - Type:            EXPORT
64 ; CHECK-NEXT:     Exports:
65 ; CHECK-NEXT:       - Name:            memory
66 ; CHECK-NEXT:         Kind:            MEMORY
67 ; CHECK-NEXT:         Index:           0
68 ; CHECK-NEXT:       - Name:            __heap_base
69 ; CHECK-NEXT:         Kind:            GLOBAL
70 ; CHECK-NEXT:         Index:           1
71 ; CHECK-NEXT:       - Name:            __data_end
72 ; CHECK-NEXT:         Kind:            GLOBAL
73 ; CHECK-NEXT:         Index:           2
74 ; CHECK-NEXT:       - Name:            _start
75 ; CHECK-NEXT:         Kind:            FUNCTION
76 ; CHECK-NEXT:         Index:           1
77 ; CHECK-NEXT:       - Name:            alias_fn
78 ; CHECK-NEXT:         Kind:            FUNCTION
79 ; CHECK-NEXT:         Index:           2
80 ; CHECK-NEXT:       - Name:            direct_fn
81 ; CHECK-NEXT:         Kind:            FUNCTION
82 ; CHECK-NEXT:         Index:           2
83 ; CHECK-NEXT:       - Name:            call_direct
84 ; CHECK-NEXT:         Kind:            FUNCTION
85 ; CHECK-NEXT:         Index:           3
86 ; CHECK-NEXT:       - Name:            call_alias
87 ; CHECK-NEXT:         Kind:            FUNCTION
88 ; CHECK-NEXT:         Index:           4
89 ; CHECK-NEXT:       - Name:            call_alias_ptr
90 ; CHECK-NEXT:         Kind:            FUNCTION
91 ; CHECK-NEXT:         Index:           5
92 ; CHECK-NEXT:       - Name:            call_direct_ptr
93 ; CHECK-NEXT:         Kind:            FUNCTION
94 ; CHECK-NEXT:         Index:           6
95 ; CHECK-NEXT:   - Type:            ELEM
96 ; CHECK-NEXT:     Segments:
97 ; CHECK-NEXT:       - Offset:
98 ; CHECK-NEXT:           Opcode:          I32_CONST
99 ; CHECK-NEXT:           Value:           1
100 ; CHECK-NEXT:         Functions:       [ 2 ]
101 ; CHECK-NEXT:   - Type:            CODE
102 ; CHECK-NEXT:     Functions:
103 ; CHECK-NEXT:       - Index:           0
104 ; CHECK-NEXT:         Locals:
105 ; CHECK-NEXT:         Body:            0B
106 ; CHECK-NEXT:       - Index:           1
107 ; CHECK-NEXT:         Locals:
108 ; CHECK-NEXT:         Body:            1082808080001A0B
109 ; CHECK-NEXT:       - Index:           2
110 ; CHECK-NEXT:         Locals:
111 ; CHECK-NEXT:         Body:            41000B
112 ; CHECK-NEXT:       - Index:           3
113 ; CHECK-NEXT:         Locals:
114 ; CHECK-NEXT:         Body:            1082808080000B
115 ; CHECK-NEXT:       - Index:           4
116 ; CHECK-NEXT:         Locals:
117 ; CHECK-NEXT:         Body:            1082808080000B
118 ; CHECK-NEXT:       - Index:           5
119 ; CHECK-NEXT:         Locals:
120 ; CHECK-NEXT:           - Type:            I32
121 ; CHECK-NEXT:             Count:           2
122 ; CHECK-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081082808080002101200041106A24808080800020010B
123 ; CHECK-NEXT:       - Index:           6
124 ; CHECK-NEXT:         Locals:
125 ; CHECK-NEXT:           - Type:            I32
126 ; CHECK-NEXT:             Count:           2
127 ; CHECK-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081082808080002101200041106A24808080800020010B
128 ; CHECK-NEXT:   - Type:            CUSTOM
129 ; CHECK-NEXT:     Name:            name
130 ; CHECK-NEXT:     FunctionNames:
131 ; CHECK-NEXT:       - Index:           0
132 ; CHECK-NEXT:         Name:            __wasm_call_ctors
133 ; CHECK-NEXT:       - Index:           1
134 ; CHECK-NEXT:         Name:            _start
135 ; CHECK-NEXT:       - Index:           2
136 ; CHECK-NEXT:         Name:            direct_fn
137 ; CHECK-NEXT:       - Index:           3
138 ; CHECK-NEXT:         Name:            call_direct
139 ; CHECK-NEXT:       - Index:           4
140 ; CHECK-NEXT:         Name:            call_alias
141 ; CHECK-NEXT:       - Index:           5
142 ; CHECK-NEXT:         Name:            call_alias_ptr
143 ; CHECK-NEXT:       - Index:           6
144 ; CHECK-NEXT:         Name:            call_direct_ptr
145 ; CHECK-NEXT: ...
146
147 ; RUN: wasm-ld --relocatable %t.o %t2.o -o %t.reloc.o
148 ; RUN: obj2yaml %t.reloc.o | FileCheck %s -check-prefix=RELOC
149
150 ; RELOC:      --- !WASM
151 ; RELOC-NEXT: FileHeader:
152 ; RELOC-NEXT:   Version:         0x00000001
153 ; RELOC-NEXT: Sections:
154 ; RELOC-NEXT:   - Type:            TYPE
155 ; RELOC-NEXT:     Signatures:
156 ; RELOC-NEXT:       - Index:           0
157 ; RELOC-NEXT:         ReturnType:      NORESULT
158 ; RELOC-NEXT:         ParamTypes:
159 ; RELOC-NEXT:       - Index:           1
160 ; RELOC-NEXT:         ReturnType:      I32
161 ; RELOC-NEXT:         ParamTypes:
162 ; RELOC-NEXT:   - Type:            IMPORT
163 ; RELOC-NEXT:     Imports:
164 ; RELOC-NEXT:       - Module:          env
165 ; RELOC-NEXT:         Field:           __stack_pointer
166 ; RELOC-NEXT:         Kind:            GLOBAL
167 ; RELOC-NEXT:         GlobalType:      I32
168 ; RELOC-NEXT:         GlobalMutable:   true
169 ; RELOC-NEXT:   - Type:            FUNCTION
170 ; RELOC-NEXT:     FunctionTypes:   [ 0, 1, 1, 1, 1, 1 ]
171 ; RELOC-NEXT:   - Type:            TABLE
172 ; RELOC-NEXT:     Tables:
173 ; RELOC-NEXT:       - ElemType:        ANYFUNC
174 ; RELOC-NEXT:         Limits:
175 ; RELOC-NEXT:           Flags:           [ HAS_MAX ]
176 ; RELOC-NEXT:           Initial:         0x00000002
177 ; RELOC-NEXT:           Maximum:         0x00000002
178 ; RELOC-NEXT:   - Type:            MEMORY
179 ; RELOC-NEXT:     Memories:
180 ; RELOC-NEXT:       - Initial:         0x00000000
181 ; RELOC-NEXT:   - Type:            ELEM
182 ; RELOC-NEXT:     Segments:
183 ; RELOC-NEXT:       - Offset:
184 ; RELOC-NEXT:           Opcode:          I32_CONST
185 ; RELOC-NEXT:           Value:           1
186 ; RELOC-NEXT:         Functions:       [ 1 ]
187 ; RELOC-NEXT:   - Type:            CODE
188 ; RELOC-NEXT:     Relocations:
189 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_FUNCTION_INDEX_LEB
190 ; RELOC-NEXT:         Index:           4
191 ; RELOC-NEXT:         Offset:          0x00000004
192 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_FUNCTION_INDEX_LEB
193 ; RELOC-NEXT:         Index:           1
194 ; RELOC-NEXT:         Offset:          0x00000013
195 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_FUNCTION_INDEX_LEB
196 ; RELOC-NEXT:         Index:           4
197 ; RELOC-NEXT:         Offset:          0x0000001C
198 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_GLOBAL_INDEX_LEB
199 ; RELOC-NEXT:         Index:           6
200 ; RELOC-NEXT:         Offset:          0x00000027
201 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_GLOBAL_INDEX_LEB
202 ; RELOC-NEXT:         Index:           6
203 ; RELOC-NEXT:         Offset:          0x00000032
204 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_TABLE_INDEX_SLEB
205 ; RELOC-NEXT:         Index:           4
206 ; RELOC-NEXT:         Offset:          0x0000003A
207 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_FUNCTION_INDEX_LEB
208 ; RELOC-NEXT:         Index:           4
209 ; RELOC-NEXT:         Offset:          0x00000043
210 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_GLOBAL_INDEX_LEB
211 ; RELOC-NEXT:         Index:           6
212 ; RELOC-NEXT:         Offset:          0x00000050
213 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_GLOBAL_INDEX_LEB
214 ; RELOC-NEXT:         Index:           6
215 ; RELOC-NEXT:         Offset:          0x0000005D
216 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_GLOBAL_INDEX_LEB
217 ; RELOC-NEXT:         Index:           6
218 ; RELOC-NEXT:         Offset:          0x00000068
219 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_TABLE_INDEX_SLEB
220 ; RELOC-NEXT:         Index:           1
221 ; RELOC-NEXT:         Offset:          0x00000070
222 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_FUNCTION_INDEX_LEB
223 ; RELOC-NEXT:         Index:           1
224 ; RELOC-NEXT:         Offset:          0x00000079
225 ; RELOC-NEXT:       - Type:            R_WEBASSEMBLY_GLOBAL_INDEX_LEB
226 ; RELOC-NEXT:         Index:           6
227 ; RELOC-NEXT:         Offset:          0x00000086
228 ; RELOC-NEXT:     Functions:
229 ; RELOC-NEXT:       - Index:           0
230 ; RELOC-NEXT:         Locals:
231 ; RELOC-NEXT:         Body:            1081808080001A0B
232 ; RELOC-NEXT:       - Index:           1
233 ; RELOC-NEXT:         Locals:
234 ; RELOC-NEXT:         Body:            41000B
235 ; RELOC-NEXT:       - Index:           2
236 ; RELOC-NEXT:         Locals:
237 ; RELOC-NEXT:         Body:            1081808080000B
238 ; RELOC-NEXT:       - Index:           3
239 ; RELOC-NEXT:         Locals:
240 ; RELOC-NEXT:         Body:            1081808080000B
241 ; RELOC-NEXT:       - Index:           4
242 ; RELOC-NEXT:         Locals:
243 ; RELOC-NEXT:           - Type:            I32
244 ; RELOC-NEXT:             Count:           2
245 ; RELOC-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B
246 ; RELOC-NEXT:       - Index:           5
247 ; RELOC-NEXT:         Locals:
248 ; RELOC-NEXT:           - Type:            I32
249 ; RELOC-NEXT:             Count:           2
250 ; RELOC-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B
251 ; RELOC-NEXT:   - Type:            CUSTOM
252 ; RELOC-NEXT:     Name:            linking
253 ; RELOC-NEXT:     Version:         1
254 ; RELOC-NEXT:     SymbolTable:
255 ; RELOC-NEXT:       - Index:           0
256 ; RELOC-NEXT:         Kind:            FUNCTION
257 ; RELOC-NEXT:         Name:            _start
258 ; RELOC-NEXT:         Flags:           [  ]
259 ; RELOC-NEXT:         Function:        0
260 ; RELOC-NEXT:       - Index:           1
261 ; RELOC-NEXT:         Kind:            FUNCTION
262 ; RELOC-NEXT:         Name:            direct_fn
263 ; RELOC-NEXT:         Flags:           [  ]
264 ; RELOC-NEXT:         Function:        1
265 ; RELOC-NEXT:       - Index:           2
266 ; RELOC-NEXT:         Kind:            FUNCTION
267 ; RELOC-NEXT:         Name:            call_direct
268 ; RELOC-NEXT:         Flags:           [  ]
269 ; RELOC-NEXT:         Function:        2
270 ; RELOC-NEXT:       - Index:           3
271 ; RELOC-NEXT:         Kind:            FUNCTION
272 ; RELOC-NEXT:         Name:            call_alias
273 ; RELOC-NEXT:         Flags:           [  ]
274 ; RELOC-NEXT:         Function:        3
275 ; RELOC-NEXT:       - Index:           4
276 ; RELOC-NEXT:         Kind:            FUNCTION
277 ; RELOC-NEXT:         Name:            alias_fn
278 ; RELOC-NEXT:         Flags:           [ BINDING_WEAK ]
279 ; RELOC-NEXT:         Function:        1
280 ; RELOC-NEXT:       - Index:           5
281 ; RELOC-NEXT:         Kind:            FUNCTION
282 ; RELOC-NEXT:         Name:            call_alias_ptr
283 ; RELOC-NEXT:         Flags:           [  ]
284 ; RELOC-NEXT:         Function:        4
285 ; RELOC-NEXT:       - Index:           6
286 ; RELOC-NEXT:         Kind:            GLOBAL
287 ; RELOC-NEXT:         Name:            __stack_pointer
288 ; RELOC-NEXT:         Flags:           [ UNDEFINED ]
289 ; RELOC-NEXT:         Global:          0
290 ; RELOC-NEXT:       - Index:           7
291 ; RELOC-NEXT:         Kind:            FUNCTION
292 ; RELOC-NEXT:         Name:            call_direct_ptr
293 ; RELOC-NEXT:         Flags:           [  ]
294 ; RELOC-NEXT:         Function:        5
295 ; RELOC-NEXT:   - Type:            CUSTOM
296 ; RELOC-NEXT:     Name:            name
297 ; RELOC-NEXT:     FunctionNames:
298 ; RELOC-NEXT:       - Index:           0
299 ; RELOC-NEXT:         Name:            _start
300 ; RELOC-NEXT:       - Index:           1
301 ; RELOC-NEXT:         Name:            direct_fn
302 ; RELOC-NEXT:       - Index:           2
303 ; RELOC-NEXT:         Name:            call_direct
304 ; RELOC-NEXT:       - Index:           3
305 ; RELOC-NEXT:         Name:            call_alias
306 ; RELOC-NEXT:       - Index:           4
307 ; RELOC-NEXT:         Name:            call_alias_ptr
308 ; RELOC-NEXT:       - Index:           5
309 ; RELOC-NEXT:         Name:            call_direct_ptr
310 ; RELOC-NEXT: ...