]> git.saurik.com Git - apple/objc4.git/blob - test/swift-class-def.m
objc4-756.2.tar.gz
[apple/objc4.git] / test / swift-class-def.m
1 #include <sys/cdefs.h>
2
3 #if __LP64__
4 # define PTR " .quad "
5 # define PTRSIZE "8"
6 # define LOGPTRSIZE "3"
7 #else
8 # define PTR " .long "
9 # define PTRSIZE "4"
10 # define LOGPTRSIZE "2"
11 #endif
12
13 #if __has_feature(ptrauth_calls)
14 # define SIGNED_METHOD_LIST_IMP "@AUTH(ia,0,addr) "
15 #else
16 # define SIGNED_METHOD_LIST_IMP
17 #endif
18
19 #define str(x) #x
20 #define str2(x) str(x)
21
22 // Swift metadata initializers. Define these in the test.
23 EXTERN_C Class initSuper(Class cls, void *arg);
24 EXTERN_C Class initSub(Class cls, void *arg);
25
26 @interface SwiftSuper : NSObject @end
27 @interface SwiftSub : SwiftSuper @end
28
29 __BEGIN_DECLS
30 // not id to avoid ARC operations because the class doesn't implement RR methods
31 void* nop(void* self) { return self; }
32 __END_DECLS
33
34 asm(
35 ".globl _OBJC_CLASS_$_SwiftSuper \n"
36 ".section __DATA,__objc_data \n"
37 ".align 3 \n"
38 "_OBJC_CLASS_$_SwiftSuper: \n"
39 PTR "_OBJC_METACLASS_$_SwiftSuper \n"
40 PTR "_OBJC_CLASS_$_NSObject \n"
41 PTR "__objc_empty_cache \n"
42 PTR "0 \n"
43 PTR "L_ro + 2 \n"
44 // pad to OBJC_MAX_CLASS_SIZE
45 PTR "0 \n"
46 PTR "0 \n"
47 PTR "0 \n"
48 PTR "0 \n"
49 PTR "0 \n"
50 PTR "0 \n"
51 PTR "0 \n"
52 PTR "0 \n"
53 PTR "0 \n"
54 PTR "0 \n"
55 PTR "0 \n"
56 PTR "0 \n"
57 PTR "0 \n"
58 PTR "0 \n"
59 PTR "0 \n"
60 PTR "0 \n"
61 PTR "0 \n"
62 PTR "0 \n"
63 PTR "0 \n"
64 PTR "0 \n"
65 PTR "0 \n"
66 PTR "0 \n"
67 PTR "0 \n"
68 PTR "0 \n"
69 PTR "0 \n"
70 PTR "0 \n"
71 PTR "0 \n"
72 ""
73 "_OBJC_METACLASS_$_SwiftSuper: \n"
74 PTR "_OBJC_METACLASS_$_NSObject \n"
75 PTR "_OBJC_METACLASS_$_NSObject \n"
76 PTR "__objc_empty_cache \n"
77 PTR "0 \n"
78 PTR "L_meta_ro \n"
79 // pad to OBJC_MAX_CLASS_SIZE
80 PTR "0 \n"
81 PTR "0 \n"
82 PTR "0 \n"
83 PTR "0 \n"
84 PTR "0 \n"
85 PTR "0 \n"
86 PTR "0 \n"
87 PTR "0 \n"
88 PTR "0 \n"
89 PTR "0 \n"
90 PTR "0 \n"
91 PTR "0 \n"
92 PTR "0 \n"
93 PTR "0 \n"
94 PTR "0 \n"
95 PTR "0 \n"
96 PTR "0 \n"
97 PTR "0 \n"
98 PTR "0 \n"
99 PTR "0 \n"
100 PTR "0 \n"
101 PTR "0 \n"
102 PTR "0 \n"
103 PTR "0 \n"
104 PTR "0 \n"
105 PTR "0 \n"
106 PTR "0 \n"
107 ""
108 "L_ro: \n"
109 ".long (1<<6)\n"
110 ".long 0 \n"
111 ".long "PTRSIZE" \n"
112 #if __LP64__
113 ".long 0 \n"
114 #endif
115 PTR "0 \n"
116 PTR "L_super_name \n"
117 PTR "L_good_methods \n"
118 PTR "0 \n"
119 PTR "L_super_ivars \n"
120 PTR "0 \n"
121 PTR "0 \n"
122 PTR "_initSuper" SIGNED_METHOD_LIST_IMP "\n"
123 ""
124 "L_meta_ro: \n"
125 ".long 1 \n"
126 ".long 40 \n"
127 ".long 40 \n"
128 #if __LP64__
129 ".long 0 \n"
130 #endif
131 PTR "0 \n"
132 PTR "L_super_name \n"
133 PTR "L_good_methods \n"
134 PTR "0 \n"
135 PTR "0 \n"
136 PTR "0 \n"
137 PTR "0 \n"
138
139 ".globl _OBJC_CLASS_$_SwiftSub \n"
140 ".section __DATA,__objc_data \n"
141 ".align 3 \n"
142 "_OBJC_CLASS_$_SwiftSub: \n"
143 PTR "_OBJC_METACLASS_$_SwiftSub \n"
144 PTR "_OBJC_CLASS_$_SwiftSuper \n"
145 PTR "__objc_empty_cache \n"
146 PTR "0 \n"
147 PTR "L_sub_ro + 2 \n"
148 // pad to OBJC_MAX_CLASS_SIZE
149 PTR "0 \n"
150 PTR "0 \n"
151 PTR "0 \n"
152 PTR "0 \n"
153 PTR "0 \n"
154 PTR "0 \n"
155 PTR "0 \n"
156 PTR "0 \n"
157 PTR "0 \n"
158 PTR "0 \n"
159 PTR "0 \n"
160 PTR "0 \n"
161 PTR "0 \n"
162 PTR "0 \n"
163 PTR "0 \n"
164 PTR "0 \n"
165 PTR "0 \n"
166 PTR "0 \n"
167 PTR "0 \n"
168 PTR "0 \n"
169 PTR "0 \n"
170 PTR "0 \n"
171 PTR "0 \n"
172 PTR "0 \n"
173 PTR "0 \n"
174 PTR "0 \n"
175 PTR "0 \n"
176 ""
177 "_OBJC_METACLASS_$_SwiftSub: \n"
178 PTR "_OBJC_METACLASS_$_NSObject \n"
179 PTR "_OBJC_METACLASS_$_SwiftSuper \n"
180 PTR "__objc_empty_cache \n"
181 PTR "0 \n"
182 PTR "L_sub_meta_ro \n"
183 // pad to OBJC_MAX_CLASS_SIZE
184 PTR "0 \n"
185 PTR "0 \n"
186 PTR "0 \n"
187 PTR "0 \n"
188 PTR "0 \n"
189 PTR "0 \n"
190 PTR "0 \n"
191 PTR "0 \n"
192 PTR "0 \n"
193 PTR "0 \n"
194 PTR "0 \n"
195 PTR "0 \n"
196 PTR "0 \n"
197 PTR "0 \n"
198 PTR "0 \n"
199 PTR "0 \n"
200 PTR "0 \n"
201 PTR "0 \n"
202 PTR "0 \n"
203 PTR "0 \n"
204 PTR "0 \n"
205 PTR "0 \n"
206 PTR "0 \n"
207 PTR "0 \n"
208 PTR "0 \n"
209 PTR "0 \n"
210 PTR "0 \n"
211 ""
212 "L_sub_ro: \n"
213 ".long (1<<6)\n"
214 ".long 0 \n"
215 ".long "PTRSIZE" \n"
216 #if __LP64__
217 ".long 0 \n"
218 #endif
219 PTR "0 \n"
220 PTR "L_sub_name \n"
221 PTR "L_good_methods \n"
222 PTR "0 \n"
223 PTR "L_sub_ivars \n"
224 PTR "0 \n"
225 PTR "0 \n"
226 PTR "_initSub" SIGNED_METHOD_LIST_IMP "\n"
227 ""
228 "L_sub_meta_ro: \n"
229 ".long 1 \n"
230 ".long 40 \n"
231 ".long 40 \n"
232 #if __LP64__
233 ".long 0 \n"
234 #endif
235 PTR "0 \n"
236 PTR "L_sub_name \n"
237 PTR "L_good_methods \n"
238 PTR "0 \n"
239 PTR "0 \n"
240 PTR "0 \n"
241 PTR "0 \n"
242
243 "L_good_methods: \n"
244 ".long 3*"PTRSIZE" \n"
245 ".long 1 \n"
246 PTR "L_self \n"
247 PTR "L_self \n"
248 PTR "_nop" SIGNED_METHOD_LIST_IMP "\n"
249
250 "L_super_ivars: \n"
251 ".long 4*"PTRSIZE" \n"
252 ".long 1 \n"
253 PTR "L_super_ivar_offset \n"
254 PTR "L_super_ivar_name \n"
255 PTR "L_super_ivar_type \n"
256 ".long "LOGPTRSIZE" \n"
257 ".long "PTRSIZE" \n"
258
259 "L_sub_ivars: \n"
260 ".long 4*"PTRSIZE" \n"
261 ".long 1 \n"
262 PTR "L_sub_ivar_offset \n"
263 PTR "L_sub_ivar_name \n"
264 PTR "L_sub_ivar_type \n"
265 ".long "LOGPTRSIZE" \n"
266 ".long "PTRSIZE" \n"
267
268 "L_super_ivar_offset: \n"
269 ".long 0 \n"
270 "L_sub_ivar_offset: \n"
271 ".long "PTRSIZE" \n"
272
273 ".cstring \n"
274 "L_super_name: .ascii \"SwiftSuper\\0\" \n"
275 "L_sub_name: .ascii \"SwiftSub\\0\" \n"
276 "L_load: .ascii \"load\\0\" \n"
277 "L_self: .ascii \"self\\0\" \n"
278 "L_super_ivar_name: .ascii \"super_ivar\\0\" \n"
279 "L_super_ivar_type: .ascii \"c\\0\" \n"
280 "L_sub_ivar_name: .ascii \"sub_ivar\\0\" \n"
281 "L_sub_ivar_type: .ascii \"@\\0\" \n"
282
283
284 ".section __DATA,__objc_classlist \n"
285 PTR "_OBJC_CLASS_$_SwiftSuper \n"
286 PTR "_OBJC_CLASS_$_SwiftSub \n"
287
288 ".text \n"
289 );
290
291 void fn(void) { }