/* * Handle indirect system calls. * This interface should be deprecated. The library can handle * this more efficiently, but keep this implementation for old binaries. * * XX64 Needs some work. */ int64_t indir(int code, long a0, long a1, long a2, long a3, long a4) { klwp_t *lwp = ttolwp(curthread); struct sysent *callp; if (code <= 0 || code >= NSYSCALL) return (nosys()); ASSERT(lwp->lwp_ap != NULL); curthread->t_sysnum = code; callp = LWP_GETSYSENT(lwp) + code; /* * Handle argument setup, unless already done in pre_syscall(). */ if (callp->sy_narg > 5) { if (save_syscall_args()) /* move args to LWP array */ return ((int64_t)set_errno(EFAULT)); } else if (!lwp->lwp_argsaved) { long *ap; ap = lwp->lwp_ap; /* args haven't been saved */ lwp->lwp_ap = ap + 1; /* advance arg pointer */ curthread->t_post_sys = 1; /* so lwp_ap will be reset */ } return ((*callp->sy_callc)(a0, a1, a2, a3, a4, lwp->lwp_arg[5])); }
/* * Indirect syscall handled in libc on x86 architectures */ int64_t indir() { return (nosys()); }
int lkmressys(struct thread *td, struct nosys_args *args) { return (nosys(td, args)); }