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