xref: /llvm-project/llvm/test/tools/llvm-lib/arm64ec-implib.test (revision c9d12664f2f967ec170ed16d9a57af2f48e832c8)
1Test creating ARM64EC importlib.
2
3RUN: split-file %s %t.dir && cd %t.dir
4RUN: llvm-lib -machine:arm64ec -def:test.def -out:test.lib
5
6RUN: llvm-nm --print-armap test.lib | FileCheck -check-prefix=ARMAP %s
7
8ARMAP:      Archive map
9ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
10ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
11ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll
12ARMAP-EMPTY:
13ARMAP-NEXT: Archive EC map
14ARMAP-NEXT: #expname in test.dll
15ARMAP-NEXT: #funcexp in test.dll
16ARMAP-NEXT: #mangledfunc in test.dll
17ARMAP-NEXT: #manglednonamefunc in test.dll
18ARMAP-NEXT: #nonamefunc in test.dll
19ARMAP-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test.dll
20ARMAP-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll
21ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
22ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
23ARMAP-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll
24ARMAP-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test.dll
25ARMAP-NEXT: __imp_aux_expname in test.dll
26ARMAP-NEXT: __imp_aux_funcexp in test.dll
27ARMAP-NEXT: __imp_aux_mangledfunc in test.dll
28ARMAP-NEXT: __imp_aux_manglednonamefunc in test.dll
29ARMAP-NEXT: __imp_aux_nonamefunc in test.dll
30ARMAP-NEXT: __imp_dataexp in test.dll
31ARMAP-NEXT: __imp_expname in test.dll
32ARMAP-NEXT: __imp_funcexp in test.dll
33ARMAP-NEXT: __imp_mangledfunc in test.dll
34ARMAP-NEXT: __imp_manglednonamefunc in test.dll
35ARMAP-NEXT: __imp_nonamefunc in test.dll
36ARMAP-NEXT: expname in test.dll
37ARMAP-NEXT: funcexp in test.dll
38ARMAP-NEXT: mangledfunc in test.dll
39ARMAP-NEXT: manglednonamefunc in test.dll
40ARMAP-NEXT: nonamefunc in test.dll
41ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll
42
43RUN: llvm-readobj test.lib | FileCheck -check-prefix=READOBJ %s
44
45READOBJ:      File: test{{.*}}.lib(test.dll)
46READOBJ-NEXT: Format: COFF-ARM64{{$}}
47READOBJ-NEXT: Arch: aarch64
48READOBJ-NEXT: AddressSize: 64bit
49READOBJ-EMPTY:
50READOBJ-NEXT: File: test{{.*}}.lib(test.dll)
51READOBJ-NEXT: Format: COFF-ARM64{{$}}
52READOBJ-NEXT: Arch: aarch64
53READOBJ-NEXT: AddressSize: 64bit
54READOBJ-EMPTY:
55READOBJ-NEXT: File: test{{.*}}.lib(test.dll)
56READOBJ-NEXT: Format: COFF-ARM64{{$}}
57READOBJ-NEXT: Arch: aarch64
58READOBJ-NEXT: AddressSize: 64bit
59READOBJ-EMPTY:
60READOBJ-NEXT: File: test.dll
61READOBJ-NEXT: Format: COFF-import-file-ARM64EC
62READOBJ-NEXT: Type: code
63READOBJ-NEXT: Name type: export as
64READOBJ-NEXT: Export name: funcexp
65READOBJ-NEXT: Symbol: __imp_funcexp
66READOBJ-NEXT: Symbol: funcexp
67READOBJ-NEXT: Symbol: __imp_aux_funcexp
68READOBJ-NEXT: Symbol: #funcexp
69READOBJ-EMPTY:
70READOBJ-NEXT: File: test.dll
71READOBJ-NEXT: Format: COFF-import-file-ARM64EC
72READOBJ-NEXT: Type: code
73READOBJ-NEXT: Name type: export as
74READOBJ-NEXT: Export name: mangledfunc
75READOBJ-NEXT: Symbol: __imp_mangledfunc
76READOBJ-NEXT: Symbol: mangledfunc
77READOBJ-NEXT: Symbol: __imp_aux_mangledfunc
78READOBJ-NEXT: Symbol: #mangledfunc
79READOBJ-EMPTY:
80READOBJ-NEXT: File: test.dll
81READOBJ-NEXT: Format: COFF-import-file-ARM64EC
82READOBJ-NEXT: Type: code
83READOBJ-NEXT: Name type: export as
84READOBJ-NEXT: Export name: ?test_cpp_func@@YAHPEAX@Z
85READOBJ-NEXT: Symbol: __imp_?test_cpp_func@@YAHPEAX@Z
86READOBJ-NEXT: Symbol: ?test_cpp_func@@YAHPEAX@Z
87READOBJ-NEXT: Symbol: __imp_aux_?test_cpp_func@@YAHPEAX@Z
88READOBJ-NEXT: Symbol: ?test_cpp_func@@$$hYAHPEAX@Z
89READOBJ-EMPTY:
90READOBJ-NEXT: File: test.dll
91READOBJ-NEXT: Format: COFF-import-file-ARM64EC
92READOBJ-NEXT: Type: code
93READOBJ-NEXT: Name type: export as
94READOBJ-NEXT: Export name: expname
95READOBJ-NEXT: Symbol: __imp_expname
96READOBJ-NEXT: Symbol: expname
97READOBJ-NEXT: Symbol: __imp_aux_expname
98READOBJ-NEXT: Symbol: #expname
99READOBJ-EMPTY:
100READOBJ-NEXT: File: test.dll
101READOBJ-NEXT: Format: COFF-import-file-ARM64EC
102READOBJ-NEXT: Type: data
103READOBJ-NEXT: Name type: name
104READOBJ-NEXT: Export name: dataexp
105READOBJ-NEXT: Symbol: __imp_dataexp
106READOBJ-EMPTY:
107READOBJ-NEXT: File: test.dll
108READOBJ-NEXT: Format: COFF-import-file-ARM64EC
109READOBJ-NEXT: Type: code
110READOBJ-NEXT: Name type: ordinal
111READOBJ-NEXT: Symbol: __imp_nonamefunc
112READOBJ-NEXT: Symbol: nonamefunc
113READOBJ-NEXT: Symbol: __imp_aux_nonamefunc
114READOBJ-NEXT: Symbol: #nonamefunc
115READOBJ-EMPTY:
116READOBJ-NEXT: File: test.dll
117READOBJ-NEXT: Format: COFF-import-file-ARM64EC
118READOBJ-NEXT: Type: code
119READOBJ-NEXT: Name type: ordinal
120READOBJ-NEXT: Symbol: __imp_manglednonamefunc
121READOBJ-NEXT: Symbol: manglednonamefunc
122READOBJ-NEXT: Symbol: __imp_aux_manglednonamefunc
123READOBJ-NEXT: Symbol: #manglednonamefunc
124
125
126Using -machine:arm64x gives the same output.
127RUN: llvm-lib -machine:arm64x -def:test.def -out:testx.lib
128RUN: llvm-nm --print-armap testx.lib | FileCheck -check-prefix=ARMAP %s
129RUN: llvm-readobj testx.lib | FileCheck -check-prefix=READOBJ %s
130
131Creating a new lib containing the existing lib:
132RUN: llvm-lib -machine:arm64ec test.lib -out:test2.lib
133RUN: llvm-nm --print-armap test2.lib | FileCheck -check-prefix=ARMAP %s
134
135
136RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test.def -out:testx.lib
137
138RUN: llvm-nm --print-armap testx.lib | FileCheck -check-prefix=ARMAPX %s
139
140ARMAPX:      Archive map
141ARMAPX-NEXT: #mangledfunc in test.dll
142ARMAPX-NEXT: #manglednonamefunc in test.dll
143ARMAPX-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll
144ARMAPX-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
145ARMAPX-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
146ARMAPX-NEXT: __imp_#mangledfunc in test.dll
147ARMAPX-NEXT: __imp_#manglednonamefunc in test.dll
148ARMAPX-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll
149ARMAPX-NEXT: __imp_dataexp in test.dll
150ARMAPX-NEXT: __imp_expname in test.dll
151ARMAPX-NEXT: __imp_funcexp in test.dll
152ARMAPX-NEXT: __imp_nonamefunc in test.dll
153ARMAPX-NEXT: expname in test.dll
154ARMAPX-NEXT: funcexp in test.dll
155ARMAPX-NEXT: nonamefunc in test.dll
156ARMAPX-NEXT: test_NULL_THUNK_DATA in test.dll
157ARMAPX-EMPTY:
158ARMAPX-NEXT: Archive EC map
159ARMAPX-NEXT: #expname in test.dll
160ARMAPX-NEXT: #funcexp in test.dll
161ARMAPX-NEXT: #mangledfunc in test.dll
162ARMAPX-NEXT: #manglednonamefunc in test.dll
163ARMAPX-NEXT: #nonamefunc in test.dll
164ARMAPX-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test.dll
165ARMAPX-NEXT: ?test_cpp_func@@YAHPEAX@Z in test.dll
166ARMAPX-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
167ARMAPX-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
168ARMAPX-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test.dll
169ARMAPX-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test.dll
170ARMAPX-NEXT: __imp_aux_expname in test.dll
171ARMAPX-NEXT: __imp_aux_funcexp in test.dll
172ARMAPX-NEXT: __imp_aux_mangledfunc in test.dll
173ARMAPX-NEXT: __imp_aux_manglednonamefunc in test.dll
174ARMAPX-NEXT: __imp_aux_nonamefunc in test.dll
175ARMAPX-NEXT: __imp_dataexp in test.dll
176ARMAPX-NEXT: __imp_expname in test.dll
177ARMAPX-NEXT: __imp_funcexp in test.dll
178ARMAPX-NEXT: __imp_mangledfunc in test.dll
179ARMAPX-NEXT: __imp_manglednonamefunc in test.dll
180ARMAPX-NEXT: __imp_nonamefunc in test.dll
181ARMAPX-NEXT: expname in test.dll
182ARMAPX-NEXT: funcexp in test.dll
183ARMAPX-NEXT: mangledfunc in test.dll
184ARMAPX-NEXT: manglednonamefunc in test.dll
185ARMAPX-NEXT: nonamefunc in test.dll
186ARMAPX-NEXT: test_NULL_THUNK_DATA in test.dll
187
188RUN: llvm-readobj testx.lib | FileCheck -check-prefix=READOBJX %s
189
190READOBJX:      File: testx.lib(test.dll)
191READOBJX-NEXT: Format: COFF-ARM64
192READOBJX-NEXT: Arch: aarch64
193READOBJX-NEXT: AddressSize: 64bit
194READOBJX-EMPTY:
195READOBJX-NEXT: File: testx.lib(test.dll)
196READOBJX-NEXT: Format: COFF-ARM64
197READOBJX-NEXT: Arch: aarch64
198READOBJX-NEXT: AddressSize: 64bit
199READOBJX-EMPTY:
200READOBJX-NEXT: File: testx.lib(test.dll)
201READOBJX-NEXT: Format: COFF-ARM64
202READOBJX-NEXT: Arch: aarch64
203READOBJX-NEXT: AddressSize: 64bit
204READOBJX-EMPTY:
205READOBJX-NEXT: File: test.dll
206READOBJX-NEXT: Format: COFF-import-file-ARM64EC
207READOBJX-NEXT: Type: code
208READOBJX-NEXT: Name type: export as
209READOBJX-NEXT: Export name: funcexp
210READOBJX-NEXT: Symbol: __imp_funcexp
211READOBJX-NEXT: Symbol: funcexp
212READOBJX-NEXT: Symbol: __imp_aux_funcexp
213READOBJX-NEXT: Symbol: #funcexp
214READOBJX-EMPTY:
215READOBJX-NEXT: File: test.dll
216READOBJX-NEXT: Format: COFF-import-file-ARM64EC
217READOBJX-NEXT: Type: code
218READOBJX-NEXT: Name type: export as
219READOBJX-NEXT: Export name: mangledfunc
220READOBJX-NEXT: Symbol: __imp_mangledfunc
221READOBJX-NEXT: Symbol: mangledfunc
222READOBJX-NEXT: Symbol: __imp_aux_mangledfunc
223READOBJX-NEXT: Symbol: #mangledfunc
224READOBJX-EMPTY:
225READOBJX-NEXT: File: test.dll
226READOBJX-NEXT: Format: COFF-import-file-ARM64EC
227READOBJX-NEXT: Type: code
228READOBJX-NEXT: Name type: export as
229READOBJX-NEXT: Export name: ?test_cpp_func@@YAHPEAX@Z
230READOBJX-NEXT: Symbol: __imp_?test_cpp_func@@YAHPEAX@Z
231READOBJX-NEXT: Symbol: ?test_cpp_func@@YAHPEAX@Z
232READOBJX-NEXT: Symbol: __imp_aux_?test_cpp_func@@YAHPEAX@Z
233READOBJX-NEXT: Symbol: ?test_cpp_func@@$$hYAHPEAX@Z
234READOBJX-EMPTY:
235READOBJX-NEXT: File: test.dll
236READOBJX-NEXT: Format: COFF-import-file-ARM64EC
237READOBJX-NEXT: Type: code
238READOBJX-NEXT: Name type: export as
239READOBJX-NEXT: Export name: expname
240READOBJX-NEXT: Symbol: __imp_expname
241READOBJX-NEXT: Symbol: expname
242READOBJX-NEXT: Symbol: __imp_aux_expname
243READOBJX-NEXT: Symbol: #expname
244READOBJX-EMPTY:
245READOBJX-NEXT: File: test.dll
246READOBJX-NEXT: Format: COFF-import-file-ARM64EC
247READOBJX-NEXT: Type: data
248READOBJX-NEXT: Name type: name
249READOBJX-NEXT: Export name: dataexp
250READOBJX-NEXT: Symbol: __imp_dataexp
251READOBJX-EMPTY:
252READOBJX-NEXT: File: test.dll
253READOBJX-NEXT: Format: COFF-import-file-ARM64EC
254READOBJX-NEXT: Type: code
255READOBJX-NEXT: Name type: ordinal
256READOBJX-NEXT: Symbol: __imp_nonamefunc
257READOBJX-NEXT: Symbol: nonamefunc
258READOBJX-NEXT: Symbol: __imp_aux_nonamefunc
259READOBJX-NEXT: Symbol: #nonamefunc
260READOBJX-EMPTY:
261READOBJX-NEXT: File: test.dll
262READOBJX-NEXT: Format: COFF-import-file-ARM64EC
263READOBJX-NEXT: Type: code
264READOBJX-NEXT: Name type: ordinal
265READOBJX-NEXT: Symbol: __imp_manglednonamefunc
266READOBJX-NEXT: Symbol: manglednonamefunc
267READOBJX-NEXT: Symbol: __imp_aux_manglednonamefunc
268READOBJX-NEXT: Symbol: #manglednonamefunc
269READOBJX-EMPTY:
270READOBJX-NEXT: File: test.dll
271READOBJX-NEXT: Format: COFF-import-file-ARM64
272READOBJX-NEXT: Type: code
273READOBJX-NEXT: Name type: name
274READOBJX-NEXT: Export name: funcexp
275READOBJX-NEXT: Symbol: __imp_funcexp
276READOBJX-NEXT: Symbol: funcexp
277READOBJX-EMPTY:
278READOBJX-NEXT: File: test.dll
279READOBJX-NEXT: Format: COFF-import-file-ARM64
280READOBJX-NEXT: Type: code
281READOBJX-NEXT: Name type: name
282READOBJX-NEXT: Export name: #mangledfunc
283READOBJX-NEXT: Symbol: __imp_#mangledfunc
284READOBJX-NEXT: Symbol: #mangledfunc
285READOBJX-EMPTY:
286READOBJX-NEXT: File: test.dll
287READOBJX-NEXT: Format: COFF-import-file-ARM64
288READOBJX-NEXT: Type: code
289READOBJX-NEXT: Name type: name
290READOBJX-NEXT: Export name: ?test_cpp_func@@YAHPEAX@Z
291READOBJX-NEXT: Symbol: __imp_?test_cpp_func@@YAHPEAX@Z
292READOBJX-NEXT: Symbol: ?test_cpp_func@@YAHPEAX@Z
293READOBJX-EMPTY:
294READOBJX-NEXT: File: test.dll
295READOBJX-NEXT: Format: COFF-import-file-ARM64
296READOBJX-NEXT: Type: code
297READOBJX-NEXT: Name type: name
298READOBJX-NEXT: Export name: expname
299READOBJX-NEXT: Symbol: __imp_expname
300READOBJX-NEXT: Symbol: expname
301READOBJX-EMPTY:
302READOBJX-NEXT: File: test.dll
303READOBJX-NEXT: Format: COFF-import-file-ARM64
304READOBJX-NEXT: Type: data
305READOBJX-NEXT: Name type: name
306READOBJX-NEXT: Export name: dataexp
307READOBJX-NEXT: Symbol: __imp_dataexp
308READOBJX-EMPTY:
309READOBJX-NEXT: File: test.dll
310READOBJX-NEXT: Format: COFF-import-file-ARM64
311READOBJX-NEXT: Type: code
312READOBJX-NEXT: Name type: ordinal
313READOBJX-NEXT: Symbol: __imp_nonamefunc
314READOBJX-NEXT: Symbol: nonamefunc
315READOBJX-EMPTY:
316READOBJX-NEXT: File: test.dll
317READOBJX-NEXT: Format: COFF-import-file-ARM64
318READOBJX-NEXT: Type: code
319READOBJX-NEXT: Name type: ordinal
320READOBJX-NEXT: Symbol: __imp_#manglednonamefunc
321READOBJX-NEXT: Symbol: #manglednonamefunc
322
323
324RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test2.def -out:test2.lib
325RUN: llvm-lib -machine:arm64ec -def:test.def -defArm64Native:test2.def -out:test2x.lib
326RUN: llvm-nm --print-armap test2.lib | FileCheck -check-prefix=ARMAPX2 %s
327RUN: llvm-nm --print-armap test2x.lib | FileCheck -check-prefix=ARMAPX2 %s
328
329ARMAPX2:      Archive map
330ARMAPX2-NEXT: __IMPORT_DESCRIPTOR_test2 in test2.dll
331ARMAPX2-NEXT: __NULL_IMPORT_DESCRIPTOR in test2.dll
332ARMAPX2-NEXT: __imp_otherfunc in test2.dll
333ARMAPX2-NEXT: otherfunc in test2.dll
334ARMAPX2-NEXT: test2_NULL_THUNK_DATA in test2.dll
335ARMAPX2-EMPTY:
336ARMAPX2-NEXT: Archive EC map
337ARMAPX2-NEXT: #expname in test2.dll
338ARMAPX2-NEXT: #funcexp in test2.dll
339ARMAPX2-NEXT: #mangledfunc in test2.dll
340ARMAPX2-NEXT: #manglednonamefunc in test2.dll
341ARMAPX2-NEXT: #nonamefunc in test2.dll
342ARMAPX2-NEXT: ?test_cpp_func@@$$hYAHPEAX@Z in test2.dll
343ARMAPX2-NEXT: ?test_cpp_func@@YAHPEAX@Z in test2.dll
344ARMAPX2-NEXT: __IMPORT_DESCRIPTOR_test2 in test2.dll
345ARMAPX2-NEXT: __NULL_IMPORT_DESCRIPTOR in test2.dll
346ARMAPX2-NEXT: __imp_?test_cpp_func@@YAHPEAX@Z in test2.dll
347ARMAPX2-NEXT: __imp_aux_?test_cpp_func@@YAHPEAX@Z in test2.dll
348ARMAPX2-NEXT: __imp_aux_expname in test2.dll
349ARMAPX2-NEXT: __imp_aux_funcexp in test2.dll
350ARMAPX2-NEXT: __imp_aux_mangledfunc in test2.dll
351ARMAPX2-NEXT: __imp_aux_manglednonamefunc in test2.dll
352ARMAPX2-NEXT: __imp_aux_nonamefunc in test2.dll
353ARMAPX2-NEXT: __imp_dataexp in test2.dll
354ARMAPX2-NEXT: __imp_expname in test2.dll
355ARMAPX2-NEXT: __imp_funcexp in test2.dll
356ARMAPX2-NEXT: __imp_mangledfunc in test2.dll
357ARMAPX2-NEXT: __imp_manglednonamefunc in test2.dll
358ARMAPX2-NEXT: __imp_nonamefunc in test2.dll
359ARMAPX2-NEXT: expname in test2.dll
360ARMAPX2-NEXT: funcexp in test2.dll
361ARMAPX2-NEXT: mangledfunc in test2.dll
362ARMAPX2-NEXT: manglednonamefunc in test2.dll
363ARMAPX2-NEXT: nonamefunc in test2.dll
364ARMAPX2-NEXT: test2_NULL_THUNK_DATA in test2.dll
365
366ARMAPX2:      test2.dll:
367ARMAPX2:      00000000 T #funcexp
368ARMAPX2-NEXT: 00000000 T __imp_aux_funcexp
369ARMAPX2-NEXT: 00000000 T __imp_funcexp
370ARMAPX2-NEXT: 00000000 T funcexp
371ARMAPX2-EMPTY:
372ARMAPX2-NEXT: test2.dll:
373ARMAPX2-NEXT: 00000000 T #mangledfunc
374ARMAPX2-NEXT: 00000000 T __imp_aux_mangledfunc
375ARMAPX2-NEXT: 00000000 T __imp_mangledfunc
376ARMAPX2-NEXT: 00000000 T mangledfunc
377ARMAPX2-EMPTY:
378ARMAPX2-NEXT: test2.dll:
379ARMAPX2-NEXT: 00000000 T ?test_cpp_func@@$$hYAHPEAX@Z
380ARMAPX2-NEXT: 00000000 T ?test_cpp_func@@YAHPEAX@Z
381ARMAPX2-NEXT: 00000000 T __imp_?test_cpp_func@@YAHPEAX@Z
382ARMAPX2-NEXT: 00000000 T __imp_aux_?test_cpp_func@@YAHPEAX@Z
383ARMAPX2-EMPTY:
384ARMAPX2-NEXT: test2.dll:
385ARMAPX2-NEXT: 00000000 T #expname
386ARMAPX2-NEXT: 00000000 T __imp_aux_expname
387ARMAPX2-NEXT: 00000000 T __imp_expname
388ARMAPX2-NEXT: 00000000 T expname
389ARMAPX2-EMPTY:
390ARMAPX2-NEXT: test2.dll:
391ARMAPX2-NEXT: 00000000 D __imp_dataexp
392ARMAPX2-EMPTY:
393ARMAPX2-NEXT: test2.dll:
394ARMAPX2-NEXT: 00000000 T #nonamefunc
395ARMAPX2-NEXT: 00000000 T __imp_aux_nonamefunc
396ARMAPX2-NEXT: 00000000 T __imp_nonamefunc
397ARMAPX2-NEXT: 00000000 T nonamefunc
398ARMAPX2-EMPTY:
399ARMAPX2-NEXT: test2.dll:
400ARMAPX2-NEXT: 00000000 T #manglednonamefunc
401ARMAPX2-NEXT: 00000000 T __imp_aux_manglednonamefunc
402ARMAPX2-NEXT: 00000000 T __imp_manglednonamefunc
403ARMAPX2-NEXT: 00000000 T manglednonamefunc
404ARMAPX2-EMPTY:
405ARMAPX2-NEXT: test2.dll:
406ARMAPX2-NEXT: 00000000 T __imp_otherfunc
407ARMAPX2-NEXT: 00000000 T otherfunc
408
409
410RUN: llvm-lib -machine:arm64ec -def:exportas.def -out:exportas.lib
411RUN: llvm-nm --print-armap exportas.lib | FileCheck -check-prefix=EXPAS-ARMAP %s
412RUN: llvm-readobj exportas.lib | FileCheck -check-prefix=EXPAS-READOBJ %s
413
414EXPAS-ARMAP:      Archive EC map
415EXPAS-ARMAP-NEXT: #func1 in test.dll
416EXPAS-ARMAP-NEXT: #func2 in test.dll
417EXPAS-ARMAP-NEXT: #func3 in test.dll
418EXPAS-ARMAP-NEXT: #func4 in test.dll
419EXPAS-ARMAP-NEXT: __IMPORT_DESCRIPTOR_test in test.dll
420EXPAS-ARMAP-NEXT: __NULL_IMPORT_DESCRIPTOR in test.dll
421EXPAS-ARMAP-NEXT: __imp_aux_func1 in test.dll
422EXPAS-ARMAP-NEXT: __imp_aux_func2 in test.dll
423EXPAS-ARMAP-NEXT: __imp_aux_func3 in test.dll
424EXPAS-ARMAP-NEXT: __imp_aux_func4 in test.dll
425EXPAS-ARMAP-NEXT: __imp_data1 in test.dll
426EXPAS-ARMAP-NEXT: __imp_data2 in test.dll
427EXPAS-ARMAP-NEXT: __imp_func1 in test.dll
428EXPAS-ARMAP-NEXT: __imp_func2 in test.dll
429EXPAS-ARMAP-NEXT: __imp_func3 in test.dll
430EXPAS-ARMAP-NEXT: __imp_func4 in test.dll
431EXPAS-ARMAP-NEXT: func1 in test.dll
432EXPAS-ARMAP-NEXT: func2 in test.dll
433EXPAS-ARMAP-NEXT: func3 in test.dll
434EXPAS-ARMAP-NEXT: func4 in test.dll
435EXPAS-ARMAP-NEXT: test_NULL_THUNK_DATA in test.dll
436
437EXPAS-READOBJ:      File: test.dll
438EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC
439EXPAS-READOBJ-NEXT: Type: code
440EXPAS-READOBJ-NEXT: Name type: export as
441EXPAS-READOBJ-NEXT: Export name: func1
442EXPAS-READOBJ-NEXT: Symbol: __imp_func1
443EXPAS-READOBJ-NEXT: Symbol: func1
444EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func1
445EXPAS-READOBJ-NEXT: Symbol: #func1
446EXPAS-READOBJ-EMPTY:
447EXPAS-READOBJ-NEXT: File: test.dll
448EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC
449EXPAS-READOBJ-NEXT: Type: code
450EXPAS-READOBJ-NEXT: Name type: export as
451EXPAS-READOBJ-NEXT: Export name: func2
452EXPAS-READOBJ-NEXT: Symbol: __imp_func2
453EXPAS-READOBJ-NEXT: Symbol: func2
454EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func2
455EXPAS-READOBJ-NEXT: Symbol: #func2
456EXPAS-READOBJ-EMPTY:
457EXPAS-READOBJ-NEXT: File: test.dll
458EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC
459EXPAS-READOBJ-NEXT: Type: code
460EXPAS-READOBJ-NEXT: Name type: export as
461EXPAS-READOBJ-NEXT: Export name: #func3
462EXPAS-READOBJ-NEXT: Symbol: __imp_func3
463EXPAS-READOBJ-NEXT: Symbol: func3
464EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func3
465EXPAS-READOBJ-NEXT: Symbol: #func3
466EXPAS-READOBJ-EMPTY:
467EXPAS-READOBJ-NEXT: File: test.dll
468EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC
469EXPAS-READOBJ-NEXT: Type: code
470EXPAS-READOBJ-NEXT: Name type: export as
471EXPAS-READOBJ-NEXT: Export name: #func4
472EXPAS-READOBJ-NEXT: Symbol: __imp_func4
473EXPAS-READOBJ-NEXT: Symbol: func4
474EXPAS-READOBJ-NEXT: Symbol: __imp_aux_func4
475EXPAS-READOBJ-NEXT: Symbol: #func4
476EXPAS-READOBJ-EMPTY:
477EXPAS-READOBJ-NEXT: File: test.dll
478EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC
479EXPAS-READOBJ-NEXT: Type: data
480EXPAS-READOBJ-NEXT: Name type: export as
481EXPAS-READOBJ-NEXT: Export name: #data1
482EXPAS-READOBJ-NEXT: Symbol: __imp_data1
483EXPAS-READOBJ-EMPTY:
484EXPAS-READOBJ-NEXT: File: test.dll
485EXPAS-READOBJ-NEXT: Format: COFF-import-file-ARM64EC
486EXPAS-READOBJ-NEXT: Type: data
487EXPAS-READOBJ-NEXT: Name type: export as
488EXPAS-READOBJ-NEXT: Export name: data2
489EXPAS-READOBJ-NEXT: Symbol: __imp_data2
490
491
492#--- test.def
493LIBRARY test.dll
494EXPORTS
495    funcexp
496    #mangledfunc
497    ?test_cpp_func@@YAHPEAX@Z
498    expname=impname
499    dataexp DATA
500    nonamefunc @1 NONAME
501    #manglednonamefunc @2 NONAME
502
503#--- test2.def
504LIBRARY test2.dll
505EXPORTS
506    otherfunc
507
508#--- exportas.def
509LIBRARY test.dll
510EXPORTS
511    #func1 EXPORTAS func1
512    func2 EXPORTAS func2
513    func3 EXPORTAS #func3
514    #func4 EXPORTAS #func4
515    data1 DATA EXPORTAS #data1
516    #data2 DATA EXPORTAS data2
517