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 one page 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 // Align trampolines to 8 bytes
45 .macro TrampolineEntry
47 b L__objc_blockTrampolineImpl_func
51 .macro TrampolineEntryX16
73 .macro TrampolineEntryX256
95 __objc_blockTrampolineStart:
96 // 2048-2 trampolines to fill 16K page
141 __objc_blockTrampolineLast:
149 .globl __objc_blockTrampolineImpl_stret
150 .globl __objc_blockTrampolineStart_stret
151 .globl __objc_blockTrampolineLast_stret
153 // Trampoline machinery assumes the trampolines are Thumb function pointers
160 // Exported symbols are not marked as functions.
161 // The trampoline construction code assumes that the Thumb bit is not set.
162 .thumb_func L__objc_blockTrampolineImpl_stret_func
164 .align PAGE_MAX_SHIFT
165 __objc_blockTrampolineImpl_stret:
166 L__objc_blockTrampolineImpl_stret_func:
169 r12 == pc of trampoline's first instruction + PC bias
170 lr == original return address
173 mov r2, r1 // _cmd = self
175 // Trampoline's data is one page before the trampoline text.
176 // Also correct PC bias of 4 bytes.
177 sub r12, # 3*PAGE_MAX_SIZE
178 ldr r1, [r12, #-4] // self = block object
179 ldr pc, [r1, #12] // tail call block->invoke
182 // Align trampolines to 8 bytes
185 .macro TrampolineEntry_stret
187 b L__objc_blockTrampolineImpl_stret_func
191 .macro TrampolineEntryX16_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
207 TrampolineEntry_stret
208 TrampolineEntry_stret
209 TrampolineEntry_stret
210 TrampolineEntry_stret
213 .macro TrampolineEntryX256_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
229 TrampolineEntryX16_stret
230 TrampolineEntryX16_stret
231 TrampolineEntryX16_stret
232 TrampolineEntryX16_stret
235 __objc_blockTrampolineStart_stret:
236 // 2048-2 trampolines to fill 16K page
237 TrampolineEntryX256_stret
238 TrampolineEntryX256_stret
239 TrampolineEntryX256_stret
240 TrampolineEntryX256_stret
242 TrampolineEntryX256_stret
243 TrampolineEntryX256_stret
244 TrampolineEntryX256_stret
246 TrampolineEntryX16_stret
247 TrampolineEntryX16_stret
248 TrampolineEntryX16_stret
249 TrampolineEntryX16_stret
251 TrampolineEntryX16_stret
252 TrampolineEntryX16_stret
253 TrampolineEntryX16_stret
254 TrampolineEntryX16_stret
256 TrampolineEntryX16_stret
257 TrampolineEntryX16_stret
258 TrampolineEntryX16_stret
259 TrampolineEntryX16_stret
261 TrampolineEntryX16_stret
262 TrampolineEntryX16_stret
263 TrampolineEntryX16_stret
265 TrampolineEntry_stret
266 TrampolineEntry_stret
267 TrampolineEntry_stret
268 TrampolineEntry_stret
270 TrampolineEntry_stret
271 TrampolineEntry_stret
272 TrampolineEntry_stret
273 TrampolineEntry_stret
275 TrampolineEntry_stret
276 TrampolineEntry_stret
277 TrampolineEntry_stret
278 TrampolineEntry_stret
280 TrampolineEntry_stret
281 __objc_blockTrampolineLast_stret:
282 TrampolineEntry_stret
283 // TrampolineEntry_stret
284 // TrampolineEntry_stret