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