Tue Mar 12 04:57:57 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* setjmp/Makefile (tests): Add jmpbug. * setjmp/jmpbug.c: New file.
This commit is contained in:
parent
1177c8babf
commit
6c46dada59
@ -1,3 +1,8 @@
|
|||||||
|
Tue Mar 12 04:57:57 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* setjmp/Makefile (tests): Add jmpbug.
|
||||||
|
* setjmp/jmpbug.c: New file.
|
||||||
|
|
||||||
Tue Mar 12 04:42:01 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
Tue Mar 12 04:42:01 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||||
|
|
||||||
* sysdeps/sparc/jmp_buf.h: Rewritten; use array of ints, not struct.
|
* sysdeps/sparc/jmp_buf.h: Rewritten; use array of ints, not struct.
|
||||||
|
@ -26,7 +26,7 @@ headers := setjmp.h jmp_buf.h
|
|||||||
routines := setjmp sigjmp bsd-setjmp bsd-_setjmp \
|
routines := setjmp sigjmp bsd-setjmp bsd-_setjmp \
|
||||||
longjmp __longjmp jmp-unwind
|
longjmp __longjmp jmp-unwind
|
||||||
|
|
||||||
tests := tst-setjmp
|
tests := tst-setjmp jmpbug
|
||||||
|
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
32
setjmp/jmpbug.c
Normal file
32
setjmp/jmpbug.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* setjmp vs alloca test case. Exercised bug on sparc. */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <alloca.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
sub5 (jmp_buf buf)
|
||||||
|
{
|
||||||
|
longjmp (buf, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
jmp_buf buf;
|
||||||
|
char *foo;
|
||||||
|
int arr[100];
|
||||||
|
|
||||||
|
arr[77] = 76;
|
||||||
|
if (setjmp (buf))
|
||||||
|
{
|
||||||
|
printf ("made it ok; %d\n", arr[77]);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
foo = (char *) alloca (128);
|
||||||
|
sub5 (buf);
|
||||||
|
|
||||||
|
/* NOTREACHED */
|
||||||
|
return 1;
|
||||||
|
}
|
@ -18,6 +18,7 @@ Cambridge, MA 02139, USA. */
|
|||||||
|
|
||||||
#include <sysdep.h>
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
#define _ASM 1
|
||||||
#include <jmp_buf.h>
|
#include <jmp_buf.h>
|
||||||
#define ENV(reg) [%g1 + (reg * 4)]
|
#define ENV(reg) [%g1 + (reg * 4)]
|
||||||
|
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
/* Define the machine-dependent type `jmp_buf'. SPARC version. */
|
/* Define the machine-dependent type `jmp_buf'. SPARC version. */
|
||||||
|
|
||||||
/* NOTE: The assembly code in __longjmp.S and setjmp.S knows the layout
|
#if defined (__USE_MISC) || defined (_ASM)
|
||||||
of this structure. You must hack the assembly code if you want to change
|
#define JB_SP 0
|
||||||
the order of the members. */
|
#define JB_FP 1
|
||||||
|
#define JB_PC 2
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct
|
#ifndef _ASM
|
||||||
{
|
typedef int __jmp_buf[3];
|
||||||
/* Return PC (register o7). */
|
#endif
|
||||||
__ptr_t __pc;
|
|
||||||
|
|
||||||
/* Saved FP. */
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
__ptr_t __fp;
|
containing a local variable at ADDRESS. */
|
||||||
} __jmp_buf[1];
|
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
||||||
|
((int) (address) < (jmpbuf)[JB_SP])
|
||||||
|
@ -17,6 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
|||||||
Cambridge, MA 02139, USA. */
|
Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
#include <sysdep.h>
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
#define _ASM 1
|
||||||
#include <jmp_buf.h>
|
#include <jmp_buf.h>
|
||||||
|
|
||||||
ENTRY (__sigsetjmp)
|
ENTRY (__sigsetjmp)
|
||||||
|
Loading…
Reference in New Issue
Block a user