From e4cfe3fb823dc44c0e3e884e53d1ae7c05ae7416 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Mon, 26 Nov 2001 09:19:30 +0000 Subject: Rewrite vfork() as C, should now work. Changed longjmp.S and setjmp.S to use GCC's internal ppc-asm.h, and added macro to disable FP save/ restore in longjmp and setjmp. Fixed name of _setjmp() (was __setjmp). Fixed _setjmp to be PIC. --- libc/sysdeps/linux/powerpc/setjmp.S | 57 +++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 22 deletions(-) (limited to 'libc/sysdeps/linux/powerpc/setjmp.S') diff --git a/libc/sysdeps/linux/powerpc/setjmp.S b/libc/sysdeps/linux/powerpc/setjmp.S index 290669cec..4b3c48a8c 100644 --- a/libc/sysdeps/linux/powerpc/setjmp.S +++ b/libc/sysdeps/linux/powerpc/setjmp.S @@ -17,16 +17,25 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "ppc_asm.h" +#include +#define r1 1 +#define r2 2 #define _ASM #define _SETJMP_H #include -.global __setjmp -.type __setjmp,@function +#define USE_FP +#ifdef USE_FP +#define FP(x...) x +#else +#define FP(x...) +#endif + +.global _setjmp +.type _setjmp,@function .align 4 -__setjmp: +_setjmp: li r4,0 .global __sigsetjmp .type __sigsetjmp,@function @@ -36,44 +45,48 @@ __sigsetjmp: mflr r0 stw r2,(JB_GPR2*4)(3) stw r14,((JB_GPRS+0)*4)(3) - stfd fr14,((JB_FPRS+0*2)*4)(3) +FP( stfd f14,((JB_FPRS+0*2)*4)(3) ) stw r0,(JB_LR*4)(3) stw r15,((JB_GPRS+1)*4)(3) - stfd fr15,((JB_FPRS+1*2)*4)(3) +FP( stfd f15,((JB_FPRS+1*2)*4)(3) ) mfcr r0 stw r16,((JB_GPRS+2)*4)(3) - stfd fr16,((JB_FPRS+2*2)*4)(3) +FP( stfd f16,((JB_FPRS+2*2)*4)(3) ) stw r0,(JB_CR*4)(3) stw r17,((JB_GPRS+3)*4)(3) - stfd fr17,((JB_FPRS+3*2)*4)(3) +FP( stfd f7,((JB_FPRS+3*2)*4)(3) ) stw r18,((JB_GPRS+4)*4)(3) - stfd fr18,((JB_FPRS+4*2)*4)(3) +FP( stfd f18,((JB_FPRS+4*2)*4)(3) ) stw r19,((JB_GPRS+5)*4)(3) - stfd fr19,((JB_FPRS+5*2)*4)(3) +FP( stfd f19,((JB_FPRS+5*2)*4)(3) ) stw r20,((JB_GPRS+6)*4)(3) - stfd fr20,((JB_FPRS+6*2)*4)(3) +FP( stfd f20,((JB_FPRS+6*2)*4)(3) ) stw r21,((JB_GPRS+7)*4)(3) - stfd fr21,((JB_FPRS+7*2)*4)(3) +FP( stfd f21,((JB_FPRS+7*2)*4)(3) ) stw r22,((JB_GPRS+8)*4)(3) - stfd fr22,((JB_FPRS+8*2)*4)(3) +FP( stfd f22,((JB_FPRS+8*2)*4)(3) ) stw r23,((JB_GPRS+9)*4)(3) - stfd fr23,((JB_FPRS+9*2)*4)(3) +FP( stfd f23,((JB_FPRS+9*2)*4)(3) ) stw r24,((JB_GPRS+10)*4)(3) - stfd fr24,((JB_FPRS+10*2)*4)(3) +FP( stfd f24,((JB_FPRS+10*2)*4)(3) ) stw r25,((JB_GPRS+11)*4)(3) - stfd fr25,((JB_FPRS+11*2)*4)(3) +FP( stfd f25,((JB_FPRS+11*2)*4)(3) ) stw r26,((JB_GPRS+12)*4)(3) - stfd fr26,((JB_FPRS+12*2)*4)(3) +FP( stfd f26,((JB_FPRS+12*2)*4)(3) ) stw r27,((JB_GPRS+13)*4)(3) - stfd fr27,((JB_FPRS+13*2)*4)(3) +FP( stfd f27,((JB_FPRS+13*2)*4)(3) ) stw r28,((JB_GPRS+14)*4)(3) - stfd fr28,((JB_FPRS+14*2)*4)(3) +FP( stfd f28,((JB_FPRS+14*2)*4)(3) ) stw r29,((JB_GPRS+15)*4)(3) - stfd fr29,((JB_FPRS+15*2)*4)(3) +FP( stfd f29,((JB_FPRS+15*2)*4)(3) ) stw r30,((JB_GPRS+16)*4)(3) - stfd fr30,((JB_FPRS+16*2)*4)(3) +FP( stfd f30,((JB_FPRS+16*2)*4)(3) ) stw r31,((JB_GPRS+17)*4)(3) - stfd fr31,((JB_FPRS+17*2)*4)(3) +FP( stfd f31,((JB_FPRS+17*2)*4)(3) ) +#ifdef __PIC__ + b __sigjmp_save@PLT +#else b __sigjmp_save +#endif .size __sigsetjmp,.-__sigsetjmp -- cgit v1.2.3