xref: /llvm-project/llvm/test/tools/llvm-ar/replace.test (revision 42a21778f61cdc8462ce2cfb6ad7bc1992b2063c)
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