xref: /llvm-project/llvm/test/tools/llvm-ranlib/aix-X-option.test (revision f740bcb3707a17ed4ccd52157089011a586cc2a6)
1*f740bcb3Szhijian# REQUIRES: system-aix
2*f740bcb3Szhijian## Test the -X option.
3*f740bcb3Szhijian## The option specifies the type of object file on which llvm-ranlib will operate.
4*f740bcb3Szhijian
5*f740bcb3Szhijian# RUN: rm -rf %t && mkdir %t && cd %t
6*f740bcb3Szhijian# RUN: yaml2obj --docnum=1 -DFLAG=0x1DF %s -o t32_1.o
7*f740bcb3Szhijian# RUN: yaml2obj --docnum=1 -DFLAG=0x1F7 %s -o t64_1.o
8*f740bcb3Szhijian# RUN: yaml2obj --docnum=2 -DFLAG=0x1DF %s -o t32_2.o
9*f740bcb3Szhijian# RUN: yaml2obj --docnum=2 -DFLAG=0x1F7 %s -o t64_2.o
10*f740bcb3Szhijian
11*f740bcb3Szhijian# RUN: llvm-ar qS t_all.a t32_1.o t64_1.o t32_2.o t64_2.o
12*f740bcb3Szhijian# RUN: cp t_all.a t_X32.a
13*f740bcb3Szhijian# RUN: cp t_all.a t_X64.a
14*f740bcb3Szhijian# RUN: cp t_all.a t_X32_64.a
15*f740bcb3Szhijian
16*f740bcb3Szhijian## Test the OBJECT_MODE environment variable when adding symbol table.
17*f740bcb3Szhijian# RUN: unset OBJECT_MODE
18*f740bcb3Szhijian# RUN: llvm-ranlib t_X32.a
19*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32.a 2>&1 | FileCheck --check-prefixes=GLOB32 --implicit-check-not="in t64" %s
20*f740bcb3Szhijian# RUN: cp t_all.a t_X32.a
21*f740bcb3Szhijian# RUN: env OBJECT_MODE=32 llvm-ranlib t_X32.a
22*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32.a 2>&1 | FileCheck --check-prefixes=GLOB32 --implicit-check-not="in t64" %s
23*f740bcb3Szhijian
24*f740bcb3Szhijian# RUN: env OBJECT_MODE=64 llvm-ranlib t_X64.a
25*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X64.a 2>&1 | FileCheck --check-prefixes=GLOB64 --implicit-check-not="in t32" %s
26*f740bcb3Szhijian
27*f740bcb3Szhijian# RUN: env OBJECT_MODE=32_64 llvm-ranlib t_X32_64.a
28*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32_64.a 2>&1 | FileCheck --check-prefixes=GLOB32,GLOB64 %s
29*f740bcb3Szhijian# RUN: cp t_all.a t_X32_64.a
30*f740bcb3Szhijian# RUN: env OBJECT_MODE=any llvm-ranlib t_X32_64.a
31*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32_64.a 2>&1 | FileCheck --check-prefixes=GLOB32,GLOB64 %s
32*f740bcb3Szhijian
33*f740bcb3Szhijian# RUN: cp t_all.a t_X32.a
34*f740bcb3Szhijian# RUN: cp t_all.a t_X64.a
35*f740bcb3Szhijian# RUN: cp t_all.a t_X32_64.a
36*f740bcb3Szhijian
37*f740bcb3Szhijian## Test the -X option when adding symbol table.
38*f740bcb3Szhijian# RUN: llvm-ranlib -X32 t_X32.a
39*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32.a 2>&1 | FileCheck --check-prefixes=GLOB32 --implicit-check-not="in t64" %s
40*f740bcb3Szhijian# RUN: llvm-ranlib -X64 t_X32.a
41*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32.a 2>&1 | FileCheck --check-prefixes=GLOB32,GLOB64 %s
42*f740bcb3Szhijian
43*f740bcb3Szhijian# RUN: llvm-ranlib -X64 t_X64.a
44*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X64.a 2>&1 | FileCheck --check-prefixes=GLOB64 --implicit-check-not="in t32" %s
45*f740bcb3Szhijian# RUN: llvm-ranlib -X32 t_X64.a
46*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32.a 2>&1 | FileCheck --check-prefixes=GLOB32,GLOB64 %s
47*f740bcb3Szhijian
48*f740bcb3Szhijian# RUN: llvm-ranlib -X32_64 t_X32_64.a
49*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32_64.a 2>&1 | FileCheck --check-prefixes=GLOB32,GLOB64 %s
50*f740bcb3Szhijian# RUN: cp t_all.a t_X32_64.a
51*f740bcb3Szhijian# RUN: llvm-ranlib -Xany t_X32_64.a
52*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32_64.a 2>&1 | FileCheck --check-prefixes=GLOB32,GLOB64 %s
53*f740bcb3Szhijian
54*f740bcb3Szhijian# RUN: cp t_all.a t_X32.a
55*f740bcb3Szhijian# RUN: cp t_all.a t_X64.a
56*f740bcb3Szhijian
57*f740bcb3Szhijian## Test that the -X option will override the "OBJECT_MODE" environment variable.
58*f740bcb3Szhijian# RUN: env OBJECT_MODE=32_64 llvm-ranlib -X32 t_X32.a
59*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X32.a 2>&1 | FileCheck --check-prefixes=GLOB32 --implicit-check-not="in t64" %s
60*f740bcb3Szhijian
61*f740bcb3Szhijian# RUN: env OBJECT_MODE=32 llvm-ranlib -X64 t_X64.a
62*f740bcb3Szhijian# RUN: llvm-nm --print-armap t_X64.a 2>&1 | FileCheck --check-prefixes=GLOB64 --implicit-check-not="in t32" %s
63*f740bcb3Szhijian
64*f740bcb3Szhijian# GLOB32:      sym1_0x1DF in t32_1.o
65*f740bcb3Szhijian# GLOB32-NEXT: sym2_0x1DF in t32_1.o
66*f740bcb3Szhijian# GLOB32-NEXT: sym3_0x1DF in t32_2.o
67*f740bcb3Szhijian# GLOB32-NEXT: sym4_0x1DF in t32_2.o
68*f740bcb3Szhijian
69*f740bcb3Szhijian# GLOB64:      sym1_0x1F7 in t64_1.o
70*f740bcb3Szhijian# GLOB64-NEXT: sym2_0x1F7 in t64_1.o
71*f740bcb3Szhijian# GLOB64-NEXT: sym3_0x1F7 in t64_2.o
72*f740bcb3Szhijian# GLOB64-NEXT: sym4_0x1F7 in t64_2.o
73*f740bcb3Szhijian
74*f740bcb3Szhijian## Test invalid -X option and OBJECT_MODE enviornment var.
75*f740bcb3Szhijian# RUN: not env OBJECT_MODE= llvm-ranlib t_X32.a 2>&1 | FileCheck --implicit-check-not="error:"  --check-prefixes=INVALID-OBJECT-MODE %s
76*f740bcb3Szhijian# RUN: not env OBJECT_MODE="" llvm-ranlib t_X32.a 2>&1 | FileCheck --implicit-check-not="error:"  --check-prefixes=INVALID-OBJECT-MODE %s
77*f740bcb3Szhijian# RUN: not env OBJECT_MODE=31 llvm-ranlib t_X64.a 2>&1 | FileCheck --implicit-check-not="error:"  --check-prefixes=INVALID-OBJECT-MODE %s
78*f740bcb3Szhijian# RUN: not llvm-ranlib -X t_X64.a 2>&1 | FileCheck --implicit-check-not="error:"  --check-prefixes=INVALID-X-OPTION %s
79*f740bcb3Szhijian# RUN: not llvm-ranlib -X31 t_X64.a 2>&1 | FileCheck --implicit-check-not="error:"  --check-prefixes=INVALID-X-OPTION %s
80*f740bcb3Szhijian
81*f740bcb3Szhijian# INVALID-OBJECT-MODE: error: the OBJECT_MODE environment variable has an invalid value. OBJECT_MODE must be 32, 64, 32_64, or any
82*f740bcb3Szhijian# INVALID-X-OPTION: error: the specified object mode is not valid. Specify -X32, -X64, -X32_64, or -Xany
83*f740bcb3Szhijian
84*f740bcb3Szhijian--- !XCOFF
85*f740bcb3SzhijianFileHeader:
86*f740bcb3Szhijian  MagicNumber:       [[FLAG]]
87*f740bcb3SzhijianSections:
88*f740bcb3Szhijian  - Name:            .data
89*f740bcb3Szhijian    Flags:           [ STYP_DATA ]
90*f740bcb3SzhijianSymbols:
91*f740bcb3Szhijian  - Name:            sym1_[[FLAG]]
92*f740bcb3Szhijian    Section:         .data
93*f740bcb3Szhijian    Type:            0x4000
94*f740bcb3Szhijian    StorageClass:    C_EXT
95*f740bcb3Szhijian    AuxEntries:
96*f740bcb3Szhijian     - Type:                   AUX_CSECT
97*f740bcb3Szhijian       SymbolAlignmentAndType: 0x09
98*f740bcb3Szhijian       StorageMappingClass:    XMC_RW
99*f740bcb3Szhijian  - Name:            sym2_[[FLAG]]
100*f740bcb3Szhijian    Section:         .data
101*f740bcb3Szhijian    Type:            0x4000
102*f740bcb3Szhijian    StorageClass:    C_EXT
103*f740bcb3Szhijian    AuxEntries:
104*f740bcb3Szhijian     - Type:                   AUX_CSECT
105*f740bcb3Szhijian       SymbolAlignmentAndType: 0x09
106*f740bcb3Szhijian       StorageMappingClass:    XMC_RW
107*f740bcb3Szhijian
108*f740bcb3Szhijian--- !XCOFF
109*f740bcb3SzhijianFileHeader:
110*f740bcb3Szhijian  MagicNumber:       [[FLAG]]
111*f740bcb3SzhijianSections:
112*f740bcb3Szhijian  - Name:            .text
113*f740bcb3Szhijian    Flags:           [ STYP_DATA ]
114*f740bcb3SzhijianSymbols:
115*f740bcb3Szhijian  - Name:            sym3_[[FLAG]]
116*f740bcb3Szhijian    Section:         .text
117*f740bcb3Szhijian    Type:            0x4000
118*f740bcb3Szhijian    StorageClass:    C_EXT
119*f740bcb3Szhijian    AuxEntries:
120*f740bcb3Szhijian     - Type:                   AUX_CSECT
121*f740bcb3Szhijian       SymbolAlignmentAndType: 0x09
122*f740bcb3Szhijian       StorageMappingClass:    XMC_PR
123*f740bcb3Szhijian  - Name:            sym4_[[FLAG]]
124*f740bcb3Szhijian    Section:         .text
125*f740bcb3Szhijian    Type:            0x4000
126*f740bcb3Szhijian    StorageClass:    C_EXT
127*f740bcb3Szhijian    AuxEntries:
128*f740bcb3Szhijian     - Type:                   AUX_CSECT
129*f740bcb3Szhijian       SymbolAlignmentAndType: 0x09
130*f740bcb3Szhijian       StorageMappingClass:    XMC_PR
131