rem: memcpy(code_ptr, i386_return_from_signal, (i386_end_return_from_signal - i386_return_from_signal));
add: memcpy(code_ptr, i386_return_from_signal, ((uint32)i386_end_return_from_signal - (uint32)i386_return_from_signal));
context: arch_setup_signal_frame(struct thread *t, struct sigaction *sa, int sig, int sig_mask){	struct iframe *frame = t->arch_info.current_iframe;	uint32 *stack_ptr = (uint32 *)frame->user_esp;	uint32 *code_ptr;	uint32 *regs_ptr;	struct vregs *regs;		if (frame->orig_eax >= 0) {		// we're coming from a syscall		if ((frame->eax == EINTR) && (sa->sa_flags & SA_RESTART)) {			dprintf("### restarting syscall %d after signal %d\n", frame->orig_eax, sig);			frame->eax = frame->orig_eax;			frame->edx = frame->orig_edx;			frame->eip -= 2;		}	}		stack_ptr -= 192;	code_ptr = stack_ptr + 32;	regs_ptr = stack_ptr + 64;		stack_ptr[0] = (uint32)code_ptr;	// return address when sa_handler done	stack_ptr[1] = sig;					// first argument to sa_handler	stack_ptr[2] = (uint32)sa->sa_userdata;// second argument to sa_handler	stack_ptr[3] = (uint32)regs_ptr;	// third argument to sa_handler	stack_ptr[4] = sig_mask;			// Old signal mask to restore	stack_ptr[5] = (uint32)regs_ptr;	// Int frame + extra regs to restore		memcpy(code_ptr, i386_return_from_signal, (i386_end_return_from_signal - i386_return_from_signal));		regs = (struct vregs *)regs_ptr;	regs->eip = frame->eip;	regs->eflags = frame->flags;	regs->eax = frame->eax;	regs->ecx = frame->ecx;	regs->edx = frame->edx;	regs->esp = frame->esp;	regs->_reserved_1 = frame->user_esp;	regs->_reserved_2[0] = frame->edi;	regs->_reserved_2[1] = frame->esi;	regs->_reserved_2[2] = frame->ebp;	i386_fsave((void *)(&regs->xregs));		frame->user_esp = (uint32)stack_ptr;	frame->eip = (uint32)sa->sa_handler;}