diff options
author | Andreas Schwab <schwab@suse.de> | 2001-10-16 14:20:17 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2001-10-16 14:20:17 +0000 |
commit | 692c5c148b6f8ec521bb2fcc4fa10aa80341fda5 (patch) | |
tree | 0b59224d9ca89569497e279d07028cbe78f32b51 /sysdeps/m68k | |
parent | 5d964acfea2f1397edd4ce4084fad5a5b467d386 (diff) | |
download | glibc-692c5c148b6f8ec521bb2fcc4fa10aa80341fda5.tar glibc-692c5c148b6f8ec521bb2fcc4fa10aa80341fda5.tar.gz glibc-692c5c148b6f8ec521bb2fcc4fa10aa80341fda5.tar.bz2 glibc-692c5c148b6f8ec521bb2fcc4fa10aa80341fda5.zip |
* 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.
Diffstat (limited to 'sysdeps/m68k')
-rw-r--r-- | sysdeps/m68k/bsd-_setjmp.c (renamed from sysdeps/m68k/bsd-_setjmp.S) | 34 | ||||
-rw-r--r-- | sysdeps/m68k/bsd-setjmp.c (renamed from sysdeps/m68k/bsd-setjmp.S) | 32 | ||||
-rw-r--r-- | sysdeps/m68k/setjmp.c | 16 |
3 files changed, 20 insertions, 62 deletions
diff --git a/sysdeps/m68k/bsd-_setjmp.S b/sysdeps/m68k/bsd-_setjmp.c index a0e32bd0e1..ee2964e3be 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 <sysdep.h> - -#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 <sysdeps/m68k/setjmp.c> diff --git a/sysdeps/m68k/bsd-setjmp.S b/sysdeps/m68k/bsd-setjmp.c index e1462476a5..59b5acfeeb 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 <sysdep.h> - -#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 <sysdeps/m68k/setjmp.c> diff --git a/sysdeps/m68k/setjmp.c b/sysdeps/m68k/setjmp.c index 04568623f9..80672ad4db 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 } |