Fix layout of fields in jmp_buf. [N.B. we could make JMP_BUFLEN 9 if we want.]
This commit is contained in:
parent
2a9cfc2e99
commit
d3312c2719
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: __setjmp14.S,v 1.2 1999/01/03 16:22:04 eeh Exp $ */
|
||||
/* $NetBSD: __setjmp14.S,v 1.3 2000/08/28 00:45:59 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -46,7 +46,7 @@
|
|||
#if 0
|
||||
.asciz "@(#)setjmp.s 8.1 (Berkeley) 6/4/93"
|
||||
#else
|
||||
RCSID("$NetBSD: __setjmp14.S,v 1.2 1999/01/03 16:22:04 eeh Exp $")
|
||||
RCSID("$NetBSD: __setjmp14.S,v 1.3 2000/08/28 00:45:59 eeh Exp $")
|
||||
#endif
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
|
@ -77,10 +77,9 @@ ENTRY(__setjmp14)
|
|||
clr %o1 /* sigprocmask(SIG_BLOCK, (sigset_t *)NULL, (sigset_t *)a) */
|
||||
t ST_SYSCALL
|
||||
|
||||
st %o0, [%o3 + 0x04] /* sc.sc_mask = current mask; */
|
||||
mov SYS___sigaltstack14, %g1
|
||||
clr %o0 /* sigstack(NULL, &foo) */
|
||||
add %o2, 8, %o1 /* (foo being at the bottom of the stack) */
|
||||
add %o3, 8, %o1 /* (foo being part of the sigcontext we're overwriting) */
|
||||
t ST_SYSCALL
|
||||
|
||||
lduw [%o3 + 8 + 0x10], %o0 /* foo.ss_flags */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: __sigsetjmp14.S,v 1.3 2000/07/21 03:14:15 eeh Exp $ */
|
||||
/* $NetBSD: __sigsetjmp14.S,v 1.4 2000/08/28 00:45:59 eeh Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1995 Paul Kranenburg
|
||||
* All rights reserved.
|
||||
|
@ -37,7 +37,7 @@
|
|||
ENTRY(__sigsetjmp14)
|
||||
PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE
|
||||
cmp %o1,0
|
||||
st %o1,[%o0+0x38] ! jmpbuf[JBLEN]
|
||||
st %o1,[%o0+0x48] ! jmpbuf[JBLEN]
|
||||
bne,a 1f
|
||||
ldx [%g1+_C_LABEL(__setjmp14)], %g1 ! if (%o1 != 0) goto _setjmp;
|
||||
ldx [%g1+_C_LABEL(_setjmp)], %g1 ! else goto __setjmp;
|
||||
|
@ -47,7 +47,7 @@ ENTRY(__sigsetjmp14)
|
|||
|
||||
ENTRY(__siglongjmp14)
|
||||
PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE
|
||||
ld [%o0+0x38],%o2 ! jmpbuf[JBLEN]
|
||||
ld [%o0+0x48],%o2 ! jmpbuf[JBLEN]
|
||||
cmp %o2,0
|
||||
bne,a 1f
|
||||
ldx [%g1+_C_LABEL(__longjmp14)], %g1 ! if (%g2 != 0) goto _longjmp;
|
||||
|
@ -62,12 +62,12 @@ ENTRY(__siglongjmp14)
|
|||
ENTRY(__sigsetjmp14)
|
||||
cmp %o1,0
|
||||
be _C_LABEL(_setjmp)
|
||||
st %o1,[%o0+0x38] ! jmpbuf[JBLEN]
|
||||
st %o1,[%o0+0x48] ! jmpbuf[JBLEN]
|
||||
ba,a _C_LABEL(__setjmp14)
|
||||
unimp 0
|
||||
|
||||
ENTRY(__siglongjmp14)
|
||||
ld [%o0+0x38],%g1
|
||||
ld [%o0+0x48],%g1
|
||||
cmp %g1,0
|
||||
be _C_LABEL(_longjmp)
|
||||
nop
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: setjmp.S,v 1.3 1998/10/08 02:27:59 eeh Exp $ */
|
||||
/* $NetBSD: setjmp.S,v 1.4 2000/08/28 00:45:59 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -46,7 +46,7 @@
|
|||
#if 0
|
||||
.asciz "@(#)setjmp.s 8.1 (Berkeley) 6/4/93"
|
||||
#else
|
||||
RCSID("$NetBSD: setjmp.S,v 1.3 1998/10/08 02:27:59 eeh Exp $")
|
||||
RCSID("$NetBSD: setjmp.S,v 1.4 2000/08/28 00:45:59 eeh Exp $")
|
||||
#endif
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
|
@ -71,7 +71,7 @@ ENTRY(setjmp)
|
|||
* won't be filled out till later anyway.
|
||||
*/
|
||||
mov %o0, %o3 /* Save our jmp_buf in %o3 */
|
||||
add %o0, 0x38, %o2 /* build sigcontext in [%o2]->sc.sc_mask */
|
||||
mov %o0, %o2 /* build sigcontext in [%o2] */
|
||||
mov 1, %o0 /* SIG_BLOCK */
|
||||
mov SYS_compat_13_sigprocmask13, %g1
|
||||
clr %o1 /* sigprocmask(SIG_BLOCK, (sigset_t *)NULL, (sigset_t *)a) */
|
||||
|
@ -80,10 +80,10 @@ ENTRY(setjmp)
|
|||
st %o0, [%o3 + 0x04] /* sc.sc_mask = current mask; */
|
||||
mov SYS___sigaltstack14, %g1
|
||||
clr %o0 /* sigstack(NULL, &foo) */
|
||||
add %o2, 8, %o1 /* (foo being at the bottom of the stack) */
|
||||
add %o3, 0x38, %o1 /* (foo being the sigcontext14 sc_mask) */
|
||||
t ST_SYSCALL
|
||||
|
||||
lduw [%o3 + 8 + 0x10], %o0 /* foo.ss_flags */
|
||||
lduw [%o3 + 0x38+0x10], %o0 /* foo.ss_flags */
|
||||
and %o0, 1, %o1 /* onstack = foo.ss_flags & 1; */
|
||||
st %o0, [%o3 + 0x00] /* sc.sc_onstack = current onstack; */
|
||||
stx %sp, [%o3 + 0x08] /* sc.sc_sp = sp (both ours and caller's) */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sigsetjmp.S,v 1.4 2000/07/21 03:14:15 eeh Exp $ */
|
||||
/* $NetBSD: sigsetjmp.S,v 1.5 2000/08/28 00:45:59 eeh Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1995 Paul Kranenburg
|
||||
* All rights reserved.
|
||||
|
@ -39,17 +39,17 @@ ENTRY(sigsetjmp)
|
|||
set _C_LABEL(setjmp), %o2 ! if (%o1 != 0) goto _setjmp;
|
||||
set _C_LABEL(_setjmp), %o3 ! else goto __setjmp;
|
||||
movrnz %o1, %o2, %o3
|
||||
ldx [%g1+%o2], %g1
|
||||
ldx [%g1+%o3], %g1
|
||||
jmp %g1
|
||||
st %o1,[%o0+0x38] ! jmpbuf[JBLEN]
|
||||
st %o1,[%o0+0x48] ! jmpbuf[JBLEN]
|
||||
|
||||
|
||||
ENTRY(siglongjmp)
|
||||
PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE
|
||||
ld [%o0 + 0x38],%o2 ! jmpbuf[JBLEN]
|
||||
ld [%o0 + 0x48],%o2 ! jmpbuf[JBLEN]
|
||||
set _C_LABEL(longjmp), %o3 ! if (%o2 != 0) goto _longjmp;
|
||||
set _C_LABEL(_longjmp), %o4 ! else goto __longjmp;
|
||||
movrz %o2, %o3, %o4
|
||||
movrnz %o2, %o3, %o4
|
||||
ldx [%g1 + %o4], %g1
|
||||
jmp %g1
|
||||
nop
|
||||
|
@ -59,13 +59,13 @@ ENTRY(siglongjmp)
|
|||
|
||||
ENTRY(sigsetjmp)
|
||||
brz,pt %o1,_C_LABEL(_setjmp)
|
||||
st %o1,[%o0+0x38] ! jmpbuf[JBLEN]
|
||||
st %o1,[%o0+0x48] ! jmpbuf[JBLEN]
|
||||
ba,a,pt %icc,_C_LABEL(setjmp)
|
||||
nop ! spitfire bug
|
||||
unimp 0
|
||||
|
||||
ENTRY(siglongjmp)
|
||||
ld [%o0 + 0x38], %g1
|
||||
ld [%o0 + 0x48], %g1
|
||||
brz,pt %g1, _C_LABEL(_longjmp)
|
||||
nop
|
||||
ba,a,pt %icc, _C_LABEL(longjmp)
|
||||
|
|
Loading…
Reference in New Issue