diff options
author | Chris Zankel <chris@zankel.net> | 2008-02-12 12:22:15 -0800 |
---|---|---|
committer | Chris Zankel <chris@zankel.net> | 2008-02-13 17:12:15 -0800 |
commit | 3befce8f0f79be8322aba885ed052b8ad927913d (patch) | |
tree | 37c163b1e2e488fd9dad269570302637201f3ec7 /arch/xtensa/kernel/signal.c | |
parent | 8d7e8240e66cecc84a375aceb26942d02b291198 (diff) | |
download | op-kernel-dev-3befce8f0f79be8322aba885ed052b8ad927913d.zip op-kernel-dev-3befce8f0f79be8322aba885ed052b8ad927913d.tar.gz |
[XTENSA] Remove oldmask from sigcontext and fix register flush
Remove oldmask from the sigcontext structure. Also update wmask
and windowstart when we flush the AR registers to stack.
Signed-off-by: Chris Zankel <chris@zankel.net>
Diffstat (limited to 'arch/xtensa/kernel/signal.c')
-rw-r--r-- | arch/xtensa/kernel/signal.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c index 033aae0..42d9fd8 100644 --- a/arch/xtensa/kernel/signal.c +++ b/arch/xtensa/kernel/signal.c @@ -49,8 +49,6 @@ struct rt_sigframe /* * Flush register windows stored in pt_regs to stack. * Returns 1 for errors. - * - * Note that windowbase, windowstart, and wmask are not updated! */ int @@ -116,6 +114,9 @@ flush_window_regs_user(struct pt_regs *regs) base += inc; } + regs->wmask = 1; + regs->windowstart = 1 << wb; + return 0; errout: @@ -132,7 +133,7 @@ errout: static int setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate, - struct pt_regs *regs, unsigned long mask) + struct pt_regs *regs) { int err = 0; @@ -155,8 +156,6 @@ setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate, err |= save_cpextra(cpstate); err |= __put_user(err ? NULL : cpstate, &sc->sc_cpstate); #endif - /* non-iBCS2 extensions.. */ - err |= __put_user(mask, &sc->oldmask); return err; } @@ -360,8 +359,7 @@ static void setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info, err |= __put_user(sas_ss_flags(regs->areg[1]), &frame->uc.uc_stack.ss_flags); err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); - err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->cpstate, - regs, set->sig[0]); + err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->cpstate, regs); err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); /* Create sys_rt_sigreturn syscall in stack frame */ |