|
|
|
@ -135,19 +135,11 @@ static inline int rt_setup_sigcontext(struct sigcontext *sc, struct pt_regs *reg |
|
|
|
|
return err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, |
|
|
|
|
static inline void *get_sigframe(struct ksignal *ksig, |
|
|
|
|
size_t frame_size) |
|
|
|
|
{ |
|
|
|
|
unsigned long usp; |
|
|
|
|
unsigned long usp = sigsp(rdusp(), ksig); |
|
|
|
|
|
|
|
|
|
/* Default to using normal stack. */ |
|
|
|
|
usp = rdusp(); |
|
|
|
|
|
|
|
|
|
/* This is the X/Open sanctioned signal stack switching. */ |
|
|
|
|
if (ka->sa.sa_flags & SA_ONSTACK) { |
|
|
|
|
if (!on_sig_stack(usp)) |
|
|
|
|
usp = current->sas_ss_sp + current->sas_ss_size; |
|
|
|
|
} |
|
|
|
|
return (void *)((usp - frame_size) & -8UL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -157,7 +149,7 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) |
|
|
|
|
struct rt_sigframe *frame; |
|
|
|
|
int err = 0; |
|
|
|
|
|
|
|
|
|
frame = get_sigframe(&ksig->ka, regs, sizeof(*frame)); |
|
|
|
|
frame = get_sigframe(ksig, sizeof(*frame)); |
|
|
|
|
|
|
|
|
|
err |= __put_user((current_thread_info()->exec_domain |
|
|
|
|
&& current_thread_info()->exec_domain->signal_invmap |
|
|
|
|