]> git.saurik.com Git - apple/objc4.git/blob - test/evil-class-def.m
objc4-532.2.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 #else
8 # define PTR " .long "
9 #endif
10
11 #define str(x) #x
12 #define str2(x) str(x)
13
14 __BEGIN_DECLS
15 void nop(void) { }
16 __END_DECLS
17
18 asm(
19 ".globl _OBJC_CLASS_$_Super \n"
20 ".section __DATA,__objc_data \n"
21 ".align 3 \n"
22 "_OBJC_CLASS_$_Super: \n"
23 PTR "_OBJC_METACLASS_$_Super \n"
24 PTR "0 \n"
25 PTR "__objc_empty_cache \n"
26 PTR "__objc_empty_vtable \n"
27 PTR "L_ro \n"
28 ""
29 "_OBJC_METACLASS_$_Super: \n"
30 PTR "_OBJC_METACLASS_$_Super \n"
31 PTR "_OBJC_CLASS_$_Super \n"
32 PTR "__objc_empty_cache \n"
33 PTR "__objc_empty_vtable \n"
34 PTR "L_meta_ro \n"
35 ""
36 "L_ro: \n"
37 ".long 2 \n"
38 ".long 0 \n"
39 ".long 0 \n"
40 #if __LP64__
41 ".long 0 \n"
42 #endif
43 PTR "0 \n"
44 PTR "L_super_name \n"
45 #if EVIL_SUPER
46 PTR "L_evil_methods \n"
47 #else
48 PTR "L_good_methods \n"
49 #endif
50 PTR "0 \n"
51 PTR "0 \n"
52 PTR "0 \n"
53 PTR "0 \n"
54 ""
55 "L_meta_ro: \n"
56 ".long 3 \n"
57 ".long 40 \n"
58 ".long 40 \n"
59 #if __LP64__
60 ".long 0 \n"
61 #endif
62 PTR "0 \n"
63 PTR "L_super_name \n"
64 #if EVIL_SUPER_META
65 PTR "L_evil_methods \n"
66 #else
67 PTR "L_good_methods \n"
68 #endif
69 PTR "0 \n"
70 PTR "0 \n"
71 PTR "0 \n"
72 PTR "0 \n"
73
74 ".globl _OBJC_CLASS_$_Sub \n"
75 ".section __DATA,__objc_data \n"
76 ".align 3 \n"
77 "_OBJC_CLASS_$_Sub: \n"
78 PTR "_OBJC_METACLASS_$_Sub \n"
79 PTR "_OBJC_CLASS_$_Super \n"
80 PTR "__objc_empty_cache \n"
81 PTR "__objc_empty_vtable \n"
82 PTR "L_sub_ro \n"
83 ""
84 "_OBJC_METACLASS_$_Sub: \n"
85 PTR "_OBJC_METACLASS_$_Super \n"
86 PTR "_OBJC_METACLASS_$_Super \n"
87 PTR "__objc_empty_cache \n"
88 PTR "__objc_empty_vtable \n"
89 PTR "L_sub_meta_ro \n"
90 ""
91 "L_sub_ro: \n"
92 ".long 2 \n"
93 ".long 0 \n"
94 ".long 0 \n"
95 #if __LP64__
96 ".long 0 \n"
97 #endif
98 PTR "0 \n"
99 PTR "L_sub_name \n"
100 #if EVIL_SUB
101 PTR "L_evil_methods \n"
102 #else
103 PTR "L_good_methods \n"
104 #endif
105 PTR "0 \n"
106 PTR "0 \n"
107 PTR "0 \n"
108 PTR "0 \n"
109 ""
110 "L_sub_meta_ro: \n"
111 ".long 3 \n"
112 ".long 40 \n"
113 ".long 40 \n"
114 #if __LP64__
115 ".long 0 \n"
116 #endif
117 PTR "0 \n"
118 PTR "L_sub_name \n"
119 #if EVIL_SUB_META
120 PTR "L_evil_methods \n"
121 #else
122 PTR "L_good_methods \n"
123 #endif
124 PTR "0 \n"
125 PTR "0 \n"
126 PTR "0 \n"
127 PTR "0 \n"
128
129 "L_evil_methods: \n"
130 ".long 24 \n"
131 ".long 1 \n"
132 PTR "L_load \n"
133 PTR "L_load \n"
134 PTR str2(SHARED_REGION_BASE+SHARED_REGION_SIZE-0x1000) " \n"
135
136 "L_good_methods: \n"
137 ".long 24 \n"
138 ".long 1 \n"
139 PTR "L_load \n"
140 PTR "L_load \n"
141 PTR "_nop \n"
142
143 ".cstring \n"
144 "L_super_name: .ascii \"Super\\0\" \n"
145 "L_sub_name: .ascii \"Sub\\0\" \n"
146 "L_load: .ascii \"load\\0\" \n"
147
148
149 ".section __DATA,__objc_classlist \n"
150 #if !OMIT_SUPER
151 PTR "_OBJC_CLASS_$_Super \n"
152 #endif
153 #if !OMIT_SUB
154 PTR "_OBJC_CLASS_$_Sub \n"
155 #endif
156
157 ".section __DATA,__objc_nlclslist \n"
158 #if !OMIT_NL_SUPER
159 PTR "_OBJC_CLASS_$_Super \n"
160 #endif
161 #if !OMIT_NL_SUB
162 PTR "_OBJC_CLASS_$_Sub \n"
163 #endif
164
165 ".text \n"
166 );
167
168 // __OBJC2__
169 #endif
170
171 void fn(void) { }