xref: /llvm-project/lld/test/MachO/objc-category-merging-swift-class-ext.s (revision e97bd0300b57547774c5cfe6fe84ebd0efc421ec)
1# REQUIRES: aarch64
2# RUN: rm -rf %t; mkdir %t && cd %t
3
4############ Test swift category merging into @objc class, with protocol ############
5# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o cat_swift.o %s
6# RUN: %lld -arch arm64 -dylib -o cat_swift.dylib cat_swift.o -objc_category_merging
7# RUN: llvm-objdump --objc-meta-data --macho cat_swift.dylib | FileCheck %s --check-prefixes=CHECK-MERGE
8
9
10; CHECK-MERGE:      Contents of (__DATA_CONST,__objc_classlist) section
11
12; CHECK-MERGE-NEXT: [[#%x,]] 0x[[#%x,]] _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass
13; CHECK-MERGE-NEXT:            isa 0x[[#%x,]] _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
14; CHECK-MERGE-NEXT:     superclass 0x0
15; CHECK-MERGE-NEXT:          cache 0x0
16; CHECK-MERGE-NEXT:         vtable 0x0
17; CHECK-MERGE-NEXT:           data 0x[[#%x,]] (struct class_ro_t *) Swift class
18; CHECK-MERGE-NEXT:                     flags 0x80
19; CHECK-MERGE-NEXT:             instanceStart 8
20; CHECK-MERGE-NEXT:              instanceSize 8
21; CHECK-MERGE-NEXT:                  reserved 0x0
22; CHECK-MERGE-NEXT:                ivarLayout 0x0
23; CHECK-MERGE-NEXT:                      name 0x[[#%x,]] _TtC11MyTestClass11MyTestClass
24; CHECK-MERGE-NEXT:               baseMethods 0x[[#%x,]] (struct method_list_t *)
25; CHECK-MERGE-NEXT: 		   entsize 24
26; CHECK-MERGE-NEXT: 		     count 1
27; CHECK-MERGE-NEXT: 		      name 0x[[#%x,]] init
28; CHECK-MERGE-NEXT: 		     types 0x[[#%x,]] @16@0:8
29; CHECK-MERGE-NEXT: 		       imp _$s11MyTestClassAACABycfcTo
30; CHECK-MERGE-NEXT:             baseProtocols 0x0
31; CHECK-MERGE-NEXT:                     ivars 0x0
32; CHECK-MERGE-NEXT:            weakIvarLayout 0x0
33; CHECK-MERGE-NEXT:            baseProperties 0x0
34; CHECK-MERGE-NEXT: Meta Class
35; CHECK-MERGE-NEXT:            isa 0x0
36; CHECK-MERGE-NEXT:     superclass 0x0
37; CHECK-MERGE-NEXT:          cache 0x0
38; CHECK-MERGE-NEXT:         vtable 0x0
39; CHECK-MERGE-NEXT:           data 0x[[#%x,]] (struct class_ro_t *)
40; CHECK-MERGE-NEXT:                     flags 0x81 RO_META
41; CHECK-MERGE-NEXT:             instanceStart 40
42; CHECK-MERGE-NEXT:              instanceSize 40
43; CHECK-MERGE-NEXT:                  reserved 0x0
44; CHECK-MERGE-NEXT:                ivarLayout 0x0
45; CHECK-MERGE-NEXT:                      name 0x[[#%x,]] _TtC11MyTestClass11MyTestClass
46; CHECK-MERGE-NEXT:               baseMethods 0x0 (struct method_list_t *)
47; CHECK-MERGE-NEXT:             baseProtocols 0x0
48; CHECK-MERGE-NEXT:                     ivars 0x0
49; CHECK-MERGE-NEXT:            weakIvarLayout 0x0
50; CHECK-MERGE-NEXT:            baseProperties 0x0
51
52
53;  ================== Generated from Swift: ==================
54;; > xcrun swiftc --version
55;; swift-driver version: 1.109.2 Apple Swift version 6.0 (swiftlang-6.0.0.3.300 clang-1600.0.20.10)
56;; > xcrun swiftc -S MyTestClass.swift -o MyTestClass.s
57;;
58; import Foundation
59;
60; protocol MyProtocol {
61;     func protocolMethod()
62; }
63;
64; @objc class MyTestClass: NSObject, MyProtocol {
65;     func protocolMethod() {
66;     }
67; }
68;
69; extension MyTestClass {
70;     public func extensionMethod() {
71;     }
72; }
73;  ================== Generated from Swift: ==================
74
75
76	.section	__TEXT,__text,regular,pure_instructions
77	.build_version macos, 11, 0	sdk_version 10, 0
78	.globl	_main
79	.p2align	2
80_main:
81	.cfi_startproc
82	mov	w0, #0
83	ret
84	.cfi_endproc
85
86	.private_extern	_$s11MyTestClassAAC14protocolMethodyyF
87	.globl	_$s11MyTestClassAAC14protocolMethodyyF
88	.p2align	2
89_$s11MyTestClassAAC14protocolMethodyyF:
90	.cfi_startproc
91	ret
92	.cfi_endproc
93
94	.private_extern	_$s11MyTestClassAACABycfC
95	.globl	_$s11MyTestClassAACABycfC
96	.p2align	2
97_$s11MyTestClassAACABycfC:
98	.cfi_startproc
99	ret
100	.cfi_endproc
101
102	.private_extern	_$s11MyTestClassAACABycfc
103	.globl	_$s11MyTestClassAACABycfc
104	.p2align	2
105_$s11MyTestClassAACABycfc:
106	.cfi_startproc
107	ret
108	.cfi_endproc
109
110	.private_extern	_$s11MyTestClassAACMa
111	.globl	_$s11MyTestClassAACMa
112	.p2align	2
113_$s11MyTestClassAACMa:
114	ret
115
116	.p2align	2
117_$s11MyTestClassAACABycfcTo:
118	.cfi_startproc
119	ret
120	.cfi_endproc
121
122	.private_extern	_$s11MyTestClassAACfD
123	.globl	_$s11MyTestClassAACfD
124	.p2align	2
125_$s11MyTestClassAACfD:
126	.cfi_startproc
127	ret
128	.cfi_endproc
129
130	.p2align	2
131_$s11MyTestClassAACAA0A8ProtocolA2aCP14protocolMethodyyFTW:
132	.cfi_startproc
133	ret
134	.cfi_endproc
135
136	.private_extern	_$s11MyTestClassAAC15extensionMethodyyF
137	.globl	_$s11MyTestClassAAC15extensionMethodyyF
138	.p2align	2
139_$s11MyTestClassAAC15extensionMethodyyF:
140	.cfi_startproc
141	ret
142	.cfi_endproc
143
144	.section	__TEXT,__objc_methname,cstring_literals
145"L_selector_data(init)":
146	.asciz	"init"
147
148	.section	__DATA,__objc_selrefs,literal_pointers,no_dead_strip
149	.p2align	3, 0x0
150"L_selector(init)":
151	.quad	"L_selector_data(init)"
152
153	.section	__TEXT,__objc_methname,cstring_literals
154"L_selector_data(dealloc)":
155	.asciz	"dealloc"
156
157	.section	__DATA,__objc_selrefs,literal_pointers,no_dead_strip
158	.p2align	3, 0x0
159"L_selector(dealloc)":
160	.quad	"L_selector_data(dealloc)"
161
162	.private_extern	_$s11MyTestClassAACAA0A8ProtocolAAMc
163	.section	__TEXT,__const
164	.globl	_$s11MyTestClassAACAA0A8ProtocolAAMc
165	.p2align	2, 0x0
166_$s11MyTestClassAACAA0A8ProtocolAAMc:
167	.long	_$s11MyTestClass0A8ProtocolMp-_$s11MyTestClassAACAA0A8ProtocolAAMc
168	.long	(_$s11MyTestClassAACMn-_$s11MyTestClassAACAA0A8ProtocolAAMc)-4
169	.long	(_$s11MyTestClassAACAA0A8ProtocolAAWP-_$s11MyTestClassAACAA0A8ProtocolAAMc)-8
170	.long	0
171
172	.private_extern	_$s11MyTestClassAACAA0A8ProtocolAAWP
173	.section	__DATA,__const
174	.globl	_$s11MyTestClassAACAA0A8ProtocolAAWP
175	.p2align	3, 0x0
176_$s11MyTestClassAACAA0A8ProtocolAAWP:
177	.quad	_$s11MyTestClassAACAA0A8ProtocolAAMc
178	.quad	_$s11MyTestClassAACAA0A8ProtocolA2aCP14protocolMethodyyFTW
179
180	.section	__TEXT,__swift5_entry,regular,no_dead_strip
181	.p2align	2, 0x0
182l_entry_point:
183	.long	_main-l_entry_point
184	.long	0
185
186	.private_extern	"_symbolic $s11MyTestClass0A8ProtocolP"
187	.section	__TEXT,__swift5_typeref
188	.globl	"_symbolic $s11MyTestClass0A8ProtocolP"
189	.weak_definition	"_symbolic $s11MyTestClass0A8ProtocolP"
190	.p2align	1, 0x0
191"_symbolic $s11MyTestClass0A8ProtocolP":
192	.ascii	"$s11MyTestClass0A8ProtocolP"
193	.byte	0
194
195	.section	__TEXT,__swift5_fieldmd
196	.p2align	2, 0x0
197_$s11MyTestClass0A8Protocol_pMF:
198	.long	"_symbolic $s11MyTestClass0A8ProtocolP"-_$s11MyTestClass0A8Protocol_pMF
199	.long	0
200	.short	4
201	.short	12
202	.long	0
203
204	.section	__TEXT,__const
205l_.str.11.MyTestClass:
206	.asciz	"MyTestClass"
207
208	.private_extern	_$s11MyTestClassMXM
209	.section	__TEXT,__constg_swiftt
210	.globl	_$s11MyTestClassMXM
211	.weak_definition	_$s11MyTestClassMXM
212	.p2align	2, 0x0
213_$s11MyTestClassMXM:
214	.long	0
215	.long	0
216	.long	(l_.str.11.MyTestClass-_$s11MyTestClassMXM)-8
217
218	.section	__TEXT,__const
219l_.str.10.MyProtocol:
220	.asciz	"MyProtocol"
221
222	.private_extern	_$s11MyTestClass0A8ProtocolMp
223	.section	__TEXT,__constg_swiftt
224	.globl	_$s11MyTestClass0A8ProtocolMp
225	.p2align	2, 0x0
226_$s11MyTestClass0A8ProtocolMp:
227	.long	65603
228	.long	(_$s11MyTestClassMXM-_$s11MyTestClass0A8ProtocolMp)-4
229	.long	(l_.str.10.MyProtocol-_$s11MyTestClass0A8ProtocolMp)-8
230	.long	0
231	.long	1
232	.long	0
233	.long	17
234	.long	0
235
236	.private_extern	_OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
237	.section	__DATA,__data
238	.globl	_OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
239	.p2align	3, 0x0
240_OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass:
241	.quad	_OBJC_METACLASS_$_NSObject
242	.quad	_OBJC_METACLASS_$_NSObject
243	.quad	__objc_empty_cache
244	.quad	0
245	.quad	__METACLASS_DATA__TtC11MyTestClass11MyTestClass
246
247	.section	__TEXT,__cstring,cstring_literals
248	.p2align	4, 0x0
249l_.str.30._TtC11MyTestClass11MyTestClass:
250	.asciz	"_TtC11MyTestClass11MyTestClass"
251
252	.section	__DATA,__objc_const
253	.p2align	3, 0x0
254__METACLASS_DATA__TtC11MyTestClass11MyTestClass:
255	.long	129
256	.long	40
257	.long	40
258	.long	0
259	.quad	0
260	.quad	l_.str.30._TtC11MyTestClass11MyTestClass
261	.quad	0
262	.quad	0
263	.quad	0
264	.quad	0
265	.quad	0
266
267	.section	__TEXT,__cstring,cstring_literals
268"l_.str.7.@16@0:8":
269	.asciz	"@16@0:8"
270
271	.section	__DATA,__objc_data
272	.p2align	3, 0x0
273__INSTANCE_METHODS__TtC11MyTestClass11MyTestClass:
274	.long	24
275	.long	1
276	.quad	"L_selector_data(init)"
277	.quad	"l_.str.7.@16@0:8"
278	.quad	_$s11MyTestClassAACABycfcTo
279
280	.p2align	3, 0x0
281__DATA__TtC11MyTestClass11MyTestClass:
282	.long	128
283	.long	8
284	.long	8
285	.long	0
286	.quad	0
287	.quad	l_.str.30._TtC11MyTestClass11MyTestClass
288	.quad	__INSTANCE_METHODS__TtC11MyTestClass11MyTestClass
289	.quad	0
290	.quad	0
291	.quad	0
292	.quad	0
293
294	.private_extern	"_symbolic So8NSObjectC"
295	.section	__TEXT,__swift5_typeref
296	.globl	"_symbolic So8NSObjectC"
297	.weak_definition	"_symbolic So8NSObjectC"
298	.p2align	1, 0x0
299"_symbolic So8NSObjectC":
300	.ascii	"So8NSObjectC"
301	.byte	0
302
303	.private_extern	_$s11MyTestClassAACMn
304	.section	__TEXT,__constg_swiftt
305	.globl	_$s11MyTestClassAACMn
306	.p2align	2, 0x0
307_$s11MyTestClassAACMn:
308	.long	2147483728
309	.long	(_$s11MyTestClassMXM-_$s11MyTestClassAACMn)-4
310	.long	(l_.str.11.MyTestClass-_$s11MyTestClassAACMn)-8
311	.long	(_$s11MyTestClassAACMa-_$s11MyTestClassAACMn)-12
312	.long	(_$s11MyTestClassAACMF-_$s11MyTestClassAACMn)-16
313	.long	("_symbolic So8NSObjectC"-_$s11MyTestClassAACMn)-20
314	.long	3
315	.long	11
316	.long	1
317	.long	0
318	.long	10
319	.long	10
320	.long	1
321	.long	16
322	.long	(_$s11MyTestClassAAC14protocolMethodyyF-_$s11MyTestClassAACMn)-56
323
324	.section	__DATA,__objc_data
325	.p2align	3, 0x0
326_$s11MyTestClassAACMf:
327	.quad	0
328	.quad	_$s11MyTestClassAACfD
329	.quad	_$sBOWV
330	.quad	_OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
331	.quad	_OBJC_CLASS_$_NSObject
332	.quad	__objc_empty_cache
333	.quad	0
334	.quad	__DATA__TtC11MyTestClass11MyTestClass+2
335	.long	0
336	.long	0
337	.long	8
338	.short	7
339	.short	0
340	.long	112
341	.long	24
342	.quad	_$s11MyTestClassAACMn
343	.quad	0
344	.quad	_$s11MyTestClassAAC14protocolMethodyyF
345
346	.private_extern	"_symbolic _____ 11MyTestClassAAC"
347	.section	__TEXT,__swift5_typeref
348	.globl	"_symbolic _____ 11MyTestClassAAC"
349	.weak_definition	"_symbolic _____ 11MyTestClassAAC"
350	.p2align	1, 0x0
351"_symbolic _____ 11MyTestClassAAC":
352	.byte	1
353	.long	(_$s11MyTestClassAACMn-"_symbolic _____ 11MyTestClassAAC")-1
354	.byte	0
355
356	.section	__TEXT,__swift5_fieldmd
357	.p2align	2, 0x0
358_$s11MyTestClassAACMF:
359	.long	"_symbolic _____ 11MyTestClassAAC"-_$s11MyTestClassAACMF
360	.long	("_symbolic So8NSObjectC"-_$s11MyTestClassAACMF)-4
361	.short	7
362	.short	12
363	.long	0
364
365	.section	__TEXT,__swift5_protos
366	.p2align	2, 0x0
367l_$s11MyTestClass0A8ProtocolHr:
368	.long	_$s11MyTestClass0A8ProtocolMp-l_$s11MyTestClass0A8ProtocolHr
369
370	.section	__TEXT,__swift5_proto
371	.p2align	2, 0x0
372l_$s11MyTestClassAACAA0A8ProtocolAAHc:
373	.long	_$s11MyTestClassAACAA0A8ProtocolAAMc-l_$s11MyTestClassAACAA0A8ProtocolAAHc
374
375	.section	__TEXT,__swift5_types
376	.p2align	2, 0x0
377l_$s11MyTestClassAACHn:
378	.long	_$s11MyTestClassAACMn-l_$s11MyTestClassAACHn
379
380	.private_extern	___swift_reflection_version
381	.section	__TEXT,__const
382	.globl	___swift_reflection_version
383	.weak_definition	___swift_reflection_version
384	.p2align	1, 0x0
385___swift_reflection_version:
386	.short	3
387
388	.section	__DATA,__objc_classlist,regular,no_dead_strip
389	.p2align	3, 0x0
390_objc_classes_$s11MyTestClassAACN:
391	.quad	_$s11MyTestClassAACN
392
393	.no_dead_strip	_main
394	.no_dead_strip	l_entry_point
395	.no_dead_strip	_$s11MyTestClass0A8Protocol_pMF
396	.no_dead_strip	_$s11MyTestClassAACMF
397	.no_dead_strip	__swift_FORCE_LOAD_$_swiftFoundation_$_MyTestClass
398	.no_dead_strip	__swift_FORCE_LOAD_$_swiftDarwin_$_MyTestClass
399	.no_dead_strip	__swift_FORCE_LOAD_$_swiftObjectiveC_$_MyTestClass
400	.no_dead_strip	__swift_FORCE_LOAD_$_swiftCoreFoundation_$_MyTestClass
401	.no_dead_strip	__swift_FORCE_LOAD_$_swiftDispatch_$_MyTestClass
402	.no_dead_strip	__swift_FORCE_LOAD_$_swiftXPC_$_MyTestClass
403	.no_dead_strip	__swift_FORCE_LOAD_$_swiftIOKit_$_MyTestClass
404	.no_dead_strip	l_$s11MyTestClass0A8ProtocolHr
405	.no_dead_strip	l_$s11MyTestClassAACAA0A8ProtocolAAHc
406	.no_dead_strip	l_$s11MyTestClassAACHn
407	.no_dead_strip	___swift_reflection_version
408	.no_dead_strip	_objc_classes_$s11MyTestClassAACN
409	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
410L_OBJC_IMAGE_INFO:
411	.long	0
412	.long	100665152
413
414	.globl	_$s11MyTestClass0A8ProtocolTL
415	.private_extern	_$s11MyTestClass0A8ProtocolTL
416	.alt_entry	_$s11MyTestClass0A8ProtocolTL
417.set _$s11MyTestClass0A8ProtocolTL, (_$s11MyTestClass0A8ProtocolMp+24)-8
418	.globl	_$s11MyTestClassAAC14protocolMethodyyFTq
419	.private_extern	_$s11MyTestClassAAC14protocolMethodyyFTq
420	.alt_entry	_$s11MyTestClassAAC14protocolMethodyyFTq
421.set _$s11MyTestClassAAC14protocolMethodyyFTq, _$s11MyTestClassAACMn+52
422	.globl	_$s11MyTestClassAACN
423	.private_extern	_$s11MyTestClassAACN
424	.alt_entry	_$s11MyTestClassAACN
425.set _$s11MyTestClassAACN, _$s11MyTestClassAACMf+24
426	.globl	_OBJC_CLASS_$__TtC11MyTestClass11MyTestClass
427	.private_extern	_OBJC_CLASS_$__TtC11MyTestClass11MyTestClass
428.set _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass, _$s11MyTestClassAACN
429	.weak_reference __swift_FORCE_LOAD_$_swiftFoundation
430	.weak_reference __swift_FORCE_LOAD_$_swiftDarwin
431	.weak_reference __swift_FORCE_LOAD_$_swiftObjectiveC
432	.weak_reference __swift_FORCE_LOAD_$_swiftCoreFoundation
433	.weak_reference __swift_FORCE_LOAD_$_swiftDispatch
434	.weak_reference __swift_FORCE_LOAD_$_swiftXPC
435	.weak_reference __swift_FORCE_LOAD_$_swiftIOKit
436.subsections_via_symbols
437
438_OBJC_CLASS_$_NSObject:
439_OBJC_METACLASS_$_NSObject:
440__objc_empty_cache:
441_$sBOWV:
442  .quad 0
443