]> git.saurik.com Git - apple/objc4.git/blob - test/evil-class-def.m
objc4-647.tar.gz
[apple/objc4.git] / test / evil-class-def.m
1 #if __OBJC2__
2
3 #include <mach/shared_region.h>
4
5 #if __LP64__
6 # define PTR " .quad "
7 # define PTRSIZE "8"
8 # define LOGPTRSIZE "3"
9 #else
10 # define PTR " .long "
11 # define PTRSIZE "4"
12 # define LOGPTRSIZE "2"
13 #endif
14
15 #define str(x) #x
16 #define str2(x) str(x)
17
18 __BEGIN_DECLS
19 id nop(id self) { return self; }
20 __END_DECLS
21
22 asm(
23 ".globl _OBJC_CLASS_$_Super \n"
24 ".section __DATA,__objc_data \n"
25 ".align 3 \n"
26 "_OBJC_CLASS_$_Super: \n"
27 PTR "_OBJC_METACLASS_$_Super \n"
28 PTR "0 \n"
29 PTR "__objc_empty_cache \n"
30 PTR "0 \n"
31 PTR "L_ro \n"
32 // pad to OBJC_MAX_CLASS_SIZE
33 PTR "0 \n"
34 PTR "0 \n"
35 PTR "0 \n"
36 PTR "0 \n"
37 PTR "0 \n"
38 PTR "0 \n"
39 PTR "0 \n"
40 PTR "0 \n"
41 PTR "0 \n"
42 PTR "0 \n"
43 PTR "0 \n"
44 PTR "0 \n"
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 ""
61 "_OBJC_METACLASS_$_Super: \n"
62 PTR "_OBJC_METACLASS_$_Super \n"
63 PTR "_OBJC_CLASS_$_Super \n"
64 PTR "__objc_empty_cache \n"
65 PTR "0 \n"
66 PTR "L_meta_ro \n"
67 // pad to OBJC_MAX_CLASS_SIZE
68 PTR "0 \n"
69 PTR "0 \n"
70 PTR "0 \n"
71 PTR "0 \n"
72 PTR "0 \n"
73 PTR "0 \n"
74 PTR "0 \n"
75 PTR "0 \n"
76 PTR "0 \n"
77 PTR "0 \n"
78 PTR "0 \n"
79 PTR "0 \n"
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 ""
96 "L_ro: \n"
97 ".long 2 \n"
98 ".long 0 \n"
99 ".long "PTRSIZE" \n"
100 #if __LP64__
101 ".long 0 \n"
102 #endif
103 PTR "0 \n"
104 PTR "L_super_name \n"
105 #if EVIL_SUPER
106 PTR "L_evil_methods \n"
107 #else
108 PTR "L_good_methods \n"
109 #endif
110 PTR "0 \n"
111 PTR "L_super_ivars \n"
112 PTR "0 \n"
113 PTR "0 \n"
114 ""
115 "L_meta_ro: \n"
116 ".long 3 \n"
117 ".long 40 \n"
118 ".long 40 \n"
119 #if __LP64__
120 ".long 0 \n"
121 #endif
122 PTR "0 \n"
123 PTR "L_super_name \n"
124 #if EVIL_SUPER_META
125 PTR "L_evil_methods \n"
126 #else
127 PTR "L_good_methods \n"
128 #endif
129 PTR "0 \n"
130 PTR "0 \n"
131 PTR "0 \n"
132 PTR "0 \n"
133
134 ".globl _OBJC_CLASS_$_Sub \n"
135 ".section __DATA,__objc_data \n"
136 ".align 3 \n"
137 "_OBJC_CLASS_$_Sub: \n"
138 PTR "_OBJC_METACLASS_$_Sub \n"
139 PTR "_OBJC_CLASS_$_Super \n"
140 PTR "__objc_empty_cache \n"
141 PTR "0 \n"
142 PTR "L_sub_ro \n"
143 // pad to OBJC_MAX_CLASS_SIZE
144 PTR "0 \n"
145 PTR "0 \n"
146 PTR "0 \n"
147 PTR "0 \n"
148 PTR "0 \n"
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 ""
172 "_OBJC_METACLASS_$_Sub: \n"
173 PTR "_OBJC_METACLASS_$_Super \n"
174 PTR "_OBJC_METACLASS_$_Super \n"
175 PTR "__objc_empty_cache \n"
176 PTR "0 \n"
177 PTR "L_sub_meta_ro \n"
178 // pad to OBJC_MAX_CLASS_SIZE
179 PTR "0 \n"
180 PTR "0 \n"
181 PTR "0 \n"
182 PTR "0 \n"
183 PTR "0 \n"
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 ""
207 "L_sub_ro: \n"
208 ".long 2 \n"
209 ".long 0 \n"
210 ".long "PTRSIZE" \n"
211 #if __LP64__
212 ".long 0 \n"
213 #endif
214 PTR "0 \n"
215 PTR "L_sub_name \n"
216 #if EVIL_SUB
217 PTR "L_evil_methods \n"
218 #else
219 PTR "L_good_methods \n"
220 #endif
221 PTR "0 \n"
222 PTR "L_sub_ivars \n"
223 PTR "0 \n"
224 PTR "0 \n"
225 ""
226 "L_sub_meta_ro: \n"
227 ".long 3 \n"
228 ".long 40 \n"
229 ".long 40 \n"
230 #if __LP64__
231 ".long 0 \n"
232 #endif
233 PTR "0 \n"
234 PTR "L_sub_name \n"
235 #if EVIL_SUB_META
236 PTR "L_evil_methods \n"
237 #else
238 PTR "L_good_methods \n"
239 #endif
240 PTR "0 \n"
241 PTR "0 \n"
242 PTR "0 \n"
243 PTR "0 \n"
244
245 "L_evil_methods: \n"
246 ".long 3*"PTRSIZE" \n"
247 ".long 1 \n"
248 PTR "L_load \n"
249 PTR "L_load \n"
250 PTR str2(SHARED_REGION_BASE+SHARED_REGION_SIZE-PAGE_MAX_SIZE) " \n"
251
252 "L_good_methods: \n"
253 ".long 3*"PTRSIZE" \n"
254 ".long 2 \n"
255 PTR "L_load \n"
256 PTR "L_load \n"
257 PTR "_nop \n"
258 PTR "L_self \n"
259 PTR "L_self \n"
260 PTR "_nop \n"
261
262 "L_super_ivars: \n"
263 ".long 4*"PTRSIZE" \n"
264 ".long 1 \n"
265 PTR "L_super_ivar_offset \n"
266 PTR "L_super_ivar_name \n"
267 PTR "L_super_ivar_type \n"
268 ".long "LOGPTRSIZE" \n"
269 ".long "PTRSIZE" \n"
270
271 "L_sub_ivars: \n"
272 ".long 4*"PTRSIZE" \n"
273 ".long 1 \n"
274 PTR "L_sub_ivar_offset \n"
275 PTR "L_sub_ivar_name \n"
276 PTR "L_sub_ivar_type \n"
277 ".long "LOGPTRSIZE" \n"
278 ".long "PTRSIZE" \n"
279
280 "L_super_ivar_offset: \n"
281 ".long 0 \n"
282 "L_sub_ivar_offset: \n"
283 ".long "PTRSIZE" \n"
284
285 ".cstring \n"
286 "L_super_name: .ascii \"Super\\0\" \n"
287 "L_sub_name: .ascii \"Sub\\0\" \n"
288 "L_load: .ascii \"load\\0\" \n"
289 "L_self: .ascii \"self\\0\" \n"
290 "L_super_ivar_name: .ascii \"super_ivar\\0\" \n"
291 "L_super_ivar_type: .ascii \"c\\0\" \n"
292 "L_sub_ivar_name: .ascii \"sub_ivar\\0\" \n"
293 "L_sub_ivar_type: .ascii \"@\\0\" \n"
294
295
296 ".section __DATA,__objc_classlist \n"
297 #if !OMIT_SUPER
298 PTR "_OBJC_CLASS_$_Super \n"
299 #endif
300 #if !OMIT_SUB
301 PTR "_OBJC_CLASS_$_Sub \n"
302 #endif
303
304 ".section __DATA,__objc_nlclslist \n"
305 #if !OMIT_NL_SUPER
306 PTR "_OBJC_CLASS_$_Super \n"
307 #endif
308 #if !OMIT_NL_SUB
309 PTR "_OBJC_CLASS_$_Sub \n"
310 #endif
311
312 ".text \n"
313 );
314
315 // __OBJC2__
316 #endif
317
318 void fn(void) { }