4 #include <mach/vm_param.h>
9 .globl __objc_blockTrampolineImpl
10 .globl __objc_blockTrampolineStart
11 .globl __objc_blockTrampolineLast
13 // Trampoline machinery assumes the trampolines are Thumb function pointers
20 // Exported symbols are not marked as functions.
21 // The trampoline construction code assumes that the Thumb bit is not set.
22 .thumb_func L__objc_blockTrampolineImpl_func
25 __objc_blockTrampolineImpl:
26 L__objc_blockTrampolineImpl_func:
29 r12 == pc of trampoline's first instruction + PC bias
30 lr == original return address
33 mov r1, r0 // _cmd = self
35 // Trampoline's data is two pages before the trampoline text.
36 // Also correct PC bias of 4 bytes.
37 sub r12, # 2*PAGE_MAX_SIZE
38 ldr r0, [r12, #-4] // self = block object
39 ldr pc, [r0, #12] // tail call block->invoke
42 .macro TrampolineEntry
44 b L__objc_blockTrampolineImpl_func
48 .macro TrampolineEntryX16
70 .macro TrampolineEntryX256
93 __objc_blockTrampolineStart:
94 // 2048-4 trampolines to fill 16K page
136 __objc_blockTrampolineLast:
147 .globl __objc_blockTrampolineImpl_stret
148 .globl __objc_blockTrampolineStart_stret
149 .globl __objc_blockTrampolineLast_stret
151 // Trampoline machinery assumes the trampolines are Thumb function pointers
158 // Exported symbols are not marked as functions.
159 // The trampoline construction code assumes that the Thumb bit is not set.
160 .thumb_func L__objc_blockTrampolineImpl_stret_func
162 .align PAGE_MAX_SHIFT
163 __objc_blockTrampolineImpl_stret:
164 L__objc_blockTrampolineImpl_stret_func:
167 r12 == pc of trampoline's first instruction + PC bias
168 lr == original return address
171 mov r2, r1 // _cmd = self
173 // Trampoline's data is three pages before the trampoline text.
174 // Also correct PC bias of 4 bytes.
175 sub r12, # 3*PAGE_MAX_SIZE
176 ldr r1, [r12, #-4] // self = block object
177 ldr pc, [r1, #12] // tail call block->invoke
180 .macro TrampolineEntry_stret
182 b L__objc_blockTrampolineImpl_stret_func
186 .macro TrampolineEntryX16_stret
187 TrampolineEntry_stret
188 TrampolineEntry_stret
189 TrampolineEntry_stret
190 TrampolineEntry_stret
192 TrampolineEntry_stret
193 TrampolineEntry_stret
194 TrampolineEntry_stret
195 TrampolineEntry_stret
197 TrampolineEntry_stret
198 TrampolineEntry_stret
199 TrampolineEntry_stret
200 TrampolineEntry_stret
202 TrampolineEntry_stret
203 TrampolineEntry_stret
204 TrampolineEntry_stret
205 TrampolineEntry_stret
208 .macro TrampolineEntryX256_stret
209 TrampolineEntryX16_stret
210 TrampolineEntryX16_stret
211 TrampolineEntryX16_stret
212 TrampolineEntryX16_stret
214 TrampolineEntryX16_stret
215 TrampolineEntryX16_stret
216 TrampolineEntryX16_stret
217 TrampolineEntryX16_stret
219 TrampolineEntryX16_stret
220 TrampolineEntryX16_stret
221 TrampolineEntryX16_stret
222 TrampolineEntryX16_stret
224 TrampolineEntryX16_stret
225 TrampolineEntryX16_stret
226 TrampolineEntryX16_stret
227 TrampolineEntryX16_stret
231 __objc_blockTrampolineStart_stret:
232 // 2048-4 trampolines to fill 16K page
233 TrampolineEntryX256_stret
234 TrampolineEntryX256_stret
235 TrampolineEntryX256_stret
236 TrampolineEntryX256_stret
238 TrampolineEntryX256_stret
239 TrampolineEntryX256_stret
240 TrampolineEntryX256_stret
242 TrampolineEntryX16_stret
243 TrampolineEntryX16_stret
244 TrampolineEntryX16_stret
245 TrampolineEntryX16_stret
247 TrampolineEntryX16_stret
248 TrampolineEntryX16_stret
249 TrampolineEntryX16_stret
250 TrampolineEntryX16_stret
252 TrampolineEntryX16_stret
253 TrampolineEntryX16_stret
254 TrampolineEntryX16_stret
255 TrampolineEntryX16_stret
257 TrampolineEntryX16_stret
258 TrampolineEntryX16_stret
259 TrampolineEntryX16_stret
261 TrampolineEntry_stret
262 TrampolineEntry_stret
263 TrampolineEntry_stret
264 TrampolineEntry_stret
266 TrampolineEntry_stret
267 TrampolineEntry_stret
268 TrampolineEntry_stret
269 TrampolineEntry_stret
271 TrampolineEntry_stret
272 TrampolineEntry_stret
273 TrampolineEntry_stret
274 __objc_blockTrampolineLast_stret:
275 TrampolineEntry_stret
277 // TrampolineEntry_stret
278 // TrampolineEntry_stret
279 // TrampolineEntry_stret
280 // TrampolineEntry_stret