Index: include/ucontext.h =================================================================== RCS file: /home/ncvs/src/sys/sparc64/include/ucontext.h,v retrieving revision 1.7 diff -u -r1.7 ucontext.h --- include/ucontext.h 22 Oct 2002 18:03:15 -0000 1.7 +++ include/ucontext.h 9 Jan 2003 21:12:12 -0000 @@ -51,6 +51,7 @@ #define mc_tpc mc_in[1] #define mc_tstate mc_in[2] #define mc_y mc_in[4] +#define mc_wstate mc_in[5] #define _MC_VERSION_SHIFT 0 #define _MC_VERSION_BITS 32 Index: sparc64/machdep.c =================================================================== RCS file: /home/ncvs/src/sys/sparc64/sparc64/machdep.c,v retrieving revision 1.74 diff -u -r1.74 machdep.c --- sparc64/machdep.c 27 Dec 2002 01:50:29 -0000 1.74 +++ sparc64/machdep.c 9 Jan 2003 21:16:10 -0000 @@ -461,7 +461,9 @@ int sigreturn(struct thread *td, struct sigreturn_args *uap) { + struct trapframe *tf; struct proc *p; + mcontext_t *mc; ucontext_t uc; p = td->td_proc; @@ -476,9 +478,12 @@ return (EFAULT); } - if (!TSTATE_SECURE(uc.uc_mcontext.mc_tstate)) + mc = &uc.uc_mcontext; + tf = td->td_frame; + if (!TSTATE_SECURE(mc->mc_tstate)) return (EINVAL); - bcopy(&uc.uc_mcontext, td->td_frame, sizeof(*td->td_frame)); + mc->mc_wstate = tf->tf_wstate; + bcopy(mc, tf, sizeof(*tf)); PROC_LOCK(p); p->p_sigmask = uc.uc_sigmask; @@ -487,8 +492,7 @@ PROC_UNLOCK(p); CTR4(KTR_SIG, "sigreturn: return td=%p pc=%#lx sp=%#lx tstate=%#lx", - td, td->td_frame->tf_tpc, td->td_frame->tf_sp, - td->td_frame->tf_tstate); + td, tf->tf_tpc, tf->tf_sp, tf->tf_tstate); return (EJUSTRETURN); }