1247add6fSOwen Reynolds## Test the replace command without modifiers replaces the relevant members. 2247add6fSOwen Reynolds 3247add6fSOwen Reynolds# RUN: rm -rf %t && mkdir -p %t/new/other 4247add6fSOwen Reynolds# RUN: yaml2obj %s -o %t/1.o --docnum=1 5247add6fSOwen Reynolds# RUN: yaml2obj %s -o %t/2.o --docnum=2 6247add6fSOwen Reynolds# RUN: yaml2obj %s -o %t/3.o --docnum=3 7247add6fSOwen Reynolds 8247add6fSOwen Reynolds# RUN: yaml2obj %s -o %t/new/1.o --docnum=4 9247add6fSOwen Reynolds# RUN: yaml2obj %s -o %t/new/3.o --docnum=5 10247add6fSOwen Reynolds 11247add6fSOwen Reynolds# RUN: yaml2obj %s -o %t/new/other/1.o --docnum=6 12247add6fSOwen Reynolds 13247add6fSOwen Reynolds## Replace single member: 14247add6fSOwen Reynolds# RUN: llvm-ar rc %t/single.a %t/1.o %t/2.o %t/3.o 15247add6fSOwen Reynolds# RUN: llvm-ar r %t/single.a %t/new/1.o 16247add6fSOwen Reynolds# RUN: llvm-ar t %t/single.a \ 17247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=SINGLE --implicit-check-not {{.}} 18247add6fSOwen Reynolds 19247add6fSOwen Reynolds# SINGLE: 1.o 20247add6fSOwen Reynolds# SINGLE-NEXT: 2.o 21247add6fSOwen Reynolds# SINGLE-NEXT: 3.o 22247add6fSOwen Reynolds 23247add6fSOwen Reynolds# RUN: llvm-nm --print-armap %t/single.a \ 24247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=SINGLE-SYM 25247add6fSOwen Reynolds 26247add6fSOwen Reynolds# SINGLE-SYM: symbolnew1 27247add6fSOwen Reynolds# SINGLE-SYM-NEXT: symbol2 28247add6fSOwen Reynolds# SINGLE-SYM-NEXT: symbol3 29247add6fSOwen Reynolds 30247add6fSOwen Reynolds## Replace multiple members: 31247add6fSOwen Reynolds# RUN: llvm-ar rc %t/multiple.a %t/1.o %t/2.o %t/3.o 32247add6fSOwen Reynolds# RUN: llvm-ar r %t/multiple.a %t/new/1.o %t/new/3.o 33247add6fSOwen Reynolds# RUN: llvm-ar t %t/multiple.a \ 34247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=MULTIPLE --implicit-check-not {{.}} 35247add6fSOwen Reynolds 36247add6fSOwen Reynolds# MULTIPLE: 1.o 37247add6fSOwen Reynolds# MULTIPLE-NEXT: 2.o 38247add6fSOwen Reynolds# MULTIPLE-NEXT: 3.o 39247add6fSOwen Reynolds 40247add6fSOwen Reynolds# RUN: llvm-nm --print-armap %t/multiple.a \ 41247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=MULTIPLE-SYM 42247add6fSOwen Reynolds 43247add6fSOwen Reynolds# MULTIPLE-SYM: symbolnew1 44247add6fSOwen Reynolds# MULTIPLE-SYM-NEXT: symbol2 45247add6fSOwen Reynolds# MULTIPLE-SYM-NEXT: symbolnew3 46247add6fSOwen Reynolds 47247add6fSOwen Reynolds## Replace same member: 48247add6fSOwen Reynolds# RUN: llvm-ar rc %t/same.a %t/1.o %t/2.o %t/3.o 49247add6fSOwen Reynolds# RUN: llvm-ar r %t/same.a %t/new/1.o %t/new/other/1.o 50247add6fSOwen Reynolds# RUN: llvm-ar t %t/same.a \ 51247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=SAME --implicit-check-not {{.}} 52247add6fSOwen Reynolds 53247add6fSOwen Reynolds# SAME: 1.o 54247add6fSOwen Reynolds# SAME-NEXT: 2.o 55247add6fSOwen Reynolds# SAME-NEXT: 3.o 56247add6fSOwen Reynolds# SAME-NEXT: 1.o 57247add6fSOwen Reynolds 58247add6fSOwen Reynolds# RUN: llvm-nm --print-armap %t/same.a \ 59247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=SAME-SYM 60247add6fSOwen Reynolds 61247add6fSOwen Reynolds# SAME-SYM: symbolnew1 62247add6fSOwen Reynolds# SAME-SYM-NEXT: symbol2 63247add6fSOwen Reynolds# SAME-SYM-NEXT: symbol3 64247add6fSOwen Reynolds# SAME-SYM-NEXT: symbolother1 65247add6fSOwen Reynolds 66247add6fSOwen Reynolds## Replace without member: 67247add6fSOwen Reynolds# RUN: llvm-ar rc %t/without.a %t/1.o %t/2.o %t/3.o 68247add6fSOwen Reynolds# RUN: llvm-ar r %t/without.a 69247add6fSOwen Reynolds# RUN: llvm-ar t %t/without.a \ 70247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=WITHOUT --implicit-check-not {{.}} 71247add6fSOwen Reynolds 72247add6fSOwen Reynolds# WITHOUT: 1.o 73247add6fSOwen Reynolds# WITHOUT-NEXT: 2.o 74247add6fSOwen Reynolds# WITHOUT-NEXT: 3.o 75247add6fSOwen Reynolds 76247add6fSOwen Reynolds# RUN: llvm-nm --print-armap %t/without.a \ 77247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=WITHOUT-SYM 78247add6fSOwen Reynolds 79247add6fSOwen Reynolds# WITHOUT-SYM: symbol1 80247add6fSOwen Reynolds# WITHOUT-SYM-NEXT: symbol2 81247add6fSOwen Reynolds# WITHOUT-SYM-NEXT: symbol3 82247add6fSOwen Reynolds 83247add6fSOwen Reynolds## No archive: 84247add6fSOwen Reynolds# RUN: not llvm-ar r 2>&1 \ 85247add6fSOwen Reynolds# RUN: | FileCheck %s --check-prefix=NO-ARCHIVE 86247add6fSOwen Reynolds 878a468031SFangrui Song# NO-ARCHIVE: error: an archive name must be specified 88247add6fSOwen Reynolds 89247add6fSOwen Reynolds## Member does not exist: 90247add6fSOwen Reynolds# RUN: llvm-ar rc %t/missing.a %t/1.o %t/2.o %t/3.o 91247add6fSOwen Reynolds# RUN: not llvm-ar r %t/missing.a %t/missing.txt 2>&1 \ 92*42a21778SAbhina Sreeskantharajan# RUN: | FileCheck %s --check-prefix=MISSING-FILE -DFILE=%t/missing.txt -DMSG=%errc_ENOENT 93247add6fSOwen Reynolds 94*42a21778SAbhina Sreeskantharajan# MISSING-FILE: error: [[FILE]]: [[MSG]] 95247add6fSOwen Reynolds 968c1e1d14Sgbreynoo## Create and Replace member of thin archive: 978c1e1d14Sgbreynoo# RUN: llvm-ar rcT %t/thin.a %t/1.o %t/2.o %t/3.o 988c1e1d14Sgbreynoo# RUN: yaml2obj %s -o %t/1.o --docnum=4 998c1e1d14Sgbreynoo# RUN: llvm-ar rT %t/thin.a %t/1.o 1008c1e1d14Sgbreynoo# RUN: llvm-ar t %t/thin.a | FileCheck %s --check-prefix=SINGLE 1018c1e1d14Sgbreynoo 1028c1e1d14Sgbreynoo# RUN: llvm-nm --print-armap %t/thin.a \ 1038c1e1d14Sgbreynoo# RUN: | FileCheck %s --check-prefix=SINGLE-SYM 1048c1e1d14Sgbreynoo 105247add6fSOwen Reynolds--- !ELF 106247add6fSOwen ReynoldsFileHeader: 107247add6fSOwen Reynolds Class: ELFCLASS64 108247add6fSOwen Reynolds Data: ELFDATA2LSB 109247add6fSOwen Reynolds Type: ET_REL 110247add6fSOwen Reynolds Machine: EM_X86_64 111247add6fSOwen ReynoldsSections: 112247add6fSOwen Reynolds - Name: .text 113247add6fSOwen Reynolds Type: SHT_PROGBITS 114247add6fSOwen ReynoldsSymbols: 115247add6fSOwen Reynolds - Name: symbol1 116247add6fSOwen Reynolds Binding: STB_GLOBAL 117247add6fSOwen Reynolds Section: .text 118247add6fSOwen Reynolds 119247add6fSOwen Reynolds--- !ELF 120247add6fSOwen ReynoldsFileHeader: 121247add6fSOwen Reynolds Class: ELFCLASS64 122247add6fSOwen Reynolds Data: ELFDATA2LSB 123247add6fSOwen Reynolds Type: ET_REL 124247add6fSOwen Reynolds Machine: EM_X86_64 125247add6fSOwen ReynoldsSections: 126247add6fSOwen Reynolds - Name: .text 127247add6fSOwen Reynolds Type: SHT_PROGBITS 128247add6fSOwen ReynoldsSymbols: 129247add6fSOwen Reynolds - Name: symbol2 130247add6fSOwen Reynolds Binding: STB_GLOBAL 131247add6fSOwen Reynolds Section: .text 132247add6fSOwen Reynolds 133247add6fSOwen Reynolds--- !ELF 134247add6fSOwen ReynoldsFileHeader: 135247add6fSOwen Reynolds Class: ELFCLASS64 136247add6fSOwen Reynolds Data: ELFDATA2LSB 137247add6fSOwen Reynolds Type: ET_REL 138247add6fSOwen Reynolds Machine: EM_X86_64 139247add6fSOwen ReynoldsSections: 140247add6fSOwen Reynolds - Name: .text 141247add6fSOwen Reynolds Type: SHT_PROGBITS 142247add6fSOwen ReynoldsSymbols: 143247add6fSOwen Reynolds - Name: symbol3 144247add6fSOwen Reynolds Binding: STB_GLOBAL 145247add6fSOwen Reynolds Section: .text 146247add6fSOwen Reynolds 147247add6fSOwen Reynolds--- !ELF 148247add6fSOwen ReynoldsFileHeader: 149247add6fSOwen Reynolds Class: ELFCLASS64 150247add6fSOwen Reynolds Data: ELFDATA2LSB 151247add6fSOwen Reynolds Type: ET_REL 152247add6fSOwen Reynolds Machine: EM_X86_64 153247add6fSOwen ReynoldsSections: 154247add6fSOwen Reynolds - Name: .text 155247add6fSOwen Reynolds Type: SHT_PROGBITS 156247add6fSOwen ReynoldsSymbols: 157247add6fSOwen Reynolds - Name: symbolnew1 158247add6fSOwen Reynolds Binding: STB_GLOBAL 159247add6fSOwen Reynolds Section: .text 160247add6fSOwen Reynolds 161247add6fSOwen Reynolds--- !ELF 162247add6fSOwen ReynoldsFileHeader: 163247add6fSOwen Reynolds Class: ELFCLASS64 164247add6fSOwen Reynolds Data: ELFDATA2LSB 165247add6fSOwen Reynolds Type: ET_REL 166247add6fSOwen Reynolds Machine: EM_X86_64 167247add6fSOwen ReynoldsSections: 168247add6fSOwen Reynolds - Name: .text 169247add6fSOwen Reynolds Type: SHT_PROGBITS 170247add6fSOwen ReynoldsSymbols: 171247add6fSOwen Reynolds - Name: symbolnew3 172247add6fSOwen Reynolds Binding: STB_GLOBAL 173247add6fSOwen Reynolds Section: .text 174247add6fSOwen Reynolds 175247add6fSOwen Reynolds--- !ELF 176247add6fSOwen ReynoldsFileHeader: 177247add6fSOwen Reynolds Class: ELFCLASS64 178247add6fSOwen Reynolds Data: ELFDATA2LSB 179247add6fSOwen Reynolds Type: ET_REL 180247add6fSOwen Reynolds Machine: EM_X86_64 181247add6fSOwen ReynoldsSections: 182247add6fSOwen Reynolds - Name: .text 183247add6fSOwen Reynolds Type: SHT_PROGBITS 184247add6fSOwen ReynoldsSymbols: 185247add6fSOwen Reynolds - Name: symbolother1 186247add6fSOwen Reynolds Binding: STB_GLOBAL 187247add6fSOwen Reynolds Section: .text 188