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