1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
// RUN: %clang -c -o %t %s
// RUN: %llvm_jitlink -preload libobjc.A.dylib %t
//
// REQUIRES: jit-compatible-osx-swift-runtime
//
// Test that Objective-C class and instance methods work.
.section __TEXT,__text,regular,pure_instructions
.build_version macos, 12, 0 sdk_version 12, 0
.p2align 2 ; -- Begin function +[ZeroGen classZero]
"+[ZeroGen classZero]": ; @"\01+[ZeroGen classZero]"
.cfi_startproc
; %bb.0:
sub sp, sp, #16 ; =16
.cfi_def_cfa_offset 16
str x0, [sp, #8]
str x1, [sp]
mov w0, #0
add sp, sp, #16 ; =16
ret
.cfi_endproc
; -- End function
.p2align 2 ; -- Begin function -[ZeroGen objZero]
"-[ZeroGen objZero]": ; @"\01-[ZeroGen objZero]"
.cfi_startproc
; %bb.0:
sub sp, sp, #16 ; =16
.cfi_def_cfa_offset 16
str x0, [sp, #8]
str x1, [sp]
mov w0, #0
add sp, sp, #16 ; =16
ret
.cfi_endproc
; -- End function
.globl _main ; -- Begin function main
.p2align 2
_main: ; @main
.cfi_startproc
; %bb.0:
sub sp, sp, #48 ; =48
stp x29, x30, [sp, #32] ; 16-byte Folded Spill
add x29, sp, #32 ; =32
.cfi_def_cfa w29, 16
.cfi_offset w30, -8
.cfi_offset w29, -16
stur wzr, [x29, #-4]
adrp x8, _OBJC_CLASSLIST_REFERENCES_$_@PAGE
str x8, [sp, #8] ; 8-byte Folded Spill
ldr x0, [x8, _OBJC_CLASSLIST_REFERENCES_$_@PAGEOFF]
bl _objc_alloc_init
ldr x8, [sp, #8] ; 8-byte Folded Reload
str x0, [sp, #16]
ldr x0, [x8, _OBJC_CLASSLIST_REFERENCES_$_@PAGEOFF]
adrp x8, _OBJC_SELECTOR_REFERENCES_@PAGE
ldr x1, [x8, _OBJC_SELECTOR_REFERENCES_@PAGEOFF]
bl _objc_msgSend
cbz w0, LBB2_2
; %bb.1:
mov w8, #1
stur w8, [x29, #-4]
b LBB2_5
LBB2_2:
ldr x0, [sp, #16]
adrp x8, _OBJC_SELECTOR_REFERENCES_.2@PAGE
ldr x1, [x8, _OBJC_SELECTOR_REFERENCES_.2@PAGEOFF]
bl _objc_msgSend
cbz w0, LBB2_4
; %bb.3:
mov w8, #1
stur w8, [x29, #-4]
b LBB2_5
LBB2_4:
stur wzr, [x29, #-4]
LBB2_5:
ldur w0, [x29, #-4]
ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
add sp, sp, #48 ; =48
ret
.cfi_endproc
; -- End function
.section __TEXT,__objc_classname,cstring_literals
l_OBJC_CLASS_NAME_: ; @OBJC_CLASS_NAME_
.asciz "ZeroGen"
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_: ; @OBJC_METH_VAR_NAME_
.asciz "classZero"
.section __TEXT,__objc_methtype,cstring_literals
l_OBJC_METH_VAR_TYPE_: ; @OBJC_METH_VAR_TYPE_
.asciz "i16@0:8"
.section __DATA,__objc_const
.p2align 3 ; @"_OBJC_$_CLASS_METHODS_ZeroGen"
__OBJC_$_CLASS_METHODS_ZeroGen:
.long 24 ; 0x18
.long 1 ; 0x1
.quad l_OBJC_METH_VAR_NAME_
.quad l_OBJC_METH_VAR_TYPE_
.quad "+[ZeroGen classZero]"
.p2align 3 ; @"_OBJC_METACLASS_RO_$_ZeroGen"
__OBJC_METACLASS_RO_$_ZeroGen:
.long 1 ; 0x1
.long 40 ; 0x28
.long 40 ; 0x28
.space 4
.quad 0
.quad l_OBJC_CLASS_NAME_
.quad __OBJC_$_CLASS_METHODS_ZeroGen
.quad 0
.quad 0
.quad 0
.quad 0
.section __DATA,__objc_data
.globl _OBJC_METACLASS_$_ZeroGen ; @"OBJC_METACLASS_$_ZeroGen"
.p2align 3
_OBJC_METACLASS_$_ZeroGen:
.quad _OBJC_METACLASS_$_NSObject
.quad _OBJC_METACLASS_$_NSObject
.quad __objc_empty_cache
.quad 0
.quad __OBJC_METACLASS_RO_$_ZeroGen
.section __TEXT,__objc_methname,cstring_literals
l_OBJC_METH_VAR_NAME_.1: ; @OBJC_METH_VAR_NAME_.1
.asciz "objZero"
.section __DATA,__objc_const
.p2align 3 ; @"_OBJC_$_INSTANCE_METHODS_ZeroGen"
__OBJC_$_INSTANCE_METHODS_ZeroGen:
.long 24 ; 0x18
.long 1 ; 0x1
.quad l_OBJC_METH_VAR_NAME_.1
.quad l_OBJC_METH_VAR_TYPE_
.quad "-[ZeroGen objZero]"
.p2align 3 ; @"_OBJC_CLASS_RO_$_ZeroGen"
__OBJC_CLASS_RO_$_ZeroGen:
.long 0 ; 0x0
.long 8 ; 0x8
.long 8 ; 0x8
.space 4
.quad 0
.quad l_OBJC_CLASS_NAME_
.quad __OBJC_$_INSTANCE_METHODS_ZeroGen
.quad 0
.quad 0
.quad 0
.quad 0
.section __DATA,__objc_data
.globl _OBJC_CLASS_$_ZeroGen ; @"OBJC_CLASS_$_ZeroGen"
.p2align 3
_OBJC_CLASS_$_ZeroGen:
.quad _OBJC_METACLASS_$_ZeroGen
.quad _OBJC_CLASS_$_NSObject
.quad __objc_empty_cache
.quad 0
.quad __OBJC_CLASS_RO_$_ZeroGen
.section __DATA,__objc_classrefs,regular,no_dead_strip
.p2align 3 ; @"OBJC_CLASSLIST_REFERENCES_$_"
_OBJC_CLASSLIST_REFERENCES_$_:
.quad _OBJC_CLASS_$_ZeroGen
.section __DATA,__objc_selrefs,literal_pointers,no_dead_strip
.p2align 3 ; @OBJC_SELECTOR_REFERENCES_
_OBJC_SELECTOR_REFERENCES_:
.quad l_OBJC_METH_VAR_NAME_
.p2align 3 ; @OBJC_SELECTOR_REFERENCES_.2
_OBJC_SELECTOR_REFERENCES_.2:
.quad l_OBJC_METH_VAR_NAME_.1
.section __DATA,__objc_classlist,regular,no_dead_strip
.p2align 3 ; @"OBJC_LABEL_CLASS_$"
l_OBJC_LABEL_CLASS_$:
.quad _OBJC_CLASS_$_ZeroGen
.section __DATA,__objc_imageinfo,regular,no_dead_strip
L_OBJC_IMAGE_INFO:
.long 0
.long 64
.subsections_via_symbols
|