frame->tf_iioq_head -= 4;  frame->tf_iioq_tail -= 4;
frame->tf_iioq_head -= 12; frame->tf_iioq_tail -= 12;
syscall(frame, args)	struct trapframe *frame;	int *args;{	register struct proc *p;	register const struct sysent *callp;	int nsys, code, argsize, error;	int rval[2];	uvmexp.syscalls++;	if (!USERMODE(frame->tf_iioq_head))		panic("syscall");	p = curproc;	p->p_md.md_regs = frame;	nsys = p->p_emul->e_nsysent;	callp = p->p_emul->e_sysent;	code = frame->tf_t1;	switch (code) {	case SYS_syscall:		code = *args;		args += 1;		break;	case SYS___syscall:		if (callp != sysent)			break;		code = *args;		args += 2;	}	if (code < 0 || code >= nsys)		callp += p->p_emul->e_nosys;	/* bad syscall # */	else		callp += code;	argsize = callp->sy_argsize;#ifdef SYSCALL_DEBUG	scdebug_call(p, code, args);#endif#ifdef KTRACE	if (KTRPOINT(p, KTR_SYSCALL))		ktrsyscall(p, code, argsize, args);#endif	rval[0] = 0;	rval[1] = 0;	switch (error = (*callp->sy_call)(p, args, rval)) {	case 0:		p = curproc;			/* changes on exec() */		frame = p->p_md.md_regs;		frame->tf_ret0 = rval[0];		frame->tf_ret1 = rval[1];		frame->tf_t1 = 0;		break;	case ERESTART:		frame->tf_iioq_head -= 4; /* right? XXX */		frame->tf_iioq_tail -= 4; /* right? XXX */		break;	case EJUSTRETURN:		p = curproc;		break;	default:		if (p->p_emul->e_errno)			error = p->p_emul->e_errno[error];		frame->tf_t1 = error;		break;	}#ifdef SYSCALL_DEBUG	scdebug_ret(p, code, error, rval);#endif	userret(p, frame->tf_iioq_head, 0);#ifdef KTRACE	if (KTRPOINT(p, KTR_SYSRET))		ktrsysret(p, code, error, rval[0]);#endif}