sysent
struct sysentvec sysent;
(void)kvm_read(kd, (u_long)proc.p_sysent, (char *)&sysent,
sizeof(sysent));
(void)kvm_read(kd, (u_long)sysent.sv_name, (char *)&svname,
static struct sysent hello_sysent = {
.sv_table = sysent,
.sv_table = sysent,
struct sysent linux_sysent[] = {
extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
struct sysent linux32_sysent[] = {
error = imgp->sysent->sv_copyout_auxargs(imgp,
extern struct sysent linux32_sysent[LINUX32_SYS_MAXSYSCALL];
.sv_table = sysent,
struct sysentvec *sysent;
sysent = p->p_sysent;
*(sysent->sv_szsigcode));
.sv_table = sysent,
struct sysentvec *sysent;
sysent = p->p_sysent;
*(sysent->sv_szsigcode));
struct sysent linux_sysent[] = {
AUXARGS_ENTRY((*pos), LINUX_AT_HWCAP, *imgp->sysent->sv_hwcap);
AUXARGS_ENTRY((*pos), LINUX_AT_HWCAP2, *imgp->sysent->sv_hwcap2);
AUXARGS_ENTRY((*pos), LINUX_AT_HWCAP3, *imgp->sysent->sv_hwcap3);
AUXARGS_ENTRY((*pos), LINUX_AT_HWCAP4, *imgp->sysent->sv_hwcap4);
extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
#define SYSENT sysent
ASSERT(sysent[sysnum].sy_entry == DTRACE_IDNONE);
ASSERT(sysent[sysnum].sy_return == DTRACE_IDNONE);
extern struct sysent linux_sysent[];
extern struct sysent linux32_sysent[];
struct sysentvec *sysent;
sysent = imgp->sysent;
szsigcode = *sysent->sv_szsigcode;
error = copyout(sysent->sv_sigcode, (void *)destp,
error = imgp->sysent->sv_copyout_auxargs(imgp,
struct sysent freebsd32_sysent[] = {
extern struct sysent freebsd32_sysent[];
static struct sysent syscallname##_sysent32 = { \
error = imgp->sysent->sv_copyout_auxargs(imgp,
imgp->sysent->sv_minsigstksz);
MPASS((imgp->sysent->sv_flags & SV_ABI_MASK) == SV_ABI_LINUX);
MPASS((imgp->sysent->sv_flags & SV_ABI_MASK) == SV_ABI_LINUX);
sysent[SYS_chdir].sy_call = (sy_call_t *) filemon_wrapper_chdir;
sysent[SYS_open].sy_call = (sy_call_t *) filemon_wrapper_open;
sysent[SYS_openat].sy_call = (sy_call_t *) filemon_wrapper_openat;
sysent[SYS_rename].sy_call = (sy_call_t *) filemon_wrapper_rename;
sysent[SYS_unlink].sy_call = (sy_call_t *) filemon_wrapper_unlink;
sysent[SYS_link].sy_call = (sy_call_t *) filemon_wrapper_link;
sysent[SYS_symlink].sy_call = (sy_call_t *) filemon_wrapper_symlink;
sysent[SYS_linkat].sy_call = (sy_call_t *) filemon_wrapper_linkat;
sysent[SYS_chdir].sy_call = (sy_call_t *)sys_chdir;
sysent[SYS_open].sy_call = (sy_call_t *)sys_open;
sysent[SYS_openat].sy_call = (sy_call_t *)sys_openat;
sysent[SYS_rename].sy_call = (sy_call_t *)sys_rename;
sysent[SYS_unlink].sy_call = (sy_call_t *)sys_unlink;
sysent[SYS_link].sy_call = (sy_call_t *)sys_link;
sysent[SYS_symlink].sy_call = (sy_call_t *)sys_symlink;
sysent[SYS_linkat].sy_call = (sy_call_t *)sys_linkat;
static struct sysent pmc_sysent = {
.sv_table = sysent,
struct sysent linux_sysent[] = {
extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
.sv_table = sysent,
if ((imgp->sysent->sv_flags & SV_TIMEKEEP) != 0) {
vmspace->vm_shp_base + imgp->sysent->sv_timekeep_offset);
AUXARGS_ENTRY(pos, AT_STACKPROT, imgp->sysent->sv_shared_page_obj
imgp->sysent->sv_stackprot);
if (imgp->sysent->sv_hwcap != NULL)
AUXARGS_ENTRY(pos, AT_HWCAP, *imgp->sysent->sv_hwcap);
if (imgp->sysent->sv_hwcap2 != NULL)
AUXARGS_ENTRY(pos, AT_HWCAP2, *imgp->sysent->sv_hwcap2);
if (imgp->sysent->sv_hwcap3 != NULL)
AUXARGS_ENTRY(pos, AT_HWCAP3, *imgp->sysent->sv_hwcap3);
if (imgp->sysent->sv_hwcap4 != NULL)
AUXARGS_ENTRY(pos, AT_HWCAP4, *imgp->sysent->sv_hwcap4);
if ((imgp->sysent->sv_flags & SV_RNG_SEED_VER) != 0) {
vmspace->vm_shp_base + imgp->sysent->sv_fxrng_gen_offset);
if ((imgp->sysent->sv_flags & SV_DSO_SIG) != 0 && __elfN(vdso) != 0) {
vmspace->vm_shp_base + imgp->sysent->sv_vdso_offset);
struct sysent sysent[] = {
imgp->sysent = sv;
struct sysentvec *sysent;
sysent = p->p_sysent;
if (sysent->sv_shared_page_base == 0 && sysent->sv_szsigcode != NULL) {
szsigcode = *(sysent->sv_szsigcode);
error = copyout(sysent->sv_sigcode, (void *)destp, szsigcode);
error = imgp->sysent->sv_copyout_auxargs(imgp,
if ((imgp->sysent->sv_setid_allowed != NULL &&
!(*imgp->sysent->sv_setid_allowed)(td, imgp)) ||
struct sysent *se;
syscall_thread_exit(struct thread *td, struct sysent *se)
kern_syscall_register(struct sysent *sysents, int *offset,
struct sysent *new_sysent, struct sysent *old_sysent, int flags)
kern_syscall_deregister(struct sysent *sysents, int offset,
const struct sysent *old_sysent)
struct sysent *se;
return (kern_syscall_module_handler(sysent, mod, what, arg));
kern_syscall_module_handler(struct sysent *sysents, struct module *mod,
return (kern_syscall_helper_register(sysent, sd, flags));
kern_syscall_helper_register(struct sysent *sysents,
return (kern_syscall_helper_unregister(sysent, sd));
kern_syscall_helper_unregister(struct sysent *sysents,
struct sysent nosys_sysent = {
syscall_thread_drain(struct sysent *se)
syscall_thread_enter(struct thread *td, struct sysent **se)
struct sysent *se;
return (sysent[SYS_shmat].sy_call(td, &ap));
return (sysent[SYS_shmdt].sy_call(td, &ap));
return (sysent[SYS_shmget].sy_call(td, &ap));
.sv_table = sysent,
.sv_table = sysent,
.sv_table = sysent,
if ((imgp->sysent->sv_flags & SV_TIMEKEEP) != 0) {
vmspace->vm_shp_base + imgp->sysent->sv_timekeep_offset);
AUXARGS_ENTRY(pos, AT_OLD_STACKPROT, imgp->sysent->sv_shared_page_obj
imgp->sysent->sv_stackprot);
if (imgp->sysent->sv_hwcap != NULL)
AUXARGS_ENTRY(pos, AT_OLD_HWCAP, *imgp->sysent->sv_hwcap);
if (imgp->sysent->sv_hwcap2 != NULL)
AUXARGS_ENTRY(pos, AT_OLD_HWCAP2, *imgp->sysent->sv_hwcap2);
if (imgp->sysent->sv_hwcap3 != NULL)
.sv_table = sysent,
struct sysentvec *sysent;
sysent = p->p_sysent;
*(sysent->sv_szsigcode));
if (sysent[i].sy_auevent != AUE_NULL)
au_evclassmap_insert(sysent[i].sy_auevent, 0);
struct sysentvec *sysent; /* system entry vector */
struct sysent *callp;
struct sysent *sv_table; /* pointer to sysent */
extern struct sysent sysent[];
extern struct sysent nosys_sysent;
struct sysent *new_sysent; /* new sysent */
struct sysent old_sysent; /* old sysent */
static struct sysent syscallname##_sysent = SYSENT_INIT_VALS(syscallname);
static struct sysent syscallname##_sysent = { \
(sysent[SYS_##syscallname].sy_call != (sy_call_t *)lkmnosys && \
sysent[SYS_##syscallname].sy_call != (sy_call_t *)lkmressys)
struct sysent new_sysent;
struct sysent old_sysent;
int kern_syscall_register(struct sysent *sysents, int *offset,
struct sysent *new_sysent, struct sysent *old_sysent, int flags);
int kern_syscall_deregister(struct sysent *sysents, int offset,
const struct sysent *old_sysent);
int kern_syscall_module_handler(struct sysent *sysents,
int kern_syscall_helper_register(struct sysent *sysents,
int kern_syscall_helper_unregister(struct sysent *sysents,
int syscall_thread_enter(struct thread *td, struct sysent **se);
void syscall_thread_exit(struct thread *td, struct sysent *se);
struct sysent;
struct sysent test_sysent[] = {