1 /* src/vm/jit/powerpc/asmpart.S - Java-C interface functions for PowerPC
3 Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software.text; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY ; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
33 #include "vm/jit/abi-asm.h"
34 #include "vm/jit/methodheader.h"
42 /* export functions ***********************************************************/
44 .globl asm_vm_call_method
45 .globl asm_vm_call_method_int
46 .globl asm_vm_call_method_long
47 .globl asm_vm_call_method_float
48 .globl asm_vm_call_method_double
50 .globl asm_vm_call_method_exception_handler
51 .globl asm_vm_call_method_end
53 .globl asm_call_jit_compiler
55 .globl asm_handle_nat_exception
56 .globl asm_handle_exception
58 .globl asm_abstractmethoderror
62 .globl asm_compare_and_swap
63 .globl asm_memory_barrier
66 /* asm_vm_call_method **********************************************************
68 * This function calls a Java-method (which possibly needs compilation) *
69 * with up to 4 address parameters. *
71 * This functions calls the JIT-compiler which eventually translates the *
72 * method into machine code. *
75 * javaobject_header *asm_calljavamethod (methodinfo *m, *
76 * void *arg1, void *arg2, void *arg3, void *arg4); *
78 *******************************************************************************/
82 .long 0 /* catch type all */
83 .long 0 /* exception handler pc */
85 .long 0 /* start pc */
86 .long 1 /* extable size */
87 .long 0 /* line number table start */
88 .long 0 /* line number table size */
93 .long 0 /* frame size */
94 .long 0 /* codeinfo pointer */
97 asm_vm_call_method_int:
98 asm_vm_call_method_long:
99 asm_vm_call_method_float:
100 asm_vm_call_method_double:
102 stw r0,LA_LR_OFFSET(sp)
103 stwu sp,-40*4(sp) /* keep stack 16-byte aligned */
105 stw s0,8*4(sp) /* save used callee saved registers */
106 stw a0,9*4(sp) /* save method PV */
108 #if defined(__DARWIN__)
109 stw itmp1,10*4(sp) /* register r11 is callee saved */
111 stw pv,11*4(sp) /* save PV register */
113 stw itmp3,12*4(sp) /* registers r14-r31 are callee saved */
114 stfd ftmp1,14*4(sp) /* registers f14-f31 are callee saved */
117 #if defined(__DARWIN__)
133 SAVE_TEMPORARY_REGISTERS(18) /* the offset has to be even */
136 mr t0,a1 /* address of data structure */
137 mr t1,a2 /* stack argument count */
139 mr s0,sp /* save SP */
141 lwz a0,0*8+4(t0) /* we are on big-endian */
159 #if defined(__DARWIN__)
168 beq L_asm_vm_call_method_stack_copy_done
170 slwi t2,t1,3 /* calculate stackframe size (* 8) */
172 sub sp,sp,t2 /* create stackframe */
173 mr t2,sp /* temporary stack pointer */
175 L_asm_vm_call_method_stack_copy_loop:
176 #if defined(__DARWIN__)
177 lwz t3,21*8+0(t0) /* load argument */
180 lwz t3,16*8+0(t0) /* load argument */
183 stw t3,0(t2) /* store argument on stack */
186 addi t0,t0,8 /* load address of next argument */
187 addi t2,t2,8 /* increase stack pointer */
188 addi t1,t1,-1 /* subtract 1 argument */
190 bgt L_asm_vm_call_method_stack_copy_loop
192 L_asm_vm_call_method_stack_copy_done:
193 addi mptr,s0,9*4 /* get address of PV */
194 lwz pv,0*4(mptr) /* load PV */
199 #if defined(__DARWIN__)
200 addi pv,itmp1,lo16(asm_vm_call_method - 1b)
202 addi pv,itmp1,(asm_vm_call_method - 1b)@l
205 L_asm_vm_call_method_return:
206 mr sp,s0 /* restore the SP */
208 lwz s0,8*4(sp) /* restore used callee saved registers*/
210 #if defined(__DARWIN__)
211 lwz itmp1,10*4(sp) /* register r11 is callee saved */
213 lwz pv,11*4(sp) /* save PV register */
216 lfd ftmp1,14*4(sp) /* registers f14-f31 are callee saved */
219 #if defined(__DARWIN__)
235 RESTORE_TEMPORARY_REGISTERS(18) /* the offset has to be even */
238 lwz r0,40*4+LA_LR_OFFSET(sp)
243 asm_vm_call_method_exception_handler:
245 bl builtin_throw_exception
246 b L_asm_vm_call_method_return
248 asm_vm_call_method_end:
252 /* asm_call_jit_compiler *******************************************************
254 Invokes the compiler for untranslated JavaVM methods.
256 *******************************************************************************/
258 asm_call_jit_compiler:
259 L_asm_call_jit_compiler: /* required for PIC code */
261 stw r0,LA_LR_OFFSET(sp) /* save return address */
262 stwu sp,-(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)(sp)
264 #if defined(__DARWIN__)
265 stw a0,LA_SIZE+(4+0)*4(sp)
266 stw a1,LA_SIZE+(4+1)*4(sp)
267 stw a2,LA_SIZE+(4+2)*4(sp)
268 stw a3,LA_SIZE+(4+3)*4(sp)
269 stw a4,LA_SIZE+(4+4)*4(sp)
270 stw a5,LA_SIZE+(4+5)*4(sp)
271 stw a6,LA_SIZE+(4+6)*4(sp)
272 stw a7,LA_SIZE+(4+7)*4(sp)
274 stfd fa0,LA_SIZE+(4+8)*4(sp)
275 stfd fa1,LA_SIZE+(4+10)*4(sp)
276 stfd fa2,LA_SIZE+(4+12)*4(sp)
277 stfd fa3,LA_SIZE+(4+14)*4(sp)
278 stfd fa4,LA_SIZE+(4+16)*4(sp)
279 stfd fa5,LA_SIZE+(4+18)*4(sp)
280 stfd fa6,LA_SIZE+(4+20)*4(sp)
281 stfd fa7,LA_SIZE+(4+22)*4(sp)
282 stfd fa8,LA_SIZE+(4+24)*4(sp)
283 stfd fa9,LA_SIZE+(4+26)*4(sp)
284 stfd fa10,LA_SIZE+(4+28)*4(sp)
285 stfd fa11,LA_SIZE+(4+30)*4(sp)
286 stfd fa12,LA_SIZE+(4+32)*4(sp)
288 SAVE_ARGUMENT_REGISTERS(LA_SIZE_IN_POINTERS)
293 addi a2,sp,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)
294 lwz a3,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)+LA_LR_OFFSET(sp)
296 mr pv,v0 /* move address to pv register */
298 #if defined(__DARWIN__)
299 lwz a0,LA_SIZE+(4+0)*4(sp)
300 lwz a1,LA_SIZE+(4+1)*4(sp)
301 lwz a2,LA_SIZE+(4+2)*4(sp)
302 lwz a3,LA_SIZE+(4+3)*4(sp)
303 lwz a4,LA_SIZE+(4+4)*4(sp)
304 lwz a5,LA_SIZE+(4+5)*4(sp)
305 lwz a6,LA_SIZE+(4+6)*4(sp)
306 lwz a7,LA_SIZE+(4+7)*4(sp)
308 lfd fa0,LA_SIZE+(4+8)*4(sp)
309 lfd fa1,LA_SIZE+(4+10)*4(sp)
310 lfd fa2,LA_SIZE+(4+12)*4(sp)
311 lfd fa3,LA_SIZE+(4+14)*4(sp)
312 lfd fa4,LA_SIZE+(4+16)*4(sp)
313 lfd fa5,LA_SIZE+(4+18)*4(sp)
314 lfd fa6,LA_SIZE+(4+20)*4(sp)
315 lfd fa7,LA_SIZE+(4+22)*4(sp)
316 lfd fa8,LA_SIZE+(4+24)*4(sp)
317 lfd fa9,LA_SIZE+(4+26)*4(sp)
318 lfd fa10,LA_SIZE+(4+28)*4(sp)
319 lfd fa11,LA_SIZE+(4+30)*4(sp)
320 lfd fa12,LA_SIZE+(4+32)*4(sp)
322 RESTORE_ARGUMENT_REGISTERS(LA_SIZE_IN_POINTERS)
325 lwz itmp1,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)+LA_LR_OFFSET(sp)
328 addi sp,sp,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)
330 mr. pv,pv /* test for exception */
331 beq L_asm_call_jit_compiler_exception
333 mtctr pv /* move method address to control reg */
334 bctr /* and call the Java method */
336 L_asm_call_jit_compiler_exception:
338 stw r0,LA_LR_OFFSET(sp)
339 stwu sp,-LA_SIZE_ALIGNED(sp) /* preserve linkage area */
340 bl exceptions_get_and_clear_exception
341 lwz xpc,LA_SIZE_ALIGNED+LA_LR_OFFSET(sp)
343 addi sp,sp,LA_SIZE_ALIGNED
345 mr xptr,v0 /* get exception */
346 addi xpc,xpc,-4 /* exception address is ra - 4 */
347 b L_asm_handle_nat_exception
350 /********************* function asm_handle_exception ***************************
352 * This function handles an exception. It does not use the usual calling *
353 * conventions. The exception pointer is passed in REG_ITMP1 and the *
354 * pc from the exception raising position is passed in REG_ITMP2. It searches *
355 * the local exception table for a handler. If no one is found, it unwinds *
356 * stacks and continues searching the callers. *
358 * void asm_handle_exception (exceptionptr, exceptionpc); *
360 *******************************************************************************/
362 asm_handle_nat_exception:
363 L_asm_handle_nat_exception: /* required for PIC code */
364 L_asm_handle_exception_stack_loop:
366 addi sp,sp,-(LA_SIZE+((4+6)*4)) /* allocate stack (+4 for darwin) */
367 stw xptr,LA_SIZE+(4+0)*4(sp) /* save exception pointer */
368 stw xpc,LA_SIZE+(4+1)*4(sp) /* save exception pc */
369 stw r0,LA_SIZE+(4+3)*4(sp) /* save return address */
371 stw itmp3,LA_SIZE+(4+4)*4(sp) /* save maybe-leaf flag (cleared) */
373 mr a0,r0 /* pass return address */
374 bl md_codegen_get_pv_from_pc /* get PV from RA */
375 stw v0,LA_SIZE+(4+2)*4(sp) /* save data segment pointer */
377 lwz a0,LA_SIZE+(4+0)*4(sp) /* pass xptr */
378 lwz a1,LA_SIZE+(4+1)*4(sp) /* pass xpc */
379 lwz a2,LA_SIZE+(4+2)*4(sp) /* pass PV (v0 == a0) */
380 addi a3,sp,LA_SIZE+((4+6)*4) /* pass Java SP */
382 b L_asm_handle_exception_continue
384 asm_handle_exception:
385 L_asm_handle_exception: /* required for PIC code */
386 addi sp,sp,-(ARG_CNT+TMP_CNT)*8 /* create maybe-leaf stackframe */
388 #if defined(__DARWIN__)
390 SAVE_ARGUMENT_REGISTERS(0) /* we save arg and temp registers in */
391 SAVE_TEMPORARY_REGISTERS(ARG_CNT) /* case this is a leaf method */
394 addi sp,sp,-(LA_SIZE+(4+6)*4) /* allocate stack */
395 stw xptr,LA_SIZE+(4+0)*4(sp) /* save xptr */
396 stw pv,LA_SIZE+(4+2)*4(sp) /* save PV */
397 mflr r0 /* save RA */
398 stw r0,LA_SIZE+(4+3)*4(sp)
399 li t0,1 /* set maybe-leaf flag */
400 stw t0,LA_SIZE+(4+4)*4(sp) /* save maybe-leaf flag */
402 mr a0,xptr /* pass exception pointer */
403 mr a1,xpc /* pass exception pc */
404 mr a2,pv /* pass data segment pointer */
405 addi a3,sp,LA_SIZE+(ARG_CNT+TMP_CNT)*8+(4+6)*4
407 L_asm_handle_exception_continue:
408 bl exceptions_handle_exception
411 beq L_asm_handle_exception_not_catched
413 mr xpc,v0 /* move handlerpc into xpc */
414 lwz xptr,LA_SIZE+(4+0)*4(sp) /* restore xptr */
415 lwz pv,LA_SIZE+(4+2)*4(sp) /* restore PV */
416 lwz r0,LA_SIZE+(4+3)*4(sp) /* restore RA */
418 lwz t0,LA_SIZE+(4+4)*4(sp) /* get maybe-leaf flag */
419 addi sp,sp,LA_SIZE+(4+6)*4 /* free stack frame */
422 beq L_asm_handle_exception_no_leaf
424 #if defined(__DARWIN__)
426 RESTORE_ARGUMENT_REGISTERS(0) /* if this is a leaf method, we have */
427 RESTORE_TEMPORARY_REGISTERS(ARG_CNT)/* to restore arg and temp registers */
430 addi sp,sp,(ARG_CNT+TMP_CNT)*8 /* remove maybe-leaf stackframe */
432 L_asm_handle_exception_no_leaf:
433 mtctr xpc /* jump to the handler */
436 L_asm_handle_exception_not_catched:
437 lwz xptr,LA_SIZE+(4+0)*4(sp) /* restore xptr */
438 lwz pv,LA_SIZE+(4+2)*4(sp) /* restore PV */
439 lwz r0,LA_SIZE+(4+3)*4(sp) /* restore RA */
441 lwz t0,LA_SIZE+(4+4)*4(sp) /* get maybe-leaf flag */
442 addi sp,sp,LA_SIZE+(4+6)*4 /* free stack frame */
445 beq L_asm_handle_exception_no_leaf_stack
447 addi sp,sp,(ARG_CNT+TMP_CNT)*8 /* remove maybe-leaf stackframe */
448 li t0,0 /* clear the maybe-leaf flag */
450 L_asm_handle_exception_no_leaf_stack:
451 lwz t1,FrameSize(pv) /* get frame size */
452 add t1,sp,t1 /* pointer to save area */
454 lwz t2,IsLeaf(pv) /* is leaf procedure */
456 bne L_asm_handle_exception_no_ra_restore
458 lwz r0,LA_LR_OFFSET(t1) /* restore ra */
461 L_asm_handle_exception_no_ra_restore:
462 mflr xpc /* the new xpc is ra */
463 mr t4,xpc /* save RA */
464 lwz t2,IntSave(pv) /* t2 = saved int register count */
467 mflr t3 /* t3 = current pc */
468 #if defined(__DARWIN__)
469 addi t3,t3,lo16(ex_int2-ex_int1)
471 addi t3,t3,(ex_int2-ex_int1)@l
473 slwi t2,t2,2 /* t2 = register count * 4 */
474 subf t3,t2,t3 /* t3 = IntSave - t2 */
490 subf t1,t2,t1 /* t1 = t1 - register count * 4 */
496 #if defined(__DARWIN__)
497 addi t3,t3,lo16(ex_flt2-ex_flt1)
499 addi t3,t3,(ex_flt2-ex_flt1)@l
501 slwi t2,t2,2 /* t2 = register count * 4 */
502 subf t3,t2,t3 /* t3 = FltSave - t2 */
518 mtlr t4 /* restore RA */
519 lwz t1,FrameSize(pv) /* get frame size */
520 add sp,sp,t1 /* unwind stack */
521 b L_asm_handle_exception_stack_loop
524 /* asm_abstractmethoderror *****************************************************
526 Creates and throws an AbstractMethodError.
528 *******************************************************************************/
530 asm_abstractmethoderror:
532 stw r0,LA_LR_OFFSET(sp)
533 stwu sp,-LA_SIZE_ALIGNED(sp) /* preserve linkage area */
534 addi a0,sp,LA_SIZE_ALIGNED /* pass java sp */
535 mr a1,r0 /* pass exception address */
536 bl exceptions_asm_new_abstractmethoderror
537 lwz r0,LA_SIZE_ALIGNED+LA_LR_OFFSET(sp)
538 mtlr r0 /* restore return address */
539 addi sp,sp,LA_SIZE_ALIGNED
541 mr xptr,v0 /* get exception pointer */
542 mr xpc,r0 /* we can't use r0 directly in addi */
543 addi xpc,xpc,-4 /* exception address is ra - 4 */
544 b L_asm_handle_nat_exception
547 /*********************************************************************/
575 /* asm_compare_and_swap ********************************************************
579 *******************************************************************************/
581 asm_compare_and_swap:
594 /* asm_memory_barrier **********************************************************
598 *******************************************************************************/
605 #if defined(__DARWIN__)
607 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
609 L_builtin_throw_exception$stub:
610 .indirect_symbol _builtin_throw_exception
612 bcl 20,31,L00$_builtin_throw_exception
613 L00$_builtin_throw_exception:
615 addis r11,r11,ha16(L_builtin_throw_exception$lazy_ptr - L00$_builtin_throw_exception)
617 lwzu r12,lo16(L_builtin_throw_exception$lazy_ptr - L00$_builtin_throw_exception)(r11)
622 L_builtin_throw_exception$lazy_ptr:
623 .indirect_symbol _builtin_throw_exception
624 .long dyld_stub_binding_helper
627 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
629 L_md_codegen_get_pv_from_pc$stub:
630 .indirect_symbol _md_codegen_get_pv_from_pc
632 bcl 20,31,L00$_md_codegen_get_pv_from_pc
633 L00$_md_codegen_get_pv_from_pc:
635 addis r11,r11,ha16(L_md_codegen_get_pv_from_pc$lazy_ptr - L00$_md_codegen_get_pv_from_pc)
637 lwzu r12,lo16(L_md_codegen_get_pv_from_pc$lazy_ptr - L00$_md_codegen_get_pv_from_pc)(r11)
642 L_md_codegen_get_pv_from_pc$lazy_ptr:
643 .indirect_symbol _md_codegen_get_pv_from_pc
644 .long dyld_stub_binding_helper
647 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
649 L_exceptions_handle_exception$stub:
650 .indirect_symbol _exceptions_handle_exception
652 bcl 20,31,L00$_exceptions_handle_exception
653 L00$_exceptions_handle_exception:
655 addis r11,r11,ha16(L_exceptions_handle_exception$lazy_ptr - L00$_exceptions_handle_exception)
657 lwzu r12,lo16(L_exceptions_handle_exception$lazy_ptr - L00$_exceptions_handle_exception)(r11)
662 L_exceptions_handle_exception$lazy_ptr:
663 .indirect_symbol _exceptions_handle_exception
664 .long dyld_stub_binding_helper
667 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
669 L_stacktrace_create_extern_stackframeinfo$stub:
670 .indirect_symbol _stacktrace_create_extern_stackframeinfo
672 bcl 20,31,L00$_stacktrace_create_extern_stackframeinfo
673 L00$_stacktrace_create_extern_stackframeinfo:
675 addis r11,r11,ha16(L_stacktrace_create_extern_stackframeinfo$lazy_ptr - L00$_stacktrace_create_extern_stackframeinfo)
677 lwzu r12,lo16(L_stacktrace_create_extern_stackframeinfo$lazy_ptr - L00$_stacktrace_create_extern_stackframeinfo)(r11)
682 L_stacktrace_create_extern_stackframeinfo$lazy_ptr:
683 .indirect_symbol _stacktrace_create_extern_stackframeinfo
684 .long dyld_stub_binding_helper
687 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
689 L_jit_asm_compile$stub:
690 .indirect_symbol _jit_asm_compile
692 bcl 20,31,L00$_jit_asm_compile
693 L00$_jit_asm_compile:
695 addis r11,r11,ha16(L_jit_asm_compile$lazy_ptr - L00$_jit_asm_compile)
697 lwzu r12,lo16(L_jit_asm_compile$lazy_ptr - L00$_jit_asm_compile)(r11)
702 L_jit_asm_compile$lazy_ptr:
703 .indirect_symbol _jit_asm_compile
704 .long dyld_stub_binding_helper
707 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
709 L_stacktrace_remove_stackframeinfo$stub:
710 .indirect_symbol _stacktrace_remove_stackframeinfo
712 bcl 20,31,L00$_stacktrace_remove_stackframeinfo
713 L00$_stacktrace_remove_stackframeinfo:
715 addis r11,r11,ha16(L_stacktrace_remove_stackframeinfo$lazy_ptr - L00$_stacktrace_remove_stackframeinfo)
717 lwzu r12,lo16(L_stacktrace_remove_stackframeinfo$lazy_ptr - L00$_stacktrace_remove_stackframeinfo)(r11)
722 L_stacktrace_remove_stackframeinfo$lazy_ptr:
723 .indirect_symbol _stacktrace_remove_stackframeinfo
724 .long dyld_stub_binding_helper
727 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
729 L_exceptions_get_and_clear_exception$stub:
730 .indirect_symbol _exceptions_get_and_clear_exception
732 bcl 20,31,L00$_exceptions_get_and_clear_exception
733 L00$_exceptions_get_and_clear_exception:
735 addis r11,r11,ha16(L_exceptions_get_and_clear_exception$lazy_ptr - L00$_exceptions_get_and_clear_exception)
737 lwzu r12,lo16(L_exceptions_get_and_clear_exception$lazy_ptr - L00$_exceptions_get_and_clear_exception)(r11)
742 L_exceptions_get_and_clear_exception$lazy_ptr:
743 .indirect_symbol _exceptions_get_and_clear_exception
744 .long dyld_stub_binding_helper
747 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
749 L_exceptions_asm_new_abstractmethoderror$stub:
750 .indirect_symbol _exceptions_asm_new_abstractmethoderror
752 bcl 20,31,L00$_exceptions_asm_new_abstractmethoderror
753 L00$_exceptions_asm_new_abstractmethoderror:
755 addis r11,r11,ha16(L_exceptions_asm_new_abstractmethoderror$lazy_ptr - L00$_exceptions_asm_new_abstractmethoderror)
757 lwzu r12,lo16(L_exceptions_asm_new_abstractmethoderror$lazy_ptr - L00$_exceptions_asm_new_abstractmethoderror)(r11)
762 L_exceptions_asm_new_abstractmethoderror$lazy_ptr:
763 .indirect_symbol _exceptions_asm_new_abstractmethoderror
764 .long dyld_stub_binding_helper
767 # if defined(ENABLE_REPLACEMENT)
769 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
772 .indirect_symbol _replace_me
774 bcl 20,31,L00$_replace_me
777 addis r11,r11,ha16(L_replace_me$lazy_ptr - L00$_replace_me)
779 lwzu r12,lo16(L_replace_me$lazy_ptr - L00$_replace_me)(r11)
784 L_replace_me$lazy_ptr:
785 .indirect_symbol _replace_me
786 .long dyld_stub_binding_helper
789 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
791 L_replace_build_execution_state$stub:
792 .indirect_symbol _replace_build_execution_state
794 bcl 20,31,L00$_replace_build_execution_state
795 L00$_replace_build_execution_state:
797 addis r11,r11,ha16(L_replace_build_execution_state$lazy_ptr - L00$_replace_build_execution_state)
799 lwzu r12,lo16(L_replace_build_execution_state$lazy_ptr - L00$_replace_build_execution_state)(r11)
804 L_replace_build_execution_state$lazy_ptr:
805 .indirect_symbol _replace_build_execution_state
806 .long dyld_stub_binding_helper
809 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
811 L_replace_free_safestack$stub:
812 .indirect_symbol _replace_free_safestack
814 bcl 20,31,L00$_replace_free_safestack
815 L00$_replace_free_safestack:
817 addis r11,r11,ha16(L_replace_free_safestack$lazy_ptr - L00$_replace_free_safestack)
819 lwzu r12,lo16(L_replace_free_safestack$lazy_ptr - L00$_replace_free_safestack)(r11)
824 L_replace_free_safestack$lazy_ptr:
825 .indirect_symbol _replace_free_safestack
826 .long dyld_stub_binding_helper
828 # endif /* ENABLE_REPLACEMENT */
830 #endif /* defined(__DARWIN__) */
833 /* disable exec-stacks ********************************************************/
835 #if defined(__linux__) && defined(__ELF__)
836 .section .note.GNU-stack,"",%progbits
841 * These are local overrides for various environment variables in Emacs.
842 * Please do not remove this and leave it at the end of the file, where
843 * Emacs will automagically detect them.
844 * ---------------------------------------------------------------------
847 * indent-tabs-mode: t
851 * vim:noexpandtab:sw=4:ts=4: