From 692c5c148b6f8ec521bb2fcc4fa10aa80341fda5 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 16 Oct 2001 14:20:17 +0000 Subject: [PATCH] * sysdeps/m68k/setjmp.c: Also define setjmp and _setjmp if BSD_SETJMP or BSD__SETJMP is defined, resp. * sysdeps/m68k/bsd-setjmp.c: Inline setjmp code instead of making a tail call to __sigsetjmp that would require extending the caller's frame. * sysdeps/m68k/bsd-_setjmp.c: Likewise. * sysdeps/m68k/bsd-setjmp.S: Deleted. * sysdeps/m68k/bsd-_setjmp.S: Deleted. --- sysdeps/m68k/{bsd-_setjmp.S => bsd-_setjmp.c} | 34 +++------------------------ sysdeps/m68k/{bsd-setjmp.S => bsd-setjmp.c} | 32 +++---------------------- sysdeps/m68k/setjmp.c | 16 +++++++++++-- 3 files changed, 20 insertions(+), 62 deletions(-) rename sysdeps/m68k/{bsd-_setjmp.S => bsd-_setjmp.c} (50%) rename sysdeps/m68k/{bsd-setjmp.S => bsd-setjmp.c} (51%) diff --git a/sysdeps/m68k/bsd-_setjmp.S b/sysdeps/m68k/bsd-_setjmp.c similarity index 50% rename from sysdeps/m68k/bsd-_setjmp.S rename to sysdeps/m68k/bsd-_setjmp.c index a0e32bd..ee2964e 100644 --- a/sysdeps/m68k/bsd-_setjmp.S +++ b/sysdeps/m68k/bsd-_setjmp.c @@ -1,5 +1,5 @@ /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. m68k version. - Copyright (C) 1994, 1997 Free Software Foundation, Inc. + Copyright (C) 1994, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,33 +17,5 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -#ifdef MOTOROLA_SYNTAX -#define d0 %d0 -#define d1 %d1 -#define PUSH(reg) move.l reg, -(%sp) -#define POP(reg) move.l (%sp)+, reg -#define PUSH0 clr.l -(%sp) -#else -#define PUSH(reg) movel reg, sp@- -#define POP(reg) movel sp@+, reg -#define PUSH0 clrl sp@- -#endif - -ENTRY (_setjmp) - POP (d0) /* Pop return PC. */ - POP (d1) /* Pop jmp_buf argument. */ - PUSH0 /* Push second argument of zero. */ - PUSH (d1) /* Push back first argument. */ - PUSH (d0) /* Push back return PC. */ -#ifdef PIC - bra.l C_SYMBOL_NAME (__sigsetjmp@PLTPC) -#else - jmp C_SYMBOL_NAME (__sigsetjmp) -#endif -END (_setjmp) +#define BSD__SETJMP +#include diff --git a/sysdeps/m68k/bsd-setjmp.S b/sysdeps/m68k/bsd-setjmp.c similarity index 51% rename from sysdeps/m68k/bsd-setjmp.S rename to sysdeps/m68k/bsd-setjmp.c index e146247..59b5acf 100644 --- a/sysdeps/m68k/bsd-setjmp.S +++ b/sysdeps/m68k/bsd-setjmp.c @@ -1,5 +1,5 @@ /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. m68k version. - Copyright (C) 1994, 1997 Free Software Foundation, Inc. + Copyright (C) 1994, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,31 +17,5 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -#ifdef MOTOROLA_SYNTAX -#define d0 %d0 -#define d1 %d1 -#define PUSH(reg) move.l reg, -(%sp) -#define POP(reg) move.l (%sp)+, reg -#else -#define PUSH(reg) movel reg, sp@- -#define POP(reg) movel sp@+, reg -#endif - -ENTRY (setjmp) - POP (d0) /* Pop return PC. */ - POP (d1) /* Pop jmp_buf argument. */ - pea 1 /* Push second argument of one. */ - PUSH (d1) /* Push back first argument. */ - PUSH (d0) /* Push back return PC. */ -#ifdef PIC - bra.l C_SYMBOL_NAME (__sigsetjmp@PLTPC) -#else - jmp C_SYMBOL_NAME (__sigsetjmp) -#endif -END (setjmp) +#define BSD_SETJMP +#include diff --git a/sysdeps/m68k/setjmp.c b/sysdeps/m68k/setjmp.c index 0456862..80672ad 100644 --- a/sysdeps/m68k/setjmp.c +++ b/sysdeps/m68k/setjmp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1994, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1994, 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -20,7 +20,15 @@ /* Save the current program position in ENV and return 0. */ int +#if defined BSD_SETJMP +# undef setjmp +setjmp (jmp_buf env) +#elif defined BSD__SETJMP +# undef _setjmp +_setjmp (jmp_buf env) +#else __sigsetjmp (jmp_buf env, int savemask) +#endif { /* Save data registers D1 through D7. */ asm volatile ("movem%.l %/d1-%/d7, %0" @@ -39,12 +47,16 @@ __sigsetjmp (jmp_buf env, int savemask) /* Save caller's SP, not our own. */ env[0].__jmpbuf[0].__sp = (void *) &env; -#if defined(__HAVE_68881__) || defined(__HAVE_FPU__) +#if defined __HAVE_68881__ || defined __HAVE_FPU__ /* Save floating-point (68881) registers FP0 through FP7. */ asm volatile ("fmovem%.x %/fp0-%/fp7, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0])); #endif +#if defined BSD_SETJMP || defined BSD__SETJMP + return 0; +#else /* Save the signal mask if requested. */ return __sigjmp_save (env, savemask); +#endif } -- 2.7.4