X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fum%2Fkernel%2Fframe_kern.c;h=809002dade5a5a736e3c04c7f81c29e629f4a4af;hb=6367666f534ee8fa9c6a7b667f38b5e445f85918;hp=fe215c9581e4267f0a860ae4ea6140e99881c665;hpb=8d40237c730b8be87c1b80a5d96b9c603fefa829;p=linux-2.6.git diff --git a/arch/um/kernel/frame_kern.c b/arch/um/kernel/frame_kern.c index fe215c958..809002dad 100644 --- a/arch/um/kernel/frame_kern.c +++ b/arch/um/kernel/frame_kern.c @@ -56,11 +56,11 @@ static int copy_ucontext_to_user(struct ucontext *uc, void *fp, sigset_t *set, } int setup_signal_stack_si(unsigned long stack_top, int sig, - struct k_sigaction *ka, struct pt_regs *regs, - siginfo_t *info, sigset_t *mask) + unsigned long handler, void (*restorer)(void), + struct pt_regs *regs, siginfo_t *info, + sigset_t *mask) { unsigned long start; - void *restorer; void *sip, *ucp, *fp; start = stack_top - signal_frame_si.common.len; @@ -68,10 +68,6 @@ int setup_signal_stack_si(unsigned long stack_top, int sig, ucp = (void *) (start + signal_frame_si.uc_index); fp = (void *) (((unsigned long) ucp) + sizeof(struct ucontext)); - restorer = NULL; - if(ka->sa.sa_flags & SA_RESTORER) - restorer = ka->sa.sa_restorer; - if(restorer == NULL) panic("setup_signal_stack_si - no restorer"); @@ -89,26 +85,21 @@ int setup_signal_stack_si(unsigned long stack_top, int sig, signal_frame_si.common.sr_relative)) return(1); - PT_REGS_IP(regs) = (unsigned long) ka->sa.sa_handler; + PT_REGS_IP(regs) = handler; PT_REGS_SP(regs) = start + signal_frame_si.common.sp_index; return(0); } int setup_signal_stack_sc(unsigned long stack_top, int sig, - struct k_sigaction *ka, struct pt_regs *regs, - sigset_t *mask) + unsigned long handler, void (*restorer)(void), + struct pt_regs *regs, sigset_t *mask) { struct frame_common *frame = &signal_frame_sc_sr.common; - void *restorer; void *user_sc; int sig_size = (_NSIG_WORDS - 1) * sizeof(unsigned long); unsigned long sigs, sr; unsigned long start = stack_top - frame->len - sig_size; - restorer = NULL; - if(ka->sa.sa_flags & SA_RESTORER) - restorer = ka->sa.sa_restorer; - user_sc = (void *) (start + signal_frame_sc_sr.sc_index); if(restorer == NULL){ frame = &signal_frame_sc.common; @@ -130,7 +121,7 @@ int setup_signal_stack_sc(unsigned long stack_top, int sig, copy_restorer(restorer, start, frame->sr_index, frame->sr_relative)) return(1); - PT_REGS_IP(regs) = (unsigned long) ka->sa.sa_handler; + PT_REGS_IP(regs) = handler; PT_REGS_SP(regs) = start + frame->sp_index; return(0);