提交 3befce8f 编写于 作者: C Chris Zankel

[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: NChris Zankel <chris@zankel.net>
上级 8d7e8240
...@@ -49,8 +49,6 @@ struct rt_sigframe ...@@ -49,8 +49,6 @@ struct rt_sigframe
/* /*
* Flush register windows stored in pt_regs to stack. * Flush register windows stored in pt_regs to stack.
* Returns 1 for errors. * Returns 1 for errors.
*
* Note that windowbase, windowstart, and wmask are not updated!
*/ */
int int
...@@ -116,6 +114,9 @@ flush_window_regs_user(struct pt_regs *regs) ...@@ -116,6 +114,9 @@ flush_window_regs_user(struct pt_regs *regs)
base += inc; base += inc;
} }
regs->wmask = 1;
regs->windowstart = 1 << wb;
return 0; return 0;
errout: errout:
...@@ -132,7 +133,7 @@ flush_window_regs_user(struct pt_regs *regs) ...@@ -132,7 +133,7 @@ flush_window_regs_user(struct pt_regs *regs)
static int static int
setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate, setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate,
struct pt_regs *regs, unsigned long mask) struct pt_regs *regs)
{ {
int err = 0; int err = 0;
...@@ -155,8 +156,6 @@ setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate, ...@@ -155,8 +156,6 @@ setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate,
err |= save_cpextra(cpstate); err |= save_cpextra(cpstate);
err |= __put_user(err ? NULL : cpstate, &sc->sc_cpstate); err |= __put_user(err ? NULL : cpstate, &sc->sc_cpstate);
#endif #endif
/* non-iBCS2 extensions.. */
err |= __put_user(mask, &sc->oldmask);
return err; return err;
} }
...@@ -360,8 +359,7 @@ static void setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -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]), err |= __put_user(sas_ss_flags(regs->areg[1]),
&frame->uc.uc_stack.ss_flags); &frame->uc.uc_stack.ss_flags);
err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->cpstate, err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->cpstate, regs);
regs, set->sig[0]);
err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
/* Create sys_rt_sigreturn syscall in stack frame */ /* Create sys_rt_sigreturn syscall in stack frame */
......
...@@ -13,9 +13,6 @@ ...@@ -13,9 +13,6 @@
struct sigcontext { struct sigcontext {
unsigned long oldmask;
/* CPU registers */
unsigned long sc_pc; unsigned long sc_pc;
unsigned long sc_ps; unsigned long sc_ps;
unsigned long sc_lbeg; unsigned long sc_lbeg;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册