frame -= 128; 
((unsigned char *) frame) -= 128; 
int setup_signal_stack_si(unsigned long stack_top, int sig,			  struct k_sigaction *ka, struct pt_regs * regs,			  siginfo_t *info, sigset_t *set){	struct rt_sigframe __user *frame;	struct _fpstate __user *fp = NULL;	int err = 0;	struct task_struct *me = current;	frame = (struct rt_sigframe __user *)		round_down(stack_top - sizeof(struct rt_sigframe), 16) - 8;	frame -= 128;	if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate)))		goto out;#if 0 /* XXX */	if (save_i387(fp) < 0)		err |= -1;#endif	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))		goto out;	if (ka->sa.sa_flags & SA_SIGINFO) {		err |= copy_siginfo_to_user(&frame->info, info);		if (err)			goto out;	}	/* Create the ucontext.  */	err |= __put_user(0, &frame->uc.uc_flags);	err |= __put_user(0, &frame->uc.uc_link);	err |= __put_user(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp);	err |= __put_user(sas_ss_flags(PT_REGS_SP(regs)),			  &frame->uc.uc_stack.ss_flags);	err |= __put_user(me->sas_ss_size, &frame->uc.uc_stack.ss_size);	err |= copy_sc_to_user(&frame->uc.uc_mcontext, fp, regs, set->sig[0]);	err |= __put_user(fp, &frame->uc.uc_mcontext.fpstate);	if (sizeof(*set) == 16) {		__put_user(set->sig[0], &frame->uc.uc_sigmask.sig[0]);		__put_user(set->sig[1], &frame->uc.uc_sigmask.sig[1]);	}	else		err |= __copy_to_user(&frame->uc.uc_sigmask, set,				      sizeof(*set));	/* Set up to return from userspace.  If provided, use a stub	   already in userspace.  */	/* x86-64 should always use SA_RESTORER. */	if (ka->sa.sa_flags & SA_RESTORER)		err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);	else		/* could use a vstub here */		goto out;	if (err)		goto out;	/* Set up registers for signal handler */	{		struct exec_domain *ed = current_thread_info()->exec_domain;		if (unlikely(ed && ed->signal_invmap && sig < 32))			sig = ed->signal_invmap[sig];	}	PT_REGS_RDI(regs) = sig;	/* In case the signal handler was declared without prototypes */	PT_REGS_RAX(regs) = 0;	/* This also works for non SA_SIGINFO handlers because they expect the	   next argument after the signal number on the stack. */	PT_REGS_RSI(regs) = (unsigned long) &frame->info;	PT_REGS_RDX(regs) = (unsigned long) &frame->uc;	PT_REGS_RIP(regs) = (unsigned long) ka->sa.sa_handler;	PT_REGS_RSP(regs) = (unsigned long) frame; out:	return(err);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/2d58cc9a437f3833d242e9d1617ec9b4044e26f3/signal.c/clean/arch/um/sys-x86_64/signal.c