llvm-project
1019 строк · 43.8 Кб
1# REQUIRES: aarch64
2# RUN: rm -rf %t; split-file %s %t && cd %t
3
4############ Test merging multiple categories into a single category ############
5## Create a dylib to link against(a64_file1.dylib) and merge categories in the main binary (file2_merge_a64.exe)
6# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o a64_file1.o a64_file1.s
7# RUN: %lld -arch arm64 a64_file1.o -o a64_file1.dylib -dylib
8
9# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o a64_file2.o a64_file2.s
10# RUN: %lld -arch arm64 -o a64_file2_no_merge.exe a64_file1.dylib a64_file2.o
11# RUN: %lld -arch arm64 -o a64_file2_merge.exe -objc_category_merging a64_file1.dylib a64_file2.o
12
13# RUN: llvm-objdump --objc-meta-data --macho a64_file2_no_merge.exe | FileCheck %s --check-prefixes=NO_MERGE_CATS
14# RUN: llvm-objdump --objc-meta-data --macho a64_file2_merge.exe | FileCheck %s --check-prefixes=MERGE_CATS
15
16############ Test merging multiple categories into the base class ############
17# RUN: %lld -arch arm64 -o a64_file2_merge_into_class.exe -objc_category_merging a64_file1.o a64_file2.o
18# RUN: llvm-objdump --objc-meta-data --macho a64_file2_merge_into_class.exe | FileCheck %s --check-prefixes=MERGE_CATS_CLS
19
20
21MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass(Category02|Category03)
22MERGE_CATS-NEXT: name {{.*}} Category02|Category03
23MERGE_CATS: instanceMethods
24MERGE_CATS-NEXT: entsize 24
25MERGE_CATS-NEXT: count 4
26MERGE_CATS-NEXT: name {{.*}} class02InstanceMethod
27MERGE_CATS-NEXT: types {{.*}} v16@0:8
28MERGE_CATS-NEXT: imp -[MyBaseClass(Category02) class02InstanceMethod]
29MERGE_CATS-NEXT: name {{.*}} myProtocol02Method
30MERGE_CATS-NEXT: types {{.*}} v16@0:8
31MERGE_CATS-NEXT: imp -[MyBaseClass(Category02) myProtocol02Method]
32MERGE_CATS-NEXT: name {{.*}} class03InstanceMethod
33MERGE_CATS-NEXT: types {{.*}} v16@0:8
34MERGE_CATS-NEXT: imp -[MyBaseClass(Category03) class03InstanceMethod]
35MERGE_CATS-NEXT: name {{.*}} myProtocol03Method
36MERGE_CATS-NEXT: types {{.*}} v16@0:8
37MERGE_CATS-NEXT: imp -[MyBaseClass(Category03) myProtocol03Method]
38MERGE_CATS-NEXT: classMethods {{.*}}
39MERGE_CATS-NEXT: entsize 24
40MERGE_CATS-NEXT: count 4
41MERGE_CATS-NEXT: name {{.*}} class02ClassMethod
42MERGE_CATS-NEXT: types {{.*}} v16@0:8
43MERGE_CATS-NEXT: imp +[MyBaseClass(Category02) class02ClassMethod]
44MERGE_CATS-NEXT: name {{.*}} MyProtocol02Prop
45MERGE_CATS-NEXT: types {{.*}} i16@0:8
46MERGE_CATS-NEXT: imp +[MyBaseClass(Category02) MyProtocol02Prop]
47MERGE_CATS-NEXT: name {{.*}} class03ClassMethod
48MERGE_CATS-NEXT: types {{.*}} v16@0:8
49MERGE_CATS-NEXT: imp +[MyBaseClass(Category03) class03ClassMethod]
50MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
51MERGE_CATS-NEXT: types {{.*}} i16@0:8
52MERGE_CATS-NEXT: imp +[MyBaseClass(Category03) MyProtocol03Prop]
53MERGE_CATS-NEXT: protocols
54MERGE_CATS-NEXT: count 2
55MERGE_CATS-NEXT: list[0] {{.*}} (struct protocol_t *)
56MERGE_CATS-NEXT: isa 0x0
57MERGE_CATS-NEXT: name {{.*}} MyProtocol02
58MERGE_CATS-NEXT: protocols 0x0
59MERGE_CATS-NEXT: instanceMethods
60MERGE_CATS-NEXT: entsize 24
61MERGE_CATS-NEXT: count 2
62MERGE_CATS-NEXT: name {{.*}} myProtocol02Method
63MERGE_CATS-NEXT: types {{.*}} v16@0:8
64MERGE_CATS-NEXT: imp 0x0
65MERGE_CATS-NEXT: name {{.*}} MyProtocol02Prop
66MERGE_CATS-NEXT: types {{.*}} i16@0:8
67MERGE_CATS-NEXT: imp 0x0
68MERGE_CATS-NEXT: classMethods
69MERGE_CATS-NEXT: optionalInstanceMethods 0x0
70MERGE_CATS-NEXT: optionalClassMethods 0x0
71MERGE_CATS-NEXT: instanceProperties {{.*}}
72MERGE_CATS-NEXT: list[1] {{.*}}
73MERGE_CATS-NEXT: isa 0x0
74MERGE_CATS-NEXT: name {{.*}} MyProtocol03
75MERGE_CATS-NEXT: protocols 0x0
76MERGE_CATS-NEXT: instanceMethods
77MERGE_CATS-NEXT: entsize 24
78MERGE_CATS-NEXT: count 2
79MERGE_CATS-NEXT: name {{.*}} myProtocol03Method
80MERGE_CATS-NEXT: types {{.*}} v16@0:8
81MERGE_CATS-NEXT: imp 0x0
82MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
83MERGE_CATS-NEXT: types {{.*}} i16@0:8
84MERGE_CATS-NEXT: imp 0x0
85MERGE_CATS-NEXT: classMethods 0x0
86MERGE_CATS-NEXT: optionalInstanceMethods 0x0
87MERGE_CATS-NEXT: optionalClassMethods 0x0
88MERGE_CATS-NEXT: instanceProperties {{.*}}
89MERGE_CATS-NEXT: instanceProperties
90MERGE_CATS-NEXT: entsize 16
91MERGE_CATS-NEXT: count 2
92MERGE_CATS-NEXT: name {{.*}} MyProtocol02Prop
93MERGE_CATS-NEXT: attributes {{.*}} Ti,R,D
94MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
95MERGE_CATS-NEXT: attributes {{.*}} Ti,R,D
96MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category04
97
98
99NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass(Category02|Category03)
100NO_MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category02
101NO_MERGE_CATS: instanceMethods
102NO_MERGE_CATS-NEXT: 24
103NO_MERGE_CATS-NEXT: 2
104NO_MERGE_CATS: classMethods
105NO_MERGE_CATS-NEXT: 24
106NO_MERGE_CATS-NEXT: 2
107
108
109MERGE_CATS_CLS: _OBJC_CLASS_$_MyBaseClass
110MERGE_CATS_CLS-NEXT: isa {{.*}} _OBJC_METACLASS_$_MyBaseClass
111MERGE_CATS_CLS-NEXT: superclass 0x0
112MERGE_CATS_CLS-NEXT: cache {{.*}} __objc_empty_cache
113MERGE_CATS_CLS-NEXT: vtable 0x0
114MERGE_CATS_CLS-NEXT: data {{.*}} (struct class_ro_t *)
115MERGE_CATS_CLS-NEXT: flags 0x2 RO_ROOT
116MERGE_CATS_CLS-NEXT: instanceStart 0
117MERGE_CATS_CLS-NEXT: instanceSize 4
118MERGE_CATS_CLS-NEXT: reserved 0x0
119MERGE_CATS_CLS-NEXT: ivarLayout 0x0
120MERGE_CATS_CLS-NEXT: name {{.*}} MyBaseClass
121MERGE_CATS_CLS-NEXT: baseMethods {{.*}} (struct method_list_t *)
122MERGE_CATS_CLS-NEXT: entsize 24
123MERGE_CATS_CLS-NEXT: count 8
124MERGE_CATS_CLS-NEXT: name {{.*}} class02InstanceMethod
125MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
126MERGE_CATS_CLS-NEXT: imp -[MyBaseClass(Category02) class02InstanceMethod]
127MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol02Method
128MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
129MERGE_CATS_CLS-NEXT: imp -[MyBaseClass(Category02) myProtocol02Method]
130MERGE_CATS_CLS-NEXT: name {{.*}} class03InstanceMethod
131MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
132MERGE_CATS_CLS-NEXT: imp -[MyBaseClass(Category03) class03InstanceMethod]
133MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol03Method
134MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
135MERGE_CATS_CLS-NEXT: imp -[MyBaseClass(Category03) myProtocol03Method]
136MERGE_CATS_CLS-NEXT: name {{.*}} baseInstanceMethod
137MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
138MERGE_CATS_CLS-NEXT: imp -[MyBaseClass baseInstanceMethod]
139MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol01Method
140MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
141MERGE_CATS_CLS-NEXT: imp -[MyBaseClass myProtocol01Method]
142MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01Prop
143MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
144MERGE_CATS_CLS-NEXT: imp -[MyBaseClass MyProtocol01Prop]
145MERGE_CATS_CLS-NEXT: name {{.*}} setMyProtocol01Prop:
146MERGE_CATS_CLS-NEXT: types {{.*}} v20@0:8i16
147MERGE_CATS_CLS-NEXT: imp -[MyBaseClass setMyProtocol01Prop:]
148MERGE_CATS_CLS-NEXT: baseProtocols {{.*}}
149MERGE_CATS_CLS-NEXT: count 3
150MERGE_CATS_CLS-NEXT: list[0] {{.*}} (struct protocol_t *)
151MERGE_CATS_CLS-NEXT: isa 0x0
152MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol02
153MERGE_CATS_CLS-NEXT: protocols 0x0
154MERGE_CATS_CLS-NEXT: instanceMethods {{.*}} (struct method_list_t *)
155MERGE_CATS_CLS-NEXT: entsize 24
156MERGE_CATS_CLS-NEXT: count 2
157MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol02Method
158MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
159MERGE_CATS_CLS-NEXT: imp 0x0
160MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol02Prop
161MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
162MERGE_CATS_CLS-NEXT: imp 0x0
163MERGE_CATS_CLS-NEXT: classMethods 0x0 (struct method_list_t *)
164MERGE_CATS_CLS-NEXT: optionalInstanceMethods 0x0
165MERGE_CATS_CLS-NEXT: optionalClassMethods 0x0
166MERGE_CATS_CLS-NEXT: instanceProperties {{.*}}
167MERGE_CATS_CLS-NEXT: list[1] {{.*}} (struct protocol_t *)
168MERGE_CATS_CLS-NEXT: isa 0x0
169MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol03
170MERGE_CATS_CLS-NEXT: protocols 0x0
171MERGE_CATS_CLS-NEXT: instanceMethods {{.*}} (struct method_list_t *)
172MERGE_CATS_CLS-NEXT: entsize 24
173MERGE_CATS_CLS-NEXT: count 2
174MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol03Method
175MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
176MERGE_CATS_CLS-NEXT: imp 0x0
177MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol03Prop
178MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
179MERGE_CATS_CLS-NEXT: imp 0x0
180MERGE_CATS_CLS-NEXT: classMethods 0x0 (struct method_list_t *)
181MERGE_CATS_CLS-NEXT: optionalInstanceMethods 0x0
182MERGE_CATS_CLS-NEXT: optionalClassMethods 0x0
183MERGE_CATS_CLS-NEXT: instanceProperties {{.*}}
184MERGE_CATS_CLS-NEXT: list[2] {{.*}} (struct protocol_t *)
185MERGE_CATS_CLS-NEXT: isa 0x0
186MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01
187MERGE_CATS_CLS-NEXT: protocols 0x0
188MERGE_CATS_CLS-NEXT: instanceMethods {{.*}} (struct method_list_t *)
189MERGE_CATS_CLS-NEXT: entsize 24
190MERGE_CATS_CLS-NEXT: count 3
191MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol01Method
192MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
193MERGE_CATS_CLS-NEXT: imp 0x0
194MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01Prop
195MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
196MERGE_CATS_CLS-NEXT: imp 0x0
197MERGE_CATS_CLS-NEXT: name {{.*}} setMyProtocol01Prop:
198MERGE_CATS_CLS-NEXT: types {{.*}} v20@0:8i16
199MERGE_CATS_CLS-NEXT: imp 0x0
200MERGE_CATS_CLS-NEXT: classMethods 0x0 (struct method_list_t *)
201MERGE_CATS_CLS-NEXT: optionalInstanceMethods 0x0
202MERGE_CATS_CLS-NEXT: optionalClassMethods 0x0
203MERGE_CATS_CLS-NEXT: instanceProperties {{.*}}
204MERGE_CATS_CLS-NEXT: ivars {{.*}}
205MERGE_CATS_CLS-NEXT: entsize 32
206MERGE_CATS_CLS-NEXT: count 1
207MERGE_CATS_CLS-NEXT: offset {{.*}} 0
208MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01Prop
209MERGE_CATS_CLS-NEXT: type {{.*}} i
210MERGE_CATS_CLS-NEXT: alignment 2
211MERGE_CATS_CLS-NEXT: size 4
212MERGE_CATS_CLS-NEXT: weakIvarLayout 0x0
213MERGE_CATS_CLS-NEXT: baseProperties {{.*}}
214MERGE_CATS_CLS-NEXT: entsize 16
215MERGE_CATS_CLS-NEXT: count 3
216MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol02Prop
217MERGE_CATS_CLS-NEXT: attributes {{.*}} Ti,R,D
218MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol03Prop
219MERGE_CATS_CLS-NEXT: attributes {{.*}} Ti,R,D
220MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01Prop
221MERGE_CATS_CLS-NEXT: attributes {{.*}} Ti,N,VMyProtocol01Prop
222MERGE_CATS_CLS-NEXT: Meta Class
223MERGE_CATS_CLS-NEXT: isa {{.*}} _OBJC_METACLASS_$_MyBaseClass
224MERGE_CATS_CLS-NEXT: superclass {{.*}} _OBJC_CLASS_$_MyBaseClass
225MERGE_CATS_CLS-NEXT: cache {{.*}} __objc_empty_cache
226MERGE_CATS_CLS-NEXT: vtable 0x0
227MERGE_CATS_CLS-NEXT: data {{.*}} (struct class_ro_t *)
228MERGE_CATS_CLS-NEXT: flags 0x3 RO_META RO_ROOT
229MERGE_CATS_CLS-NEXT: instanceStart 40
230MERGE_CATS_CLS-NEXT: instanceSize 40
231MERGE_CATS_CLS-NEXT: reserved 0x0
232MERGE_CATS_CLS-NEXT: ivarLayout 0x0
233MERGE_CATS_CLS-NEXT: name {{.*}} MyBaseClass
234MERGE_CATS_CLS-NEXT: baseMethods {{.*}} (struct method_list_t *)
235MERGE_CATS_CLS-NEXT: entsize 24
236MERGE_CATS_CLS-NEXT: count 5
237MERGE_CATS_CLS-NEXT: name {{.*}} class02ClassMethod
238MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
239MERGE_CATS_CLS-NEXT: imp +[MyBaseClass(Category02) class02ClassMethod]
240MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol02Prop
241MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
242MERGE_CATS_CLS-NEXT: imp +[MyBaseClass(Category02) MyProtocol02Prop]
243MERGE_CATS_CLS-NEXT: name {{.*}} class03ClassMethod
244MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
245MERGE_CATS_CLS-NEXT: imp +[MyBaseClass(Category03) class03ClassMethod]
246MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol03Prop
247MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
248MERGE_CATS_CLS-NEXT: imp +[MyBaseClass(Category03) MyProtocol03Prop]
249MERGE_CATS_CLS-NEXT: name {{.*}} baseClassMethod
250MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
251MERGE_CATS_CLS-NEXT: imp +[MyBaseClass baseClassMethod]
252MERGE_CATS_CLS-NEXT: baseProtocols {{.*}}
253MERGE_CATS_CLS-NEXT: count 3
254MERGE_CATS_CLS-NEXT: list[0] {{.*}} (struct protocol_t *)
255MERGE_CATS_CLS-NEXT: isa 0x0
256MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol02
257MERGE_CATS_CLS-NEXT: protocols 0x0
258MERGE_CATS_CLS-NEXT: instanceMethods {{.*}} (struct method_list_t *)
259MERGE_CATS_CLS-NEXT: entsize 24
260MERGE_CATS_CLS-NEXT: count 2
261MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol02Method
262MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
263MERGE_CATS_CLS-NEXT: imp 0x0
264MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol02Prop
265MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
266MERGE_CATS_CLS-NEXT: imp 0x0
267MERGE_CATS_CLS-NEXT: classMethods 0x0 (struct method_list_t *)
268MERGE_CATS_CLS-NEXT: optionalInstanceMethods 0x0
269MERGE_CATS_CLS-NEXT: optionalClassMethods 0x0
270MERGE_CATS_CLS-NEXT: instanceProperties {{.*}}
271MERGE_CATS_CLS-NEXT: list[1] {{.*}} (struct protocol_t *)
272MERGE_CATS_CLS-NEXT: isa 0x0
273MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol03
274MERGE_CATS_CLS-NEXT: protocols 0x0
275MERGE_CATS_CLS-NEXT: instanceMethods {{.*}} (struct method_list_t *)
276MERGE_CATS_CLS-NEXT: entsize 24
277MERGE_CATS_CLS-NEXT: count 2
278MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol03Method
279MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
280MERGE_CATS_CLS-NEXT: imp 0x0
281MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol03Prop
282MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
283MERGE_CATS_CLS-NEXT: imp 0x0
284MERGE_CATS_CLS-NEXT: classMethods 0x0 (struct method_list_t *)
285MERGE_CATS_CLS-NEXT: optionalInstanceMethods 0x0
286MERGE_CATS_CLS-NEXT: optionalClassMethods 0x0
287MERGE_CATS_CLS-NEXT: instanceProperties {{.*}}
288MERGE_CATS_CLS-NEXT: list[2] {{.*}} (struct protocol_t *)
289MERGE_CATS_CLS-NEXT: isa 0x0
290MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01
291MERGE_CATS_CLS-NEXT: protocols 0x0
292MERGE_CATS_CLS-NEXT: instanceMethods {{.*}} (struct method_list_t *)
293MERGE_CATS_CLS-NEXT: entsize 24
294MERGE_CATS_CLS-NEXT: count 3
295MERGE_CATS_CLS-NEXT: name {{.*}} myProtocol01Method
296MERGE_CATS_CLS-NEXT: types {{.*}} v16@0:8
297MERGE_CATS_CLS-NEXT: imp 0x0
298MERGE_CATS_CLS-NEXT: name {{.*}} MyProtocol01Prop
299MERGE_CATS_CLS-NEXT: types {{.*}} i16@0:8
300MERGE_CATS_CLS-NEXT: imp 0x0
301MERGE_CATS_CLS-NEXT: name {{.*}} setMyProtocol01Prop:
302MERGE_CATS_CLS-NEXT: types {{.*}} v20@0:8i16
303MERGE_CATS_CLS-NEXT: imp 0x0
304MERGE_CATS_CLS-NEXT: classMethods 0x0 (struct method_list_t *)
305MERGE_CATS_CLS-NEXT: optionalInstanceMethods 0x0
306MERGE_CATS_CLS-NEXT: optionalClassMethods 0x0
307MERGE_CATS_CLS-NEXT: instanceProperties {{.*}}
308MERGE_CATS_CLS-NEXT: ivars 0x0
309MERGE_CATS_CLS-NEXT: weakIvarLayout 0x0
310MERGE_CATS_CLS-NEXT: baseProperties 0x0
311MERGE_CATS_CLS: __OBJC_$_CATEGORY_MyBaseClass_$_Category04
312
313
314#--- a64_file1.s
315
316## @protocol MyProtocol01
317## - (void)myProtocol01Method;
318## @property (nonatomic) int MyProtocol01Prop;
319## @end
320##
321## __attribute__((objc_root_class))
322## @interface MyBaseClass<MyProtocol01>
323## - (void)baseInstanceMethod;
324## - (void)myProtocol01Method;
325## + (void)baseClassMethod;
326## @end
327##
328## @implementation MyBaseClass
329## @synthesize MyProtocol01Prop;
330## - (void)baseInstanceMethod {}
331## - (void)myProtocol01Method {}
332## + (void)baseClassMethod {}
333## @end
334##
335## void *_objc_empty_cache;
336
337.section __TEXT,__text,regular,pure_instructions
338.p2align 2 ; -- Begin function -[MyBaseClass baseInstanceMethod]
339"-[MyBaseClass baseInstanceMethod]": ; @"\01-[MyBaseClass baseInstanceMethod]"
340.cfi_startproc
341; %bb.0: ; %entry
342ret
343.cfi_endproc
344; -- End function
345.p2align 2 ; -- Begin function -[MyBaseClass myProtocol01Method]
346"-[MyBaseClass myProtocol01Method]": ; @"\01-[MyBaseClass myProtocol01Method]"
347.cfi_startproc
348; %bb.0: ; %entry
349ret
350.cfi_endproc
351; -- End function
352.p2align 2 ; -- Begin function +[MyBaseClass baseClassMethod]
353"+[MyBaseClass baseClassMethod]": ; @"\01+[MyBaseClass baseClassMethod]"
354.cfi_startproc
355; %bb.0: ; %entry
356ret
357.cfi_endproc
358; -- End function
359.p2align 2 ; -- Begin function -[MyBaseClass MyProtocol01Prop]
360"-[MyBaseClass MyProtocol01Prop]": ; @"\01-[MyBaseClass MyProtocol01Prop]"
361.cfi_startproc
362; %bb.0: ; %entry
363Lloh0:
364adrp x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGE
365Lloh1:
366ldrsw x8, [x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGEOFF]
367ldr w0, [x0, x8]
368ret
369.loh AdrpLdr Lloh0, Lloh1
370.cfi_endproc
371; -- End function
372.p2align 2 ; -- Begin function -[MyBaseClass setMyProtocol01Prop:]
373"-[MyBaseClass setMyProtocol01Prop:]": ; @"\01-[MyBaseClass setMyProtocol01Prop:]"
374.cfi_startproc
375; %bb.0: ; %entry
376Lloh2:
377adrp x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGE
378Lloh3:
379ldrsw x8, [x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGEOFF]
380str w2, [x0, x8]
381ret
382.loh AdrpLdr Lloh2, Lloh3
383.cfi_endproc
384; -- End function
385.private_extern _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop ; @"OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop"
386.section __DATA,__objc_ivar
387.globl _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop
388.p2align 2, 0x0
389_OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop:
390.long 0 ; 0x0
391.section __DATA,__objc_data
392.globl _OBJC_CLASS_$_MyBaseClass ; @"OBJC_CLASS_$_MyBaseClass"
393.p2align 3, 0x0
394_OBJC_CLASS_$_MyBaseClass:
395.quad _OBJC_METACLASS_$_MyBaseClass
396.quad 0
397.quad __objc_empty_cache
398.quad 0
399.quad __OBJC_CLASS_RO_$_MyBaseClass
400.globl _OBJC_METACLASS_$_MyBaseClass ; @"OBJC_METACLASS_$_MyBaseClass"
401.p2align 3, 0x0
402_OBJC_METACLASS_$_MyBaseClass:
403.quad _OBJC_METACLASS_$_MyBaseClass
404.quad _OBJC_CLASS_$_MyBaseClass
405.quad __objc_empty_cache
406.quad 0
407.quad __OBJC_METACLASS_RO_$_MyBaseClass
408.section __TEXT,__objc_classname,cstring_literals
409l_OBJC_CLASS_NAME_: ; @OBJC_CLASS_NAME_
410.asciz "MyBaseClass"
411.section __TEXT,__objc_methname,cstring_literals
412l_OBJC_METH_VAR_NAME_: ; @OBJC_METH_VAR_NAME_
413.asciz "baseClassMethod"
414.section __TEXT,__objc_methtype,cstring_literals
415l_OBJC_METH_VAR_TYPE_: ; @OBJC_METH_VAR_TYPE_
416.asciz "v16@0:8"
417.section __DATA,__objc_const
418.p2align 3, 0x0 ; @"_OBJC_$_CLASS_METHODS_MyBaseClass"
419__OBJC_$_CLASS_METHODS_MyBaseClass:
420.long 24 ; 0x18
421.long 1 ; 0x1
422.quad l_OBJC_METH_VAR_NAME_
423.quad l_OBJC_METH_VAR_TYPE_
424.quad "+[MyBaseClass baseClassMethod]"
425.section __TEXT,__objc_classname,cstring_literals
426l_OBJC_CLASS_NAME_.1: ; @OBJC_CLASS_NAME_.1
427.asciz "MyProtocol01"
428.section __TEXT,__objc_methname,cstring_literals
429l_OBJC_METH_VAR_NAME_.2: ; @OBJC_METH_VAR_NAME_.2
430.asciz "myProtocol01Method"
431l_OBJC_METH_VAR_NAME_.3: ; @OBJC_METH_VAR_NAME_.3
432.asciz "MyProtocol01Prop"
433.section __TEXT,__objc_methtype,cstring_literals
434l_OBJC_METH_VAR_TYPE_.4: ; @OBJC_METH_VAR_TYPE_.4
435.asciz "i16@0:8"
436.section __TEXT,__objc_methname,cstring_literals
437l_OBJC_METH_VAR_NAME_.5: ; @OBJC_METH_VAR_NAME_.5
438.asciz "setMyProtocol01Prop:"
439.section __TEXT,__objc_methtype,cstring_literals
440l_OBJC_METH_VAR_TYPE_.6: ; @OBJC_METH_VAR_TYPE_.6
441.asciz "v20@0:8i16"
442.section __DATA,__objc_const
443.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol01"
444__OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol01:
445.long 24 ; 0x18
446.long 3 ; 0x3
447.quad l_OBJC_METH_VAR_NAME_.2
448.quad l_OBJC_METH_VAR_TYPE_
449.quad 0
450.quad l_OBJC_METH_VAR_NAME_.3
451.quad l_OBJC_METH_VAR_TYPE_.4
452.quad 0
453.quad l_OBJC_METH_VAR_NAME_.5
454.quad l_OBJC_METH_VAR_TYPE_.6
455.quad 0
456.section __TEXT,__objc_methname,cstring_literals
457l_OBJC_PROP_NAME_ATTR_: ; @OBJC_PROP_NAME_ATTR_
458.asciz "MyProtocol01Prop"
459l_OBJC_PROP_NAME_ATTR_.7: ; @OBJC_PROP_NAME_ATTR_.7
460.asciz "Ti,N"
461.section __DATA,__objc_const
462.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyProtocol01"
463__OBJC_$_PROP_LIST_MyProtocol01:
464.long 16 ; 0x10
465.long 1 ; 0x1
466.quad l_OBJC_PROP_NAME_ATTR_
467.quad l_OBJC_PROP_NAME_ATTR_.7
468.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol01"
469__OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol01:
470.quad l_OBJC_METH_VAR_TYPE_
471.quad l_OBJC_METH_VAR_TYPE_.4
472.quad l_OBJC_METH_VAR_TYPE_.6
473.private_extern __OBJC_PROTOCOL_$_MyProtocol01 ; @"_OBJC_PROTOCOL_$_MyProtocol01"
474.section __DATA,__data
475.globl __OBJC_PROTOCOL_$_MyProtocol01
476.weak_definition __OBJC_PROTOCOL_$_MyProtocol01
477.p2align 3, 0x0
478__OBJC_PROTOCOL_$_MyProtocol01:
479.quad 0
480.quad l_OBJC_CLASS_NAME_.1
481.quad 0
482.quad __OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol01
483.quad 0
484.quad 0
485.quad 0
486.quad __OBJC_$_PROP_LIST_MyProtocol01
487.long 96 ; 0x60
488.long 0 ; 0x0
489.quad __OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol01
490.quad 0
491.quad 0
492.private_extern __OBJC_LABEL_PROTOCOL_$_MyProtocol01 ; @"_OBJC_LABEL_PROTOCOL_$_MyProtocol01"
493.section __DATA,__objc_protolist,coalesced,no_dead_strip
494.globl __OBJC_LABEL_PROTOCOL_$_MyProtocol01
495.weak_definition __OBJC_LABEL_PROTOCOL_$_MyProtocol01
496.p2align 3, 0x0
497__OBJC_LABEL_PROTOCOL_$_MyProtocol01:
498.quad __OBJC_PROTOCOL_$_MyProtocol01
499.section __DATA,__objc_const
500.p2align 3, 0x0 ; @"_OBJC_CLASS_PROTOCOLS_$_MyBaseClass"
501__OBJC_CLASS_PROTOCOLS_$_MyBaseClass:
502.quad 1 ; 0x1
503.quad __OBJC_PROTOCOL_$_MyProtocol01
504.quad 0
505.p2align 3, 0x0 ; @"_OBJC_METACLASS_RO_$_MyBaseClass"
506__OBJC_METACLASS_RO_$_MyBaseClass:
507.long 3 ; 0x3
508.long 40 ; 0x28
509.long 40 ; 0x28
510.space 4
511.quad 0
512.quad l_OBJC_CLASS_NAME_
513.quad __OBJC_$_CLASS_METHODS_MyBaseClass
514.quad __OBJC_CLASS_PROTOCOLS_$_MyBaseClass
515.quad 0
516.quad 0
517.quad 0
518.section __TEXT,__objc_methname,cstring_literals
519l_OBJC_METH_VAR_NAME_.8: ; @OBJC_METH_VAR_NAME_.8
520.asciz "baseInstanceMethod"
521.section __DATA,__objc_const
522.p2align 3, 0x0 ; @"_OBJC_$_INSTANCE_METHODS_MyBaseClass"
523__OBJC_$_INSTANCE_METHODS_MyBaseClass:
524.long 24 ; 0x18
525.long 4 ; 0x4
526.quad l_OBJC_METH_VAR_NAME_.8
527.quad l_OBJC_METH_VAR_TYPE_
528.quad "-[MyBaseClass baseInstanceMethod]"
529.quad l_OBJC_METH_VAR_NAME_.2
530.quad l_OBJC_METH_VAR_TYPE_
531.quad "-[MyBaseClass myProtocol01Method]"
532.quad l_OBJC_METH_VAR_NAME_.3
533.quad l_OBJC_METH_VAR_TYPE_.4
534.quad "-[MyBaseClass MyProtocol01Prop]"
535.quad l_OBJC_METH_VAR_NAME_.5
536.quad l_OBJC_METH_VAR_TYPE_.6
537.quad "-[MyBaseClass setMyProtocol01Prop:]"
538.section __TEXT,__objc_methtype,cstring_literals
539l_OBJC_METH_VAR_TYPE_.9: ; @OBJC_METH_VAR_TYPE_.9
540.asciz "i"
541.section __DATA,__objc_const
542.p2align 3, 0x0 ; @"_OBJC_$_INSTANCE_VARIABLES_MyBaseClass"
543__OBJC_$_INSTANCE_VARIABLES_MyBaseClass:
544.long 32 ; 0x20
545.long 1 ; 0x1
546.quad _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop
547.quad l_OBJC_METH_VAR_NAME_.3
548.quad l_OBJC_METH_VAR_TYPE_.9
549.long 2 ; 0x2
550.long 4 ; 0x4
551.section __TEXT,__objc_methname,cstring_literals
552l_OBJC_PROP_NAME_ATTR_.10: ; @OBJC_PROP_NAME_ATTR_.10
553.asciz "Ti,N,VMyProtocol01Prop"
554.section __DATA,__objc_const
555.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyBaseClass"
556__OBJC_$_PROP_LIST_MyBaseClass:
557.long 16 ; 0x10
558.long 1 ; 0x1
559.quad l_OBJC_PROP_NAME_ATTR_
560.quad l_OBJC_PROP_NAME_ATTR_.10
561.p2align 3, 0x0 ; @"_OBJC_CLASS_RO_$_MyBaseClass"
562__OBJC_CLASS_RO_$_MyBaseClass:
563.long 2 ; 0x2
564.long 0 ; 0x0
565.long 4 ; 0x4
566.space 4
567.quad 0
568.quad l_OBJC_CLASS_NAME_
569.quad __OBJC_$_INSTANCE_METHODS_MyBaseClass
570.quad __OBJC_CLASS_PROTOCOLS_$_MyBaseClass
571.quad __OBJC_$_INSTANCE_VARIABLES_MyBaseClass
572.quad 0
573.quad __OBJC_$_PROP_LIST_MyBaseClass
574.globl __objc_empty_cache ; @_objc_empty_cache
575.zerofill __DATA,__common,__objc_empty_cache,8,3
576.section __DATA,__objc_classlist,regular,no_dead_strip
577.p2align 3, 0x0 ; @"OBJC_LABEL_CLASS_$"
578l_OBJC_LABEL_CLASS_$:
579.quad _OBJC_CLASS_$_MyBaseClass
580.no_dead_strip __OBJC_LABEL_PROTOCOL_$_MyProtocol01
581.no_dead_strip __OBJC_PROTOCOL_$_MyProtocol01
582.section __DATA,__objc_imageinfo,regular,no_dead_strip
583L_OBJC_IMAGE_INFO:
584.long 0
585.long 96
586.subsections_via_symbols
587
588
589#--- a64_file2.s
590
591## @protocol MyProtocol01
592## - (void)myProtocol01Method;
593## @end
594##
595## @protocol MyProtocol02
596## - (void)myProtocol02Method;
597## @property(readonly) int MyProtocol02Prop;
598## @end
599##
600## @protocol MyProtocol03
601## - (void)myProtocol03Method;
602## @property(readonly) int MyProtocol03Prop;
603## @end
604##
605##
606## __attribute__((objc_root_class))
607## @interface MyBaseClass<MyProtocol01>
608## - (void)baseInstanceMethod;
609## - (void)myProtocol01Method;
610## + (void)baseClassMethod;
611## @end
612##
613##
614##
615## @interface MyBaseClass(Category02)<MyProtocol02>
616## - (void)class02InstanceMethod;
617## - (void)myProtocol02Method;
618## + (void)class02ClassMethod;
619## + (int)MyProtocol02Prop;
620## @end
621##
622## @implementation MyBaseClass(Category02)
623## - (void)class02InstanceMethod {}
624## - (void)myProtocol02Method {}
625## + (void)class02ClassMethod {}
626## + (int)MyProtocol02Prop { return 0;}
627## @dynamic MyProtocol02Prop;
628## @end
629##
630## @interface MyBaseClass(Category03)<MyProtocol03>
631## - (void)class03InstanceMethod;
632## - (void)myProtocol03Method;
633## + (void)class03ClassMethod;
634## + (int)MyProtocol03Prop;
635## @end
636##
637## @implementation MyBaseClass(Category03)
638## - (void)class03InstanceMethod {}
639## - (void)myProtocol03Method {}
640## + (void)class03ClassMethod {}
641## + (int)MyProtocol03Prop { return 0;}
642## @dynamic MyProtocol03Prop;
643## @end
644##
645## // This category shouldn't be merged
646## @interface MyBaseClass(Category04)
647## + (void)load;
648## @end
649##
650## @implementation MyBaseClass(Category04)
651## + (void)load {}
652## @end
653##
654## int main() {
655## return 0;
656## }
657
658
659.section __TEXT,__text,regular,pure_instructions
660.p2align 2 ; -- Begin function -[MyBaseClass(Category02) class02InstanceMethod]
661"-[MyBaseClass(Category02) class02InstanceMethod]": ; @"\01-[MyBaseClass(Category02) class02InstanceMethod]"
662.cfi_startproc
663; %bb.0: ; %entry
664ret
665.cfi_endproc
666; -- End function
667.p2align 2 ; -- Begin function -[MyBaseClass(Category02) myProtocol02Method]
668"-[MyBaseClass(Category02) myProtocol02Method]": ; @"\01-[MyBaseClass(Category02) myProtocol02Method]"
669.cfi_startproc
670; %bb.0: ; %entry
671ret
672.cfi_endproc
673; -- End function
674.p2align 2 ; -- Begin function +[MyBaseClass(Category02) class02ClassMethod]
675"+[MyBaseClass(Category02) class02ClassMethod]": ; @"\01+[MyBaseClass(Category02) class02ClassMethod]"
676.cfi_startproc
677; %bb.0: ; %entry
678ret
679.cfi_endproc
680; -- End function
681.p2align 2 ; -- Begin function +[MyBaseClass(Category02) MyProtocol02Prop]
682"+[MyBaseClass(Category02) MyProtocol02Prop]": ; @"\01+[MyBaseClass(Category02) MyProtocol02Prop]"
683.cfi_startproc
684; %bb.0: ; %entry
685b _OUTLINED_FUNCTION_0
686.cfi_endproc
687; -- End function
688.p2align 2 ; -- Begin function -[MyBaseClass(Category03) class03InstanceMethod]
689"-[MyBaseClass(Category03) class03InstanceMethod]": ; @"\01-[MyBaseClass(Category03) class03InstanceMethod]"
690.cfi_startproc
691; %bb.0: ; %entry
692ret
693.cfi_endproc
694; -- End function
695.p2align 2 ; -- Begin function -[MyBaseClass(Category03) myProtocol03Method]
696"-[MyBaseClass(Category03) myProtocol03Method]": ; @"\01-[MyBaseClass(Category03) myProtocol03Method]"
697.cfi_startproc
698; %bb.0: ; %entry
699ret
700.cfi_endproc
701; -- End function
702.p2align 2 ; -- Begin function +[MyBaseClass(Category03) class03ClassMethod]
703"+[MyBaseClass(Category03) class03ClassMethod]": ; @"\01+[MyBaseClass(Category03) class03ClassMethod]"
704.cfi_startproc
705; %bb.0: ; %entry
706ret
707.cfi_endproc
708; -- End function
709.p2align 2 ; -- Begin function +[MyBaseClass(Category03) MyProtocol03Prop]
710"+[MyBaseClass(Category03) MyProtocol03Prop]": ; @"\01+[MyBaseClass(Category03) MyProtocol03Prop]"
711.cfi_startproc
712; %bb.0: ; %entry
713b _OUTLINED_FUNCTION_0
714.cfi_endproc
715; -- End function
716.p2align 2
717"+[MyBaseClass(Category04) load]":
718.cfi_startproc
719; %bb.0:
720ret
721.cfi_endproc
722.globl _main ; -- Begin function main
723.p2align 2
724_main: ; @main
725.cfi_startproc
726; %bb.0: ; %entry
727b _OUTLINED_FUNCTION_0
728.cfi_endproc
729; -- End function
730.p2align 2 ; -- Begin function OUTLINED_FUNCTION_0
731_OUTLINED_FUNCTION_0: ; @OUTLINED_FUNCTION_0 Tail Call
732.cfi_startproc
733; %bb.0:
734mov w0, #0
735ret
736.cfi_endproc
737; -- End function
738.section __TEXT,__objc_classname,cstring_literals
739l_OBJC_CLASS_NAME_: ; @OBJC_CLASS_NAME_
740.asciz "Category02"
741.section __TEXT,__objc_methname,cstring_literals
742l_OBJC_METH_VAR_NAME_: ; @OBJC_METH_VAR_NAME_
743.asciz "class02InstanceMethod"
744.section __TEXT,__objc_methtype,cstring_literals
745l_OBJC_METH_VAR_TYPE_: ; @OBJC_METH_VAR_TYPE_
746.asciz "v16@0:8"
747.section __TEXT,__objc_methname,cstring_literals
748l_OBJC_METH_VAR_NAME_.1: ; @OBJC_METH_VAR_NAME_.1
749.asciz "myProtocol02Method"
750.section __DATA,__objc_const
751.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category02"
752__OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category02:
753.long 24 ; 0x18
754.long 2 ; 0x2
755.quad l_OBJC_METH_VAR_NAME_
756.quad l_OBJC_METH_VAR_TYPE_
757.quad "-[MyBaseClass(Category02) class02InstanceMethod]"
758.quad l_OBJC_METH_VAR_NAME_.1
759.quad l_OBJC_METH_VAR_TYPE_
760.quad "-[MyBaseClass(Category02) myProtocol02Method]"
761.section __TEXT,__objc_methname,cstring_literals
762l_OBJC_METH_VAR_NAME_.2: ; @OBJC_METH_VAR_NAME_.2
763.asciz "class02ClassMethod"
764l_OBJC_METH_VAR_NAME_.3: ; @OBJC_METH_VAR_NAME_.3
765.asciz "MyProtocol02Prop"
766.section __TEXT,__objc_methtype,cstring_literals
767l_OBJC_METH_VAR_TYPE_.4: ; @OBJC_METH_VAR_TYPE_.4
768.asciz "i16@0:8"
769.section __DATA,__objc_const
770.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category02"
771__OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category02:
772.long 24 ; 0x18
773.long 2 ; 0x2
774.quad l_OBJC_METH_VAR_NAME_.2
775.quad l_OBJC_METH_VAR_TYPE_
776.quad "+[MyBaseClass(Category02) class02ClassMethod]"
777.quad l_OBJC_METH_VAR_NAME_.3
778.quad l_OBJC_METH_VAR_TYPE_.4
779.quad "+[MyBaseClass(Category02) MyProtocol02Prop]"
780.section __TEXT,__objc_classname,cstring_literals
781l_OBJC_CLASS_NAME_.5: ; @OBJC_CLASS_NAME_.5
782.asciz "MyProtocol02"
783.section __DATA,__objc_const
784.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol02"
785__OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol02:
786.long 24 ; 0x18
787.long 2 ; 0x2
788.quad l_OBJC_METH_VAR_NAME_.1
789.quad l_OBJC_METH_VAR_TYPE_
790.quad 0
791.quad l_OBJC_METH_VAR_NAME_.3
792.quad l_OBJC_METH_VAR_TYPE_.4
793.quad 0
794.section __TEXT,__objc_methname,cstring_literals
795l_OBJC_PROP_NAME_ATTR_: ; @OBJC_PROP_NAME_ATTR_
796.asciz "MyProtocol02Prop"
797l_OBJC_PROP_NAME_ATTR_.6: ; @OBJC_PROP_NAME_ATTR_.6
798.asciz "Ti,R"
799.section __DATA,__objc_const
800.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyProtocol02"
801__OBJC_$_PROP_LIST_MyProtocol02:
802.long 16 ; 0x10
803.long 1 ; 0x1
804.quad l_OBJC_PROP_NAME_ATTR_
805.quad l_OBJC_PROP_NAME_ATTR_.6
806.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol02"
807__OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol02:
808.quad l_OBJC_METH_VAR_TYPE_
809.quad l_OBJC_METH_VAR_TYPE_.4
810.private_extern __OBJC_PROTOCOL_$_MyProtocol02 ; @"_OBJC_PROTOCOL_$_MyProtocol02"
811.section __DATA,__data
812.globl __OBJC_PROTOCOL_$_MyProtocol02
813.weak_definition __OBJC_PROTOCOL_$_MyProtocol02
814.p2align 3, 0x0
815__OBJC_PROTOCOL_$_MyProtocol02:
816.quad 0
817.quad l_OBJC_CLASS_NAME_.5
818.quad 0
819.quad __OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol02
820.quad 0
821.quad 0
822.quad 0
823.quad __OBJC_$_PROP_LIST_MyProtocol02
824.long 96 ; 0x60
825.long 0 ; 0x0
826.quad __OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol02
827.quad 0
828.quad 0
829.private_extern __OBJC_LABEL_PROTOCOL_$_MyProtocol02 ; @"_OBJC_LABEL_PROTOCOL_$_MyProtocol02"
830.section __DATA,__objc_protolist,coalesced,no_dead_strip
831.globl __OBJC_LABEL_PROTOCOL_$_MyProtocol02
832.weak_definition __OBJC_LABEL_PROTOCOL_$_MyProtocol02
833.p2align 3, 0x0
834__OBJC_LABEL_PROTOCOL_$_MyProtocol02:
835.quad __OBJC_PROTOCOL_$_MyProtocol02
836.section __DATA,__objc_const
837.p2align 3, 0x0 ; @"_OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category02"
838__OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category02:
839.quad 1 ; 0x1
840.quad __OBJC_PROTOCOL_$_MyProtocol02
841.quad 0
842.section __TEXT,__objc_methname,cstring_literals
843l_OBJC_PROP_NAME_ATTR_.7: ; @OBJC_PROP_NAME_ATTR_.7
844.asciz "Ti,R,D"
845.section __DATA,__objc_const
846.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyBaseClass_$_Category02"
847__OBJC_$_PROP_LIST_MyBaseClass_$_Category02:
848.long 16 ; 0x10
849.long 1 ; 0x1
850.quad l_OBJC_PROP_NAME_ATTR_
851.quad l_OBJC_PROP_NAME_ATTR_.7
852.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_MyBaseClass_$_Category02"
853__OBJC_$_CATEGORY_MyBaseClass_$_Category02:
854.quad l_OBJC_CLASS_NAME_
855.quad _OBJC_CLASS_$_MyBaseClass
856.quad __OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category02
857.quad __OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category02
858.quad __OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category02
859.quad __OBJC_$_PROP_LIST_MyBaseClass_$_Category02
860.quad 0
861.long 64 ; 0x40
862.space 4
863.section __TEXT,__objc_classname,cstring_literals
864l_OBJC_CLASS_NAME_.8: ; @OBJC_CLASS_NAME_.8
865.asciz "Category03"
866.section __TEXT,__objc_methname,cstring_literals
867l_OBJC_METH_VAR_NAME_.9: ; @OBJC_METH_VAR_NAME_.9
868.asciz "class03InstanceMethod"
869l_OBJC_METH_VAR_NAME_.10: ; @OBJC_METH_VAR_NAME_.10
870.asciz "myProtocol03Method"
871.section __DATA,__objc_const
872.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category03"
873__OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category03:
874.long 24 ; 0x18
875.long 2 ; 0x2
876.quad l_OBJC_METH_VAR_NAME_.9
877.quad l_OBJC_METH_VAR_TYPE_
878.quad "-[MyBaseClass(Category03) class03InstanceMethod]"
879.quad l_OBJC_METH_VAR_NAME_.10
880.quad l_OBJC_METH_VAR_TYPE_
881.quad "-[MyBaseClass(Category03) myProtocol03Method]"
882.section __TEXT,__objc_methname,cstring_literals
883l_OBJC_METH_VAR_NAME_.11: ; @OBJC_METH_VAR_NAME_.11
884.asciz "class03ClassMethod"
885l_OBJC_METH_VAR_NAME_.12: ; @OBJC_METH_VAR_NAME_.12
886.asciz "MyProtocol03Prop"
887.section __DATA,__objc_const
888.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category03"
889__OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category03:
890.long 24 ; 0x18
891.long 2 ; 0x2
892.quad l_OBJC_METH_VAR_NAME_.11
893.quad l_OBJC_METH_VAR_TYPE_
894.quad "+[MyBaseClass(Category03) class03ClassMethod]"
895.quad l_OBJC_METH_VAR_NAME_.12
896.quad l_OBJC_METH_VAR_TYPE_.4
897.quad "+[MyBaseClass(Category03) MyProtocol03Prop]"
898.section __TEXT,__objc_classname,cstring_literals
899l_OBJC_CLASS_NAME_.13: ; @OBJC_CLASS_NAME_.13
900.asciz "MyProtocol03"
901.section __DATA,__objc_const
902.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol03"
903__OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol03:
904.long 24 ; 0x18
905.long 2 ; 0x2
906.quad l_OBJC_METH_VAR_NAME_.10
907.quad l_OBJC_METH_VAR_TYPE_
908.quad 0
909.quad l_OBJC_METH_VAR_NAME_.12
910.quad l_OBJC_METH_VAR_TYPE_.4
911.quad 0
912.section __TEXT,__objc_methname,cstring_literals
913l_OBJC_PROP_NAME_ATTR_.14: ; @OBJC_PROP_NAME_ATTR_.14
914.asciz "MyProtocol03Prop"
915.section __DATA,__objc_const
916.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyProtocol03"
917__OBJC_$_PROP_LIST_MyProtocol03:
918.long 16 ; 0x10
919.long 1 ; 0x1
920.quad l_OBJC_PROP_NAME_ATTR_.14
921.quad l_OBJC_PROP_NAME_ATTR_.6
922.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol03"
923__OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol03:
924.quad l_OBJC_METH_VAR_TYPE_
925.quad l_OBJC_METH_VAR_TYPE_.4
926.private_extern __OBJC_PROTOCOL_$_MyProtocol03 ; @"_OBJC_PROTOCOL_$_MyProtocol03"
927.section __DATA,__data
928.globl __OBJC_PROTOCOL_$_MyProtocol03
929.weak_definition __OBJC_PROTOCOL_$_MyProtocol03
930.p2align 3, 0x0
931__OBJC_PROTOCOL_$_MyProtocol03:
932.quad 0
933.quad l_OBJC_CLASS_NAME_.13
934.quad 0
935.quad __OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol03
936.quad 0
937.quad 0
938.quad 0
939.quad __OBJC_$_PROP_LIST_MyProtocol03
940.long 96 ; 0x60
941.long 0 ; 0x0
942.quad __OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol03
943.quad 0
944.quad 0
945.private_extern __OBJC_LABEL_PROTOCOL_$_MyProtocol03 ; @"_OBJC_LABEL_PROTOCOL_$_MyProtocol03"
946.section __DATA,__objc_protolist,coalesced,no_dead_strip
947.globl __OBJC_LABEL_PROTOCOL_$_MyProtocol03
948.weak_definition __OBJC_LABEL_PROTOCOL_$_MyProtocol03
949.p2align 3, 0x0
950__OBJC_LABEL_PROTOCOL_$_MyProtocol03:
951.quad __OBJC_PROTOCOL_$_MyProtocol03
952.section __DATA,__objc_const
953.p2align 3, 0x0 ; @"_OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category03"
954__OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category03:
955.quad 1 ; 0x1
956.quad __OBJC_PROTOCOL_$_MyProtocol03
957.quad 0
958.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyBaseClass_$_Category03"
959__OBJC_$_PROP_LIST_MyBaseClass_$_Category03:
960.long 16 ; 0x10
961.long 1 ; 0x1
962.quad l_OBJC_PROP_NAME_ATTR_.14
963.quad l_OBJC_PROP_NAME_ATTR_.7
964.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_MyBaseClass_$_Category03"
965__OBJC_$_CATEGORY_MyBaseClass_$_Category03:
966.quad l_OBJC_CLASS_NAME_.8
967.quad _OBJC_CLASS_$_MyBaseClass
968.quad __OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category03
969.quad __OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category03
970.quad __OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category03
971.quad __OBJC_$_PROP_LIST_MyBaseClass_$_Category03
972.quad 0
973.long 64 ; 0x40
974.space 4
975.section __TEXT,__objc_classname,cstring_literals
976l_OBJC_CLASS_NAME_.15:
977.asciz "Category04"
978.section __TEXT,__objc_methname,cstring_literals
979l_OBJC_METH_VAR_NAME_.16:
980.asciz "load"
981.section __DATA,__objc_const
982.p2align 3, 0x0
983__OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category04:
984.long 24
985.long 1
986.quad l_OBJC_METH_VAR_NAME_.16
987.quad l_OBJC_METH_VAR_TYPE_
988.quad "+[MyBaseClass(Category04) load]"
989.p2align 3, 0x0
990__OBJC_$_CATEGORY_MyBaseClass_$_Category04:
991.quad l_OBJC_CLASS_NAME_.15
992.quad _OBJC_CLASS_$_MyBaseClass
993.quad 0
994.quad __OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category04
995.quad 0
996.quad 0
997.quad 0
998.long 64
999.space 4
1000.section __DATA,__objc_catlist,regular,no_dead_strip
1001.p2align 3, 0x0 ; @"OBJC_LABEL_CATEGORY_$"
1002l_OBJC_LABEL_CATEGORY_$:
1003.quad __OBJC_$_CATEGORY_MyBaseClass_$_Category02
1004.quad __OBJC_$_CATEGORY_MyBaseClass_$_Category03
1005.quad __OBJC_$_CATEGORY_MyBaseClass_$_Category04
1006.section __DATA,__objc_nlcatlist,regular,no_dead_strip
1007.p2align 3, 0x0
1008l_OBJC_LABEL_NONLAZY_CATEGORY_$:
1009.quad __OBJC_$_CATEGORY_MyBaseClass_$_Category04
1010
1011.no_dead_strip __OBJC_LABEL_PROTOCOL_$_MyProtocol02
1012.no_dead_strip __OBJC_LABEL_PROTOCOL_$_MyProtocol03
1013.no_dead_strip __OBJC_PROTOCOL_$_MyProtocol02
1014.no_dead_strip __OBJC_PROTOCOL_$_MyProtocol03
1015.section __DATA,__objc_imageinfo,regular,no_dead_strip
1016L_OBJC_IMAGE_INFO:
1017.long 0
1018.long 96
1019.subsections_via_symbols
1020