Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / tools / llvm-ar / option-X.test
blob03681d9cd003f11874b61a1dc5637031592b5b28
1 # REQUIRES: system-aix
2 ## Test the "-X" option.
3 ## The option specifies the type of object file llvm-ar will operate on.
5 # RUN: rm -rf %t && mkdir %t && cd %t
6 # RUN: unset OBJECT_MODE
7 # RUN: yaml2obj --docnum=1 -DCLASS=ELFCLASS32 %s -o elf32.o
8 # RUN: yaml2obj --docnum=1 -DCLASS=ELFCLASS64 %s -o elf64.o
10 # RUN: yaml2obj --docnum=2 -DFLAG=0x1DF %s -o xcoff32.o
11 # RUN: yaml2obj --docnum=2 -DFLAG=0x1F7 %s -o xcoff64.o
13 ## Test default -X option when creating a new archive.
14 # RUN: llvm-ar -q -c archive-default.a xcoff32.o elf32.o xcoff64.o elf64.o  2>&1 | \
15 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF64,WARN-ELF64
16 # RUN: llvm-ar -t -Xany archive-default.a | \
17 # RUN:   FileCheck %s --check-prefixes=OBJ32
19 ## Test -X32 option when creating a new archive. 
20 # RUN: llvm-ar -q -c -X 32 archive-32.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
21 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF64,WARN-ELF64
22 # RUN: llvm-ar -t -Xany archive-32.a | \
23 # RUN:   FileCheck %s --check-prefixes=OBJ32
25 ## Test -X option will override the "OBJECT_MODE" environment variable.
26 # RUN: env OBJECT_MODE=64 llvm-ar -q -c -X32 archive-32-env1.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
27 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF64,WARN-ELF64
28 # RUN: llvm-ar -t -Xany archive-32-env1.a | \
29 # RUN:   FileCheck %s --check-prefixes=OBJ32
31 # RUN: env OBJECT_MODE=32_64 llvm-ar -q -c -X32 archive-32-env2.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
32 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF64,WARN-ELF64
33 # RUN: llvm-ar -t -Xany archive-32-env2.a | \
34 # RUN:   FileCheck %s --check-prefixes=OBJ32
36 # RUN: env OBJECT_MODE=any llvm-ar -q -c -X32 archive-32-env3.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
37 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF64,WARN-ELF64
38 # RUN: llvm-ar -t -Xany archive-32-env3.a | \
39 # RUN:   FileCheck %s --check-prefixes=OBJ32
41 ## Test -X64 option when creating a new archive.
42 # RUN: llvm-ar -q -c -X 64 archive-64.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
43 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF32,WARN-ELF32
44 # RUN: llvm-ar -t -Xany archive-64.a | \
45 # RUN:   FileCheck %s --check-prefixes=OBJ64
47 ## Test -X32_64 option when creating a new archive.
48 ## RUN: llvm-ar -q -c -X32_64 archive-32_64.a xcoff32.o elf32.o xcoff64.o elf64.o
49 ## RUN: llvm-ar -t -Xany archive-32_64.a | \
50 ## RUN:   FileCheck %s --check-prefixes=OBJ32_64
52 ## Test -Xany option when creating a new archive.
53 # RUN: llvm-ar -q -c -Xany archive-any.a xcoff32.o elf32.o xcoff64.o elf64.o
54 # RUN: llvm-ar -t -Xany archive-any.a | \
55 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
57 ## Test envionment "OBJECT_MODE" when creating a new archive.
58 # RUN: env OBJECT_MODE=32 llvm-ar -q -c archive-env32.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
59 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF64,WARN-ELF64
60 # RUN: llvm-ar -t -Xany archive-env32.a | \
61 # RUN:   FileCheck %s --check-prefixes=OBJ32
63 # RUN: env OBJECT_MODE=64 llvm-ar -q -c archive-env64.a xcoff32.o elf32.o xcoff64.o elf64.o 2>&1 | \
64 # RUN:   FileCheck %s --check-prefixes=WARN-XCOFF32,WARN-ELF32
65 # RUN: llvm-ar -t -Xany archive-env64.a | \
66 # RUN:   FileCheck %s --check-prefixes=OBJ64
68 # RUN: env OBJECT_MODE=32_64 llvm-ar -q -c archive-env32_64.a xcoff32.o elf32.o xcoff64.o elf64.o
69 # RUN: llvm-ar -t -Xany archive-env32_64.a | \
70 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
72 # RUN: env OBJECT_MODE=any llvm-ar -q -c archive-envany.a xcoff32.o elf32.o xcoff64.o elf64.o
73 # RUN: llvm-ar -t -Xany archive-envany.a | \
74 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
76 ## Test -X option for print operation.
77 # RUN: llvm-ar -t archive-any.a | \
78 # RUN:   FileCheck %s --check-prefixes=OBJ32
80 # RUN: llvm-ar -t -X32 archive-any.a | \
81 # RUN:   FileCheck %s --check-prefixes=OBJ32
83 # RUN: llvm-ar -t -X64 archive-any.a | \
84 # RUN:   FileCheck %s --check-prefixes=OBJ64
86 # RUN: llvm-ar -t -X32_64 archive-any.a | \
87 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
89 # RUN: llvm-ar -t -Xany archive-any.a | \
90 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
92 ## Test -X option for extract operation.
93 # RUN: llvm-ar --output=32 -x -X32 archive-any.a
94 # RUN: cmp xcoff32.o 32/xcoff32.o
95 # RUN: cmp elf32.o 32/elf32.o
96 # RUN: not ls 32/coff64.o
97 # RUN: not ls 32/elf64.o
99 # RUN: llvm-ar --output=64 -x -X64 archive-any.a
100 # RUN: cmp xcoff64.o 64/xcoff64.o
101 # RUN: cmp elf64.o 64/elf64.o
102 # RUN: not ls 64/xcoff32.o
103 # RUN: not ls 64/elf32.o
105 # RUN: llvm-ar --output=32_64 -x -X32_64 archive-any.a
106 # RUN: cmp xcoff32.o 32_64/xcoff32.o
107 # RUN: cmp elf32.o 32_64/elf32.o
108 # RUN: cmp xcoff64.o 32_64/xcoff64.o
109 # RUN: cmp elf64.o 32_64/elf64.o
111 # RUN: llvm-ar --output=any -x -Xany archive-any.a
112 # RUN: cmp xcoff32.o any/xcoff32.o
113 # RUN: cmp elf32.o any/elf32.o
114 # RUN: cmp xcoff64.o any/xcoff64.o
115 # RUN: cmp elf64.o any/elf64.o
117 ## Extract a 64-bit object file with option -X32 (or default object mode).
118 # RUN: not llvm-ar --output=err64 -x archive-any.a xcoff64.o 2>&1 | \
119 # RUN:   FileCheck %s -DFILE=xcoff64.o --check-prefixes=ERR64
120 # RUN: not llvm-ar --output=err64 -x -X32 archive-any.a xcoff64.o 2>&1 | \
121 # RUN:   FileCheck %s -DFILE=xcoff64.o --check-prefixes=ERR64
123 # ERR64: llvm-ar: error: '[[FILE]]' was not found
124 # RUN: not ls err64/xcoff64.o
126 ## Extract a 32-bit object file with option -X64.
127 # RUN: not llvm-ar --output=err32 -x -X64 archive-any.a xcoff32.o 2>&1 | \
128 # RUN:   FileCheck %s -DFILE=xcoff32.o --check-prefixes=ERR32
130 # ERR32: llvm-ar: error: '[[FILE]]' was not found
131 # RUN: not ls err32/xcoff32.o
133 ## Test deleting an object file from a big archive file.
134 # RUN: cp archive-any.a archive.a
135 # RUN: llvm-ar -d -X32 archive.a xcoff64.o elf64.o
136 # RUN: llvm-ar -t -Xany archive.a | \
137 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
139 # RUN: cp archive-any.a archive.a
140 # RUN: llvm-ar -d -X64 archive.a xcoff64.o elf64.o
141 # RUN: llvm-ar -t -Xany archive.a | \
142 # RUN:   FileCheck %s --check-prefixes=OBJ32
144 # RUN: cp archive-any.a archive.a
145 # RUN: llvm-ar -d -Xany archive.a xcoff64.o elf64.o
146 # RUN: llvm-ar -t -Xany archive.a | \
147 # RUN:   FileCheck %s --check-prefixes=OBJ32
149 # Test replace/insert an object file in a big archive file.
150 # RUN: cp xcoff32.o xcoff.o
151 # RUN: llvm-ar -q -c archive-rep.a xcoff.o
153 ## xcoff.o is a 64-bit object file here.
154 # RUN: yaml2obj --docnum=2 -DFLAG=0x1F7 %s -o xcoff.o
156 ## Without -X64, -X32_64 or -Xany, nothing changed here,
157 ## since xcoff.o is a 64-bit object file in command line, but
158 ## the xcoff.o member in archive-rep.a is a 32-bit object file.
159 # RUN: llvm-ar -r archive-rep.a xcoff.o
160 # RUN: llvm-ar -t -Xany archive-rep.a | \
161 # RUN:   FileCheck %s --check-prefixes=REP
162 # RUN: llvm-nm -Xany --print-armap archive-rep.a | \
163 # RUN:   FileCheck %s --check-prefixes=SYM32
165 ## With options -X64, -X32_64 or -Xany, the old 32-bit xcoff.o
166 ## member is still in the archive
167 ## and a new 64-bit object file xcoff.o is added to the archive.
168 # RUN: llvm-ar -r -X64 archive-rep.a xcoff.o
169 # RUN: llvm-ar -t -Xany archive-rep.a | \
170 # RUN:   FileCheck %s --check-prefixes=REP,REP-DUP
171 # RUN: llvm-nm -Xany --print-armap archive-rep.a | \
172 # RUN:   FileCheck %s --check-prefixes=SYM32_64
174 # REP:            xcoff.o
175 # REP-DUP-NEXT:   xcoff.o
176 # REP-EMPTY: 
178 ## Test move member.
179 # RUN: cp archive-any.a archive.a
180 ## Do not move 64-bit object without options -X64, -X32_64, Xany.
181 # RUN: llvm-ar -ma elf32.o archive.a xcoff64.o 2>&1 | \
182 # RUN:   FileCheck %s --check-prefix=WARN-XCOFF64
184 # RUN: llvm-ar -t -Xany archive.a | \
185 # RUN:   FileCheck %s --check-prefixes=OBJ32_64
187 ## Do not move 32-bit object with -X64.
188 # RUN: llvm-ar -ma -X64 elf64.o archive.a xcoff32.o 2>&1 | \
189 # RUN:   FileCheck %s --check-prefix=WARN-XCOFF32
191 # WARN-XCOFF32: warning: 'xcoff32.o' is not valid with the current object file mode
192 # WARN-XCOFF64: warning: 'xcoff64.o' is not valid with the current object file mode
193 # WARN-ELF32:   warning: 'elf32.o' is not valid with the current object file mode
194 # WARN-ELF64:   warning: 'elf64.o' is not valid with the current object file mode
196 # RUN: llvm-ar -ma -X64 elf64.o archive.a xcoff64.o
197 # RUN: llvm-ar -t -Xany archive.a | \
198 # RUN:   FileCheck %s --check-prefixes=MOVE64
200 # RUN: cp archive-any.a archive.a
201 # RUN: llvm-ar -ma -X32_64 elf64.o archive.a xcoff64.o
202 # RUN: llvm-ar -t -Xany archive.a | \
203 # RUN:   FileCheck %s --check-prefixes=MOVE64
205 # RUN: cp archive-any.a archive.a
206 # RUN: llvm-ar -ma -Xany elf64.o archive.a xcoff64.o
207 # RUN: llvm-ar -t -Xany archive.a | \
208 # RUN:   FileCheck %s --check-prefixes=MOVE64
210 # MOVE64:       xcoff32.o
211 # MOVE64-NEXT:  elf32.o
212 # MOVE64-NEXT:  elf64.o
213 # MOVE64-NEXT:  xcoff64.o
214 # MOVE64-EMPTY:
216 # RUN: cp archive-any.a archive.a
217 # RUN: llvm-ar -ma elf32.o archive.a xcoff32.o
218 # RUN: llvm-ar -t -Xany archive.a | \
219 # RUN:   FileCheck %s --check-prefixes=MOVE32
221 # RUN: cp archive-any.a archive.a
222 # RUN: llvm-ar -ma -X32 elf32.o archive.a xcoff32.o
223 # RUN: llvm-ar -t -Xany archive.a | \
224 # RUN:   FileCheck %s --check-prefixes=MOVE32
226 # RUN: cp archive-any.a archive.a
227 # RUN: llvm-ar -ma -X32_64 elf32.o archive.a xcoff32.o
228 # RUN: llvm-ar -t -Xany archive.a | \
229 # RUN:   FileCheck %s --check-prefixes=MOVE32
231 # RUN: cp archive-any.a archive.a
232 # RUN: llvm-ar -ma -Xany elf32.o archive.a xcoff32.o
233 # RUN: llvm-ar -t -Xany archive.a | \
234 # RUN:   FileCheck %s --check-prefixes=MOVE32
236 # MOVE32:       elf32.o
237 # MOVE32-NEXT:  xcoff32.o
238 # MOVE32-NEXT:  xcoff64.o
239 # MOVE32-NEXT:  elf64.o
240 # MOVE32-EMPTY:
242 ## Move after a file with a bitness that doesn't match the object mode.
243 # RUN: not llvm-ar -ma xcoff64.o archive-any.a xcoff32.o 2>&1 | \
244 # RUN:   FileCheck %s --check-prefixes=ERR-INSERT-POINT
246 # RUN: not llvm-ar -X32 -ma xcoff64.o archive-any.a xcoff32.o 2>&1 | \
247 # RUN:   FileCheck %s --check-prefixes=ERR-INSERT-POINT
249 # RUN: not llvm-ar -X64 -ma xcoff32.o archive-any.a xcoff64.o 2>&1 | \
250 # RUN:   FileCheck %s --check-prefixes=ERR-INSERT-POINT
252 # ERR-INSERT-POINT: error: insertion point not found
254 ## Test move operation for archive when there are two object files with 
255 ## the same name, but different bitness in archive.
256 ## There are two files named xcoff.o in archive-rep.a (the first one in
257 ## the archive is 32-bit, the second one is 64-bit).
258 # RUN: cp archive-rep.a archive-rep-mov32.a
259 # RUN: llvm-ar -Xany -q archive-rep-mov32.a elf32.o elf64.o
260 ## Move elf32.o to after the 32-bit xcoff.o.
261 # RUN: llvm-ar -X32 -ma xcoff.o archive-rep-mov32.a elf32.o
262 # RUN: llvm-ar -t -Xany archive-rep-mov32.a | \
263 # RUN:   FileCheck %s --check-prefixes=MOVE32-DUP
265 # MOVE32-DUP:         xcoff.o
266 # MOVE32-DUP-NEXT:    elf32.o
267 # MOVE32-DUP-NEXT:    xcoff.o
268 # MOVE32-DUP-NEXT:    elf64.o
270 # RUN: cp archive-rep.a archive-rep-mov64.a
271 # RUN: llvm-ar -Xany -q archive-rep-mov64.a elf32.o elf64.o
272 ## Move elf64.o to after the 64-bit xcoff.o.
273 # RUN: llvm-ar -X64 -ma xcoff.o archive-rep-mov64.a elf64.o
274 # RUN: llvm-ar -t -Xany archive-rep-mov64.a | \
275 # RUN:   FileCheck %s --check-prefixes=MOVE64-DUP
277 # MOVE64-DUP:         xcoff.o
278 # MOVE64-DUP-NEXT:    xcoff.o
279 # MOVE64-DUP-NEXT:    elf64.o
280 # MOVE64-DUP-NEXT:    elf32.o
282 # OBJ32:          xcoff32.o
283 # OBJ32-NEXT:     elf32.o
284 # OBJ32-EMPTY:
286 # OBJ64:        xcoff64.o
287 # OBJ64-NEXT:   elf64.o
288 # OBJ64-EMPTY:
290 # OBJ32_64:       xcoff32.o
291 # OBJ32_64-NEXT:  elf32.o
292 # OBJ32_64-NEXT:  xcoff64.o
293 # OBJ32_64-NEXT:  elf64.o
294 # OBJ32_64-EMPTY:
296 # SYM32:       var_0x1DF
297 # SYM32-NOT:   var_0x1F7
299 # SYM32_64:   var_0x1DF
300 # SYM32_64:   var_0x1F7
302 ## Test -X option with other output formats. 
304 # RUN: llvm-as -o 32.bc %p/Inputs/bitcode-sym32.ll
305 # RUN: llvm-as -o 64.bc %p/Inputs/bitcode-sym64.ll
306 # RUN: yaml2obj --docnum=3 %s -o macho32.o
307 # RUN: yaml2obj --docnum=4 %s -o macho64.o
308 # RUN: yaml2obj --docnum=5 %s -o wasm.o
309 # RUN: yaml2obj --docnum=6 %s -o coff.o
311 # RUN: llvm-ar -q -c archive-other32.a coff.o 32.bc 64.bc wasm.o macho32.o macho64.o 2>&1 | \
312 # RUN:   FileCheck %s --check-prefixes=WARN-64
313 # RUN: llvm-ar -t -Xany archive-other32.a | \
314 # RUN:   FileCheck %s --check-prefixes=OTHER32
316 # WARN-64:      warning: '64.bc' is not valid with the current object file mode
317 # WARN-64-NEXT: warning: 'macho64.o' is not valid with the current object file mode
319 # OTHER32:       coff.o
320 # OTHER32-NEXT:  32.bc
321 # OTHER32-NEXT:  wasm.o
322 # OTHER32-NEXT:  macho32.o
323 # OTHER32-EMPTY:
325 # RUN: llvm-ar -q -c -X64 archive-other64.a coff.o 32.bc 64.bc wasm.o macho32.o macho64.o 2>&1 | \
326 # RUN:   FileCheck %s --check-prefixes=WARN-32
327 # RUN: llvm-ar -t -Xany archive-other64.a | \
328 # RUN:   FileCheck %s --check-prefixes=OTHER64
330 # WARN-32:      warning: 'coff.o' is not valid with the current object file mode
331 # WARN-32-NEXT: warning: '32.bc' is not valid with the current object file mode
332 # WARN-32-NEXT: warning: 'wasm.o' is not valid with the current object file mode
333 # WARN-32-NEXT: warning: 'macho32.o' is not valid with the current object file mode
335 # OTHER64:      64.bc
336 # OTHER64-NEXT: macho64.o
337 # OTHER64-EMPTY:
340 --- !ELF
341 FileHeader:
342   Class:   [[CLASS]]
343   Data:    ELFDATA2LSB
344   Type:    ET_REL
345 Symbols:
346   - Name:    [[CLASS]]_var
348 --- !XCOFF
349 FileHeader:
350   MagicNumber:       [[FLAG]]
351 Symbols:
352   - Name:            var_[[FLAG]]
354 --- !mach-o
355 FileHeader:
356   magic:      0xFEEDFACE
357   cputype:    0x00000007
358   cpusubtype: 0x00000003
359   filetype:   0x00000001
360   ncmds:      0
361   sizeofcmds: 0
362   flags:      0x00002000
364 ## mach-o 64 bit
365 --- !mach-o
366 FileHeader:
367   magic:           0xFEEDFACF
368   cputype:         0x0100000C
369   cpusubtype:      0x00000000
370   filetype:        0x00000001
371   ncmds:           0
372   sizeofcmds:      0
373   flags:           0x00000000
374   reserved:        0x00000000
376 --- !WASM
377 FileHeader:
378   Version: 0x00000001
380 --- !COFF
381 header:
382   Machine:         IMAGE_FILE_MACHINE_ARMNT
383   Characteristics: [  ]
384 sections:
385 symbols: