Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/trap.c
Show First 20 Lines • Show All 993 Lines • ▼ Show 20 Lines | cpu_fetch_syscall_args_fallback(struct thread *td, struct syscall_args *sa) | ||||
regcnt = NARGREGS; | regcnt = NARGREGS; | ||||
if (sa->code == SYS_syscall || sa->code == SYS___syscall) { | if (sa->code == SYS_syscall || sa->code == SYS___syscall) { | ||||
sa->code = frame->tf_rdi; | sa->code = frame->tf_rdi; | ||||
reg++; | reg++; | ||||
regcnt--; | regcnt--; | ||||
} | } | ||||
syscall_read_barrier(); | |||||
if (sa->code >= p->p_sysent->sv_size) | if (sa->code >= p->p_sysent->sv_size) | ||||
sa->callp = &p->p_sysent->sv_table[0]; | sa->callp = &p->p_sysent->sv_table[0]; | ||||
else | else | ||||
sa->callp = &p->p_sysent->sv_table[sa->code]; | sa->callp = &p->p_sysent->sv_table[sa->code]; | ||||
sa->narg = sa->callp->sy_narg; | sa->narg = sa->callp->sy_narg; | ||||
KASSERT(sa->narg <= nitems(sa->args), ("Too many syscall arguments!")); | KASSERT(sa->narg <= nitems(sa->args), ("Too many syscall arguments!")); | ||||
argp = &frame->tf_rdi; | argp = &frame->tf_rdi; | ||||
Show All 26 Lines | cpu_fetch_syscall_args(struct thread *td) | ||||
sa->code = frame->tf_rax; | sa->code = frame->tf_rax; | ||||
if (__predict_false(sa->code == SYS_syscall || | if (__predict_false(sa->code == SYS_syscall || | ||||
sa->code == SYS___syscall || | sa->code == SYS___syscall || | ||||
sa->code >= p->p_sysent->sv_size)) | sa->code >= p->p_sysent->sv_size)) | ||||
return (cpu_fetch_syscall_args_fallback(td, sa)); | return (cpu_fetch_syscall_args_fallback(td, sa)); | ||||
syscall_read_barrier(); | |||||
sa->callp = &p->p_sysent->sv_table[sa->code]; | sa->callp = &p->p_sysent->sv_table[sa->code]; | ||||
sa->narg = sa->callp->sy_narg; | sa->narg = sa->callp->sy_narg; | ||||
KASSERT(sa->narg <= nitems(sa->args), ("Too many syscall arguments!")); | KASSERT(sa->narg <= nitems(sa->args), ("Too many syscall arguments!")); | ||||
if (__predict_false(sa->narg > NARGREGS)) | if (__predict_false(sa->narg > NARGREGS)) | ||||
return (cpu_fetch_syscall_args_fallback(td, sa)); | return (cpu_fetch_syscall_args_fallback(td, sa)); | ||||
memcpy(sa->args, &frame->tf_rdi, sizeof(sa->args[0]) * NARGREGS); | memcpy(sa->args, &frame->tf_rdi, sizeof(sa->args[0]) * NARGREGS); | ||||
▲ Show 20 Lines • Show All 150 Lines • Show Last 20 Lines |