blob: 3bc3ca26b6ae6c86de08d18b5a8522a9f91cec5d [file] [log] [blame]
# REQUIRES: aarch64
# RUN: rm -rf %t; split-file %s %t && cd %t
## Create a dylib to link against(a64_file1.dylib) and merge categories in the main binary (file2_merge_a64.exe)
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o a64_file1.o a64_file1.s
# RUN: %lld -arch arm64 a64_file1.o -o a64_file1.dylib -dylib
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o a64_file2.o a64_file2.s
# RUN: %lld -arch arm64 -o a64_file2_no_merge.exe a64_file1.dylib a64_file2.o
# RUN: %lld -arch arm64 -o a64_file2_merge.exe -objc_category_merging a64_file1.dylib a64_file2.o
# RUN: llvm-objdump --objc-meta-data --macho a64_file2_no_merge.exe | FileCheck %s --check-prefixes=NO_MERGE_CATS
# RUN: llvm-objdump --objc-meta-data --macho a64_file2_merge.exe | FileCheck %s --check-prefixes=MERGE_CATS
MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_(Category02|Category03)
MERGE_CATS-NEXT: name {{.*}} Category02|Category03
MERGE_CATS: instanceMethods
MERGE_CATS-NEXT: entsize 24
MERGE_CATS-NEXT: count 4
MERGE_CATS-NEXT: name {{.*}} class02InstanceMethod
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp -[MyBaseClass(Category02) class02InstanceMethod]
MERGE_CATS-NEXT: name {{.*}} myProtocol02Method
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp -[MyBaseClass(Category02) myProtocol02Method]
MERGE_CATS-NEXT: name {{.*}} class03InstanceMethod
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp -[MyBaseClass(Category03) class03InstanceMethod]
MERGE_CATS-NEXT: name {{.*}} myProtocol03Method
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp -[MyBaseClass(Category03) myProtocol03Method]
MERGE_CATS-NEXT: classMethods {{.*}}
MERGE_CATS-NEXT: entsize 24
MERGE_CATS-NEXT: count 4
MERGE_CATS-NEXT: name {{.*}} class02ClassMethod
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp +[MyBaseClass(Category02) class02ClassMethod]
MERGE_CATS-NEXT: name {{.*}} MyProtocol02Prop
MERGE_CATS-NEXT: types {{.*}} i16@0:8
MERGE_CATS-NEXT: imp +[MyBaseClass(Category02) MyProtocol02Prop]
MERGE_CATS-NEXT: name {{.*}} class03ClassMethod
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp +[MyBaseClass(Category03) class03ClassMethod]
MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
MERGE_CATS-NEXT: types {{.*}} i16@0:8
MERGE_CATS-NEXT: imp +[MyBaseClass(Category03) MyProtocol03Prop]
MERGE_CATS-NEXT: protocols
MERGE_CATS-NEXT: count 2
MERGE_CATS-NEXT: list[0] {{.*}} (struct protocol_t *)
MERGE_CATS-NEXT: isa 0x0
MERGE_CATS-NEXT: name {{.*}} MyProtocol02
MERGE_CATS-NEXT: protocols 0x0
MERGE_CATS-NEXT: instanceMethods
MERGE_CATS-NEXT: entsize 24
MERGE_CATS-NEXT: count 2
MERGE_CATS-NEXT: name {{.*}} myProtocol02Method
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp 0x0
MERGE_CATS-NEXT: name {{.*}} MyProtocol02Prop
MERGE_CATS-NEXT: types {{.*}} i16@0:8
MERGE_CATS-NEXT: imp 0x0
MERGE_CATS-NEXT: classMethods
MERGE_CATS-NEXT: optionalInstanceMethods 0x0
MERGE_CATS-NEXT: optionalClassMethods 0x0
MERGE_CATS-NEXT: instanceProperties {{.*}}
MERGE_CATS-NEXT: list[1] {{.*}}
MERGE_CATS-NEXT: isa 0x0
MERGE_CATS-NEXT: name {{.*}} MyProtocol03
MERGE_CATS-NEXT: protocols 0x0
MERGE_CATS-NEXT: instanceMethods
MERGE_CATS-NEXT: entsize 24
MERGE_CATS-NEXT: count 2
MERGE_CATS-NEXT: name {{.*}} myProtocol03Method
MERGE_CATS-NEXT: types {{.*}} v16@0:8
MERGE_CATS-NEXT: imp 0x0
MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
MERGE_CATS-NEXT: types {{.*}} i16@0:8
MERGE_CATS-NEXT: imp 0x0
MERGE_CATS-NEXT: classMethods 0x0
MERGE_CATS-NEXT: optionalInstanceMethods 0x0
MERGE_CATS-NEXT: optionalClassMethods 0x0
MERGE_CATS-NEXT: instanceProperties {{.*}}
MERGE_CATS-NEXT: instanceProperties
MERGE_CATS-NEXT: entsize 16
MERGE_CATS-NEXT: count 2
MERGE_CATS-NEXT: name {{.*}} MyProtocol02Prop
MERGE_CATS-NEXT: attributes {{.*}} Ti,R,D
MERGE_CATS-NEXT: name {{.*}} MyProtocol03Prop
MERGE_CATS-NEXT: attributes {{.*}} Ti,R,D
NO_MERGE_CATS-NOT: __OBJC_$_CATEGORY_MyBaseClass_$_(Category02|Category03)
NO_MERGE_CATS: __OBJC_$_CATEGORY_MyBaseClass_$_Category02
NO_MERGE_CATS: instanceMethods
NO_MERGE_CATS-NEXT: 24
NO_MERGE_CATS-NEXT: 2
NO_MERGE_CATS: classMethods
NO_MERGE_CATS-NEXT: 24
NO_MERGE_CATS-NEXT: 2
#--- a64_file1.s
## @protocol MyProtocol01
## - (void)myProtocol01Method;
## @property (nonatomic) int MyProtocol01Prop;
## @end
##
## __attribute__((objc_root_class))
## @interface MyBaseClass<MyProtocol01>
## - (void)baseInstanceMethod;
## - (void)myProtocol01Method;
## + (void)baseClassMethod;
## @end
##
## @implementation MyBaseClass
## @synthesize MyProtocol01Prop;
## - (void)baseInstanceMethod {}
## - (void)myProtocol01Method {}
## + (void)baseClassMethod {}
## @end
##
## void *_objc_empty_cache;
.section __TEXT,__text,regular,pure_instructions
.p2align 2 ; -- Begin function -[MyBaseClass baseInstanceMethod]
"-[MyBaseClass baseInstanceMethod]": ; @"\01-[MyBaseClass baseInstanceMethod]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[MyBaseClass myProtocol01Method]
"-[MyBaseClass myProtocol01Method]": ; @"\01-[MyBaseClass myProtocol01Method]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function +[MyBaseClass baseClassMethod]
"+[MyBaseClass baseClassMethod]": ; @"\01+[MyBaseClass baseClassMethod]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[MyBaseClass MyProtocol01Prop]
"-[MyBaseClass MyProtocol01Prop]": ; @"\01-[MyBaseClass MyProtocol01Prop]"
.cfi_startproc
; %bb.0: ; %entry
Lloh0:
adrp x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGE
Lloh1:
ldrsw x8, [x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGEOFF]
ldr w0, [x0, x8]
ret
.loh AdrpLdr Lloh0, Lloh1
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[MyBaseClass setMyProtocol01Prop:]
"-[MyBaseClass setMyProtocol01Prop:]": ; @"\01-[MyBaseClass setMyProtocol01Prop:]"
.cfi_startproc
; %bb.0: ; %entry
Lloh2:
adrp x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGE
Lloh3:
ldrsw x8, [x8, _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop@PAGEOFF]
str w2, [x0, x8]
ret
.loh AdrpLdr Lloh2, Lloh3
.cfi_endproc
; -- End function
.private_extern _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop ; @"OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop"
.section __DATA,__objc_ivar
.globl _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop
.p2align 2, 0x0
_OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop:
.long 0 ; 0x0
.section __DATA,__objc_data
.globl _OBJC_CLASS_$_MyBaseClass ; @"OBJC_CLASS_$_MyBaseClass"
.p2align 3, 0x0
_OBJC_CLASS_$_MyBaseClass:
.quad _OBJC_METACLASS_$_MyBaseClass
.quad 0
.quad __objc_empty_cache
.quad 0
.quad __OBJC_CLASS_RO_$_MyBaseClass
.globl _OBJC_METACLASS_$_MyBaseClass ; @"OBJC_METACLASS_$_MyBaseClass"
.p2align 3, 0x0
_OBJC_METACLASS_$_MyBaseClass:
.quad _OBJC_METACLASS_$_MyBaseClass
.quad _OBJC_CLASS_$_MyBaseClass
.quad __objc_empty_cache
.quad 0
.quad __OBJC_METACLASS_RO_$_MyBaseClass
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_: ; @OBJC_CLASS_NAME_
.asciz "MyBaseClass"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_: ; @OBJC_METH_VAR_NAME_
.asciz "baseClassMethod"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_: ; @OBJC_METH_VAR_TYPE_
.asciz "v16@0:8"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_CLASS_METHODS_MyBaseClass"
__OBJC_$_CLASS_METHODS_MyBaseClass:
.long 24 ; 0x18
.long 1 ; 0x1
.quad l_OBJC_METH_VAR_NAME_
.quad l_OBJC_METH_VAR_TYPE_
.quad "+[MyBaseClass baseClassMethod]"
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_.1: ; @OBJC_CLASS_NAME_.1
.asciz "MyProtocol01"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.2: ; @OBJC_METH_VAR_NAME_.2
.asciz "myProtocol01Method"
l_OBJC_METH_VAR_NAME_.3: ; @OBJC_METH_VAR_NAME_.3
.asciz "MyProtocol01Prop"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_.4: ; @OBJC_METH_VAR_TYPE_.4
.asciz "i16@0:8"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.5: ; @OBJC_METH_VAR_NAME_.5
.asciz "setMyProtocol01Prop:"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_.6: ; @OBJC_METH_VAR_TYPE_.6
.asciz "v20@0:8i16"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol01"
__OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol01:
.long 24 ; 0x18
.long 3 ; 0x3
.quad l_OBJC_METH_VAR_NAME_.2
.quad l_OBJC_METH_VAR_TYPE_
.quad 0
.quad l_OBJC_METH_VAR_NAME_.3
.quad l_OBJC_METH_VAR_TYPE_.4
.quad 0
.quad l_OBJC_METH_VAR_NAME_.5
.quad l_OBJC_METH_VAR_TYPE_.6
.quad 0
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_PROP_NAME_ATTR_: ; @OBJC_PROP_NAME_ATTR_
.asciz "MyProtocol01Prop"
l_OBJC_PROP_NAME_ATTR_.7: ; @OBJC_PROP_NAME_ATTR_.7
.asciz "Ti,N"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyProtocol01"
__OBJC_$_PROP_LIST_MyProtocol01:
.long 16 ; 0x10
.long 1 ; 0x1
.quad l_OBJC_PROP_NAME_ATTR_
.quad l_OBJC_PROP_NAME_ATTR_.7
.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol01"
__OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol01:
.quad l_OBJC_METH_VAR_TYPE_
.quad l_OBJC_METH_VAR_TYPE_.4
.quad l_OBJC_METH_VAR_TYPE_.6
.private_extern __OBJC_PROTOCOL_$_MyProtocol01 ; @"_OBJC_PROTOCOL_$_MyProtocol01"
.section __DATA,__data
.globl __OBJC_PROTOCOL_$_MyProtocol01
.weak_definition __OBJC_PROTOCOL_$_MyProtocol01
.p2align 3, 0x0
__OBJC_PROTOCOL_$_MyProtocol01:
.quad 0
.quad l_OBJC_CLASS_NAME_.1
.quad 0
.quad __OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol01
.quad 0
.quad 0
.quad 0
.quad __OBJC_$_PROP_LIST_MyProtocol01
.long 96 ; 0x60
.long 0 ; 0x0
.quad __OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol01
.quad 0
.quad 0
.private_extern __OBJC_LABEL_PROTOCOL_$_MyProtocol01 ; @"_OBJC_LABEL_PROTOCOL_$_MyProtocol01"
.section __DATA,__objc_protolist,coalesced,no_dead_strip
.globl __OBJC_LABEL_PROTOCOL_$_MyProtocol01
.weak_definition __OBJC_LABEL_PROTOCOL_$_MyProtocol01
.p2align 3, 0x0
__OBJC_LABEL_PROTOCOL_$_MyProtocol01:
.quad __OBJC_PROTOCOL_$_MyProtocol01
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_CLASS_PROTOCOLS_$_MyBaseClass"
__OBJC_CLASS_PROTOCOLS_$_MyBaseClass:
.quad 1 ; 0x1
.quad __OBJC_PROTOCOL_$_MyProtocol01
.quad 0
.p2align 3, 0x0 ; @"_OBJC_METACLASS_RO_$_MyBaseClass"
__OBJC_METACLASS_RO_$_MyBaseClass:
.long 3 ; 0x3
.long 40 ; 0x28
.long 40 ; 0x28
.space 4
.quad 0
.quad l_OBJC_CLASS_NAME_
.quad __OBJC_$_CLASS_METHODS_MyBaseClass
.quad __OBJC_CLASS_PROTOCOLS_$_MyBaseClass
.quad 0
.quad 0
.quad 0
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.8: ; @OBJC_METH_VAR_NAME_.8
.asciz "baseInstanceMethod"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_INSTANCE_METHODS_MyBaseClass"
__OBJC_$_INSTANCE_METHODS_MyBaseClass:
.long 24 ; 0x18
.long 4 ; 0x4
.quad l_OBJC_METH_VAR_NAME_.8
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[MyBaseClass baseInstanceMethod]"
.quad l_OBJC_METH_VAR_NAME_.2
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[MyBaseClass myProtocol01Method]"
.quad l_OBJC_METH_VAR_NAME_.3
.quad l_OBJC_METH_VAR_TYPE_.4
.quad "-[MyBaseClass MyProtocol01Prop]"
.quad l_OBJC_METH_VAR_NAME_.5
.quad l_OBJC_METH_VAR_TYPE_.6
.quad "-[MyBaseClass setMyProtocol01Prop:]"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_.9: ; @OBJC_METH_VAR_TYPE_.9
.asciz "i"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_INSTANCE_VARIABLES_MyBaseClass"
__OBJC_$_INSTANCE_VARIABLES_MyBaseClass:
.long 32 ; 0x20
.long 1 ; 0x1
.quad _OBJC_IVAR_$_MyBaseClass.MyProtocol01Prop
.quad l_OBJC_METH_VAR_NAME_.3
.quad l_OBJC_METH_VAR_TYPE_.9
.long 2 ; 0x2
.long 4 ; 0x4
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_PROP_NAME_ATTR_.10: ; @OBJC_PROP_NAME_ATTR_.10
.asciz "Ti,N,VMyProtocol01Prop"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyBaseClass"
__OBJC_$_PROP_LIST_MyBaseClass:
.long 16 ; 0x10
.long 1 ; 0x1
.quad l_OBJC_PROP_NAME_ATTR_
.quad l_OBJC_PROP_NAME_ATTR_.10
.p2align 3, 0x0 ; @"_OBJC_CLASS_RO_$_MyBaseClass"
__OBJC_CLASS_RO_$_MyBaseClass:
.long 2 ; 0x2
.long 0 ; 0x0
.long 4 ; 0x4
.space 4
.quad 0
.quad l_OBJC_CLASS_NAME_
.quad __OBJC_$_INSTANCE_METHODS_MyBaseClass
.quad __OBJC_CLASS_PROTOCOLS_$_MyBaseClass
.quad __OBJC_$_INSTANCE_VARIABLES_MyBaseClass
.quad 0
.quad __OBJC_$_PROP_LIST_MyBaseClass
.globl __objc_empty_cache ; @_objc_empty_cache
.zerofill __DATA,__common,__objc_empty_cache,8,3
.section __DATA,__objc_classlist,regular,no_dead_strip
.p2align 3, 0x0 ; @"OBJC_LABEL_CLASS_$"
l_OBJC_LABEL_CLASS_$:
.quad _OBJC_CLASS_$_MyBaseClass
.no_dead_strip __OBJC_LABEL_PROTOCOL_$_MyProtocol01
.no_dead_strip __OBJC_PROTOCOL_$_MyProtocol01
.section __DATA,__objc_imageinfo,regular,no_dead_strip
L_OBJC_IMAGE_INFO:
.long 0
.long 96
.subsections_via_symbols
#--- a64_file2.s
## @protocol MyProtocol01
## - (void)myProtocol01Method;
## @end
##
## @protocol MyProtocol02
## - (void)myProtocol02Method;
## @property(readonly) int MyProtocol02Prop;
## @end
##
## @protocol MyProtocol03
## - (void)myProtocol03Method;
## @property(readonly) int MyProtocol03Prop;
## @end
##
##
## __attribute__((objc_root_class))
## @interface MyBaseClass<MyProtocol01>
## - (void)baseInstanceMethod;
## - (void)myProtocol01Method;
## + (void)baseClassMethod;
## @end
##
##
##
## @interface MyBaseClass(Category02)<MyProtocol02>
## - (void)class02InstanceMethod;
## - (void)myProtocol02Method;
## + (void)class02ClassMethod;
## + (int)MyProtocol02Prop;
## @end
##
## @implementation MyBaseClass(Category02)
## - (void)class02InstanceMethod {}
## - (void)myProtocol02Method {}
## + (void)class02ClassMethod {}
## + (int)MyProtocol02Prop { return 0;}
## @dynamic MyProtocol02Prop;
## @end
##
## @interface MyBaseClass(Category03)<MyProtocol03>
## - (void)class03InstanceMethod;
## - (void)myProtocol03Method;
## + (void)class03ClassMethod;
## + (int)MyProtocol03Prop;
## @end
##
## @implementation MyBaseClass(Category03)
## - (void)class03InstanceMethod {}
## - (void)myProtocol03Method {}
## + (void)class03ClassMethod {}
## + (int)MyProtocol03Prop { return 0;}
## @dynamic MyProtocol03Prop;
## @end
##
## int main() {
## return 0;
## }
.section __TEXT,__text,regular,pure_instructions
.p2align 2 ; -- Begin function -[MyBaseClass(Category02) class02InstanceMethod]
"-[MyBaseClass(Category02) class02InstanceMethod]": ; @"\01-[MyBaseClass(Category02) class02InstanceMethod]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[MyBaseClass(Category02) myProtocol02Method]
"-[MyBaseClass(Category02) myProtocol02Method]": ; @"\01-[MyBaseClass(Category02) myProtocol02Method]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function +[MyBaseClass(Category02) class02ClassMethod]
"+[MyBaseClass(Category02) class02ClassMethod]": ; @"\01+[MyBaseClass(Category02) class02ClassMethod]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function +[MyBaseClass(Category02) MyProtocol02Prop]
"+[MyBaseClass(Category02) MyProtocol02Prop]": ; @"\01+[MyBaseClass(Category02) MyProtocol02Prop]"
.cfi_startproc
; %bb.0: ; %entry
b _OUTLINED_FUNCTION_0
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[MyBaseClass(Category03) class03InstanceMethod]
"-[MyBaseClass(Category03) class03InstanceMethod]": ; @"\01-[MyBaseClass(Category03) class03InstanceMethod]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[MyBaseClass(Category03) myProtocol03Method]
"-[MyBaseClass(Category03) myProtocol03Method]": ; @"\01-[MyBaseClass(Category03) myProtocol03Method]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function +[MyBaseClass(Category03) class03ClassMethod]
"+[MyBaseClass(Category03) class03ClassMethod]": ; @"\01+[MyBaseClass(Category03) class03ClassMethod]"
.cfi_startproc
; %bb.0: ; %entry
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function +[MyBaseClass(Category03) MyProtocol03Prop]
"+[MyBaseClass(Category03) MyProtocol03Prop]": ; @"\01+[MyBaseClass(Category03) MyProtocol03Prop]"
.cfi_startproc
; %bb.0: ; %entry
b _OUTLINED_FUNCTION_0
.cfi_endproc
; -- End function
.globl _main ; -- Begin function main
.p2align 2
_main: ; @main
.cfi_startproc
; %bb.0: ; %entry
b _OUTLINED_FUNCTION_0
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function OUTLINED_FUNCTION_0
_OUTLINED_FUNCTION_0: ; @OUTLINED_FUNCTION_0 Tail Call
.cfi_startproc
; %bb.0:
mov w0, #0
ret
.cfi_endproc
; -- End function
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_: ; @OBJC_CLASS_NAME_
.asciz "Category02"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_: ; @OBJC_METH_VAR_NAME_
.asciz "class02InstanceMethod"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_: ; @OBJC_METH_VAR_TYPE_
.asciz "v16@0:8"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.1: ; @OBJC_METH_VAR_NAME_.1
.asciz "myProtocol02Method"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category02"
__OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category02:
.long 24 ; 0x18
.long 2 ; 0x2
.quad l_OBJC_METH_VAR_NAME_
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[MyBaseClass(Category02) class02InstanceMethod]"
.quad l_OBJC_METH_VAR_NAME_.1
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[MyBaseClass(Category02) myProtocol02Method]"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.2: ; @OBJC_METH_VAR_NAME_.2
.asciz "class02ClassMethod"
l_OBJC_METH_VAR_NAME_.3: ; @OBJC_METH_VAR_NAME_.3
.asciz "MyProtocol02Prop"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_.4: ; @OBJC_METH_VAR_TYPE_.4
.asciz "i16@0:8"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category02"
__OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category02:
.long 24 ; 0x18
.long 2 ; 0x2
.quad l_OBJC_METH_VAR_NAME_.2
.quad l_OBJC_METH_VAR_TYPE_
.quad "+[MyBaseClass(Category02) class02ClassMethod]"
.quad l_OBJC_METH_VAR_NAME_.3
.quad l_OBJC_METH_VAR_TYPE_.4
.quad "+[MyBaseClass(Category02) MyProtocol02Prop]"
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_.5: ; @OBJC_CLASS_NAME_.5
.asciz "MyProtocol02"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol02"
__OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol02:
.long 24 ; 0x18
.long 2 ; 0x2
.quad l_OBJC_METH_VAR_NAME_.1
.quad l_OBJC_METH_VAR_TYPE_
.quad 0
.quad l_OBJC_METH_VAR_NAME_.3
.quad l_OBJC_METH_VAR_TYPE_.4
.quad 0
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_PROP_NAME_ATTR_: ; @OBJC_PROP_NAME_ATTR_
.asciz "MyProtocol02Prop"
l_OBJC_PROP_NAME_ATTR_.6: ; @OBJC_PROP_NAME_ATTR_.6
.asciz "Ti,R"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyProtocol02"
__OBJC_$_PROP_LIST_MyProtocol02:
.long 16 ; 0x10
.long 1 ; 0x1
.quad l_OBJC_PROP_NAME_ATTR_
.quad l_OBJC_PROP_NAME_ATTR_.6
.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol02"
__OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol02:
.quad l_OBJC_METH_VAR_TYPE_
.quad l_OBJC_METH_VAR_TYPE_.4
.private_extern __OBJC_PROTOCOL_$_MyProtocol02 ; @"_OBJC_PROTOCOL_$_MyProtocol02"
.section __DATA,__data
.globl __OBJC_PROTOCOL_$_MyProtocol02
.weak_definition __OBJC_PROTOCOL_$_MyProtocol02
.p2align 3, 0x0
__OBJC_PROTOCOL_$_MyProtocol02:
.quad 0
.quad l_OBJC_CLASS_NAME_.5
.quad 0
.quad __OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol02
.quad 0
.quad 0
.quad 0
.quad __OBJC_$_PROP_LIST_MyProtocol02
.long 96 ; 0x60
.long 0 ; 0x0
.quad __OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol02
.quad 0
.quad 0
.private_extern __OBJC_LABEL_PROTOCOL_$_MyProtocol02 ; @"_OBJC_LABEL_PROTOCOL_$_MyProtocol02"
.section __DATA,__objc_protolist,coalesced,no_dead_strip
.globl __OBJC_LABEL_PROTOCOL_$_MyProtocol02
.weak_definition __OBJC_LABEL_PROTOCOL_$_MyProtocol02
.p2align 3, 0x0
__OBJC_LABEL_PROTOCOL_$_MyProtocol02:
.quad __OBJC_PROTOCOL_$_MyProtocol02
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category02"
__OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category02:
.quad 1 ; 0x1
.quad __OBJC_PROTOCOL_$_MyProtocol02
.quad 0
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_PROP_NAME_ATTR_.7: ; @OBJC_PROP_NAME_ATTR_.7
.asciz "Ti,R,D"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyBaseClass_$_Category02"
__OBJC_$_PROP_LIST_MyBaseClass_$_Category02:
.long 16 ; 0x10
.long 1 ; 0x1
.quad l_OBJC_PROP_NAME_ATTR_
.quad l_OBJC_PROP_NAME_ATTR_.7
.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_MyBaseClass_$_Category02"
__OBJC_$_CATEGORY_MyBaseClass_$_Category02:
.quad l_OBJC_CLASS_NAME_
.quad _OBJC_CLASS_$_MyBaseClass
.quad __OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category02
.quad __OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category02
.quad __OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category02
.quad __OBJC_$_PROP_LIST_MyBaseClass_$_Category02
.quad 0
.long 64 ; 0x40
.space 4
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_.8: ; @OBJC_CLASS_NAME_.8
.asciz "Category03"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.9: ; @OBJC_METH_VAR_NAME_.9
.asciz "class03InstanceMethod"
l_OBJC_METH_VAR_NAME_.10: ; @OBJC_METH_VAR_NAME_.10
.asciz "myProtocol03Method"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category03"
__OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category03:
.long 24 ; 0x18
.long 2 ; 0x2
.quad l_OBJC_METH_VAR_NAME_.9
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[MyBaseClass(Category03) class03InstanceMethod]"
.quad l_OBJC_METH_VAR_NAME_.10
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[MyBaseClass(Category03) myProtocol03Method]"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.11: ; @OBJC_METH_VAR_NAME_.11
.asciz "class03ClassMethod"
l_OBJC_METH_VAR_NAME_.12: ; @OBJC_METH_VAR_NAME_.12
.asciz "MyProtocol03Prop"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category03"
__OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category03:
.long 24 ; 0x18
.long 2 ; 0x2
.quad l_OBJC_METH_VAR_NAME_.11
.quad l_OBJC_METH_VAR_TYPE_
.quad "+[MyBaseClass(Category03) class03ClassMethod]"
.quad l_OBJC_METH_VAR_NAME_.12
.quad l_OBJC_METH_VAR_TYPE_.4
.quad "+[MyBaseClass(Category03) MyProtocol03Prop]"
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_.13: ; @OBJC_CLASS_NAME_.13
.asciz "MyProtocol03"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol03"
__OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol03:
.long 24 ; 0x18
.long 2 ; 0x2
.quad l_OBJC_METH_VAR_NAME_.10
.quad l_OBJC_METH_VAR_TYPE_
.quad 0
.quad l_OBJC_METH_VAR_NAME_.12
.quad l_OBJC_METH_VAR_TYPE_.4
.quad 0
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_PROP_NAME_ATTR_.14: ; @OBJC_PROP_NAME_ATTR_.14
.asciz "MyProtocol03Prop"
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyProtocol03"
__OBJC_$_PROP_LIST_MyProtocol03:
.long 16 ; 0x10
.long 1 ; 0x1
.quad l_OBJC_PROP_NAME_ATTR_.14
.quad l_OBJC_PROP_NAME_ATTR_.6
.p2align 3, 0x0 ; @"_OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol03"
__OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol03:
.quad l_OBJC_METH_VAR_TYPE_
.quad l_OBJC_METH_VAR_TYPE_.4
.private_extern __OBJC_PROTOCOL_$_MyProtocol03 ; @"_OBJC_PROTOCOL_$_MyProtocol03"
.section __DATA,__data
.globl __OBJC_PROTOCOL_$_MyProtocol03
.weak_definition __OBJC_PROTOCOL_$_MyProtocol03
.p2align 3, 0x0
__OBJC_PROTOCOL_$_MyProtocol03:
.quad 0
.quad l_OBJC_CLASS_NAME_.13
.quad 0
.quad __OBJC_$_PROTOCOL_INSTANCE_METHODS_MyProtocol03
.quad 0
.quad 0
.quad 0
.quad __OBJC_$_PROP_LIST_MyProtocol03
.long 96 ; 0x60
.long 0 ; 0x0
.quad __OBJC_$_PROTOCOL_METHOD_TYPES_MyProtocol03
.quad 0
.quad 0
.private_extern __OBJC_LABEL_PROTOCOL_$_MyProtocol03 ; @"_OBJC_LABEL_PROTOCOL_$_MyProtocol03"
.section __DATA,__objc_protolist,coalesced,no_dead_strip
.globl __OBJC_LABEL_PROTOCOL_$_MyProtocol03
.weak_definition __OBJC_LABEL_PROTOCOL_$_MyProtocol03
.p2align 3, 0x0
__OBJC_LABEL_PROTOCOL_$_MyProtocol03:
.quad __OBJC_PROTOCOL_$_MyProtocol03
.section __DATA,__objc_const
.p2align 3, 0x0 ; @"_OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category03"
__OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category03:
.quad 1 ; 0x1
.quad __OBJC_PROTOCOL_$_MyProtocol03
.quad 0
.p2align 3, 0x0 ; @"_OBJC_$_PROP_LIST_MyBaseClass_$_Category03"
__OBJC_$_PROP_LIST_MyBaseClass_$_Category03:
.long 16 ; 0x10
.long 1 ; 0x1
.quad l_OBJC_PROP_NAME_ATTR_.14
.quad l_OBJC_PROP_NAME_ATTR_.7
.p2align 3, 0x0 ; @"_OBJC_$_CATEGORY_MyBaseClass_$_Category03"
__OBJC_$_CATEGORY_MyBaseClass_$_Category03:
.quad l_OBJC_CLASS_NAME_.8
.quad _OBJC_CLASS_$_MyBaseClass
.quad __OBJC_$_CATEGORY_INSTANCE_METHODS_MyBaseClass_$_Category03
.quad __OBJC_$_CATEGORY_CLASS_METHODS_MyBaseClass_$_Category03
.quad __OBJC_CATEGORY_PROTOCOLS_$_MyBaseClass_$_Category03
.quad __OBJC_$_PROP_LIST_MyBaseClass_$_Category03
.quad 0
.long 64 ; 0x40
.space 4
.section __DATA,__objc_catlist,regular,no_dead_strip
.p2align 3, 0x0 ; @"OBJC_LABEL_CATEGORY_$"
l_OBJC_LABEL_CATEGORY_$:
.quad __OBJC_$_CATEGORY_MyBaseClass_$_Category02
.quad __OBJC_$_CATEGORY_MyBaseClass_$_Category03
.no_dead_strip __OBJC_LABEL_PROTOCOL_$_MyProtocol02
.no_dead_strip __OBJC_LABEL_PROTOCOL_$_MyProtocol03
.no_dead_strip __OBJC_PROTOCOL_$_MyProtocol02
.no_dead_strip __OBJC_PROTOCOL_$_MyProtocol03
.section __DATA,__objc_imageinfo,regular,no_dead_strip
L_OBJC_IMAGE_INFO:
.long 0
.long 96
.subsections_via_symbols