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