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

source code of compiler-rt/test/orc/TestCases/Darwin/arm64/trivial-objc-methods.S