Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/linux/linux_sysvec.c
Show First 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | static int linux_elf_fixup(uintptr_t *stack_base, | ||||
struct image_params *iparams); | struct image_params *iparams); | ||||
static bool linux_trans_osrel(const Elf_Note *note, int32_t *osrel); | static bool linux_trans_osrel(const Elf_Note *note, int32_t *osrel); | ||||
static void linux_vdso_install(const void *param); | static void linux_vdso_install(const void *param); | ||||
static void linux_vdso_deinstall(const void *param); | static void linux_vdso_deinstall(const void *param); | ||||
static void linux_set_syscall_retval(struct thread *td, int error); | static void linux_set_syscall_retval(struct thread *td, int error); | ||||
static int linux_fetch_syscall_args(struct thread *td); | static int linux_fetch_syscall_args(struct thread *td); | ||||
static void linux_exec_setregs(struct thread *td, struct image_params *imgp, | static void linux_exec_setregs(struct thread *td, struct image_params *imgp, | ||||
uintptr_t stack); | uintptr_t stack); | ||||
static int linux_vsyscall(struct thread *td); | |||||
/* DTrace init */ | /* DTrace init */ | ||||
LIN_SDT_PROVIDER_DECLARE(LINUX_DTRACE); | LIN_SDT_PROVIDER_DECLARE(LINUX_DTRACE); | ||||
/* DTrace probes */ | /* DTrace probes */ | ||||
LIN_SDT_PROBE_DEFINE2(sysvec, linux_translate_traps, todo, "int", "int"); | LIN_SDT_PROBE_DEFINE2(sysvec, linux_translate_traps, todo, "int", "int"); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_exec_setregs, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_exec_setregs, todo); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_copyout_auxargs, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_copyout_auxargs, todo); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_elf_fixup, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_elf_fixup, todo); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_rt_sigreturn, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_rt_sigreturn, todo); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_rt_sendsig, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_rt_sendsig, todo); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_vsyscall, todo); | |||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_vdso_install, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_vdso_install, todo); | ||||
LIN_SDT_PROBE_DEFINE0(sysvec, linux_vdso_deinstall, todo); | LIN_SDT_PROBE_DEFINE0(sysvec, linux_vdso_deinstall, todo); | ||||
/* LINUXTODO: do we have traps to translate? */ | /* LINUXTODO: do we have traps to translate? */ | ||||
static int | static int | ||||
linux_translate_traps(int signal, int trap_code) | linux_translate_traps(int signal, int trap_code) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 282 Lines • ▼ Show 20 Lines | |||||
static void | static void | ||||
linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) | linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) | ||||
{ | { | ||||
/* LINUXTODO: implement */ | /* LINUXTODO: implement */ | ||||
LIN_SDT_PROBE0(sysvec, linux_rt_sendsig, todo); | LIN_SDT_PROBE0(sysvec, linux_rt_sendsig, todo); | ||||
} | } | ||||
static int | |||||
linux_vsyscall(struct thread *td) | |||||
{ | |||||
/* LINUXTODO: implement */ | |||||
LIN_SDT_PROBE0(sysvec, linux_vsyscall, todo); | |||||
return (EDOOFUS); | |||||
} | |||||
struct sysentvec elf_linux_sysvec = { | struct sysentvec elf_linux_sysvec = { | ||||
.sv_size = LINUX_SYS_MAXSYSCALL, | .sv_size = LINUX_SYS_MAXSYSCALL, | ||||
.sv_table = linux_sysent, | .sv_table = linux_sysent, | ||||
.sv_transtrap = linux_translate_traps, | .sv_transtrap = linux_translate_traps, | ||||
.sv_fixup = linux_elf_fixup, | .sv_fixup = linux_elf_fixup, | ||||
.sv_sendsig = linux_rt_sendsig, | .sv_sendsig = linux_rt_sendsig, | ||||
.sv_sigcode = &_binary_linux_locore_o_start, | .sv_sigcode = &_binary_linux_locore_o_start, | ||||
.sv_szsigcode = &linux_szsigcode, | .sv_szsigcode = &linux_szsigcode, | ||||
Show All 18 Lines | .sv_flags = SV_ABI_LINUX | SV_LP64 | SV_SHP | SV_SIG_DISCIGN | | ||||
SV_SIG_WAITNDQ, | SV_SIG_WAITNDQ, | ||||
.sv_set_syscall_retval = linux_set_syscall_retval, | .sv_set_syscall_retval = linux_set_syscall_retval, | ||||
.sv_fetch_syscall_args = linux_fetch_syscall_args, | .sv_fetch_syscall_args = linux_fetch_syscall_args, | ||||
.sv_syscallnames = NULL, | .sv_syscallnames = NULL, | ||||
.sv_shared_page_base = SHAREDPAGE, | .sv_shared_page_base = SHAREDPAGE, | ||||
.sv_shared_page_len = PAGE_SIZE, | .sv_shared_page_len = PAGE_SIZE, | ||||
.sv_schedtail = linux_schedtail, | .sv_schedtail = linux_schedtail, | ||||
.sv_thread_detach = linux_thread_detach, | .sv_thread_detach = linux_thread_detach, | ||||
.sv_trap = linux_vsyscall, | .sv_trap = NULL, | ||||
.sv_hwcap = &elf_hwcap, | .sv_hwcap = &elf_hwcap, | ||||
.sv_hwcap2 = &elf_hwcap2, | .sv_hwcap2 = &elf_hwcap2, | ||||
.sv_onexec = linux_on_exec, | .sv_onexec = linux_on_exec, | ||||
.sv_onexit = linux_on_exit, | .sv_onexit = linux_on_exit, | ||||
.sv_ontdexit = linux_thread_dtor, | .sv_ontdexit = linux_thread_dtor, | ||||
.sv_setid_allowed = &linux_setid_allowed_query, | .sv_setid_allowed = &linux_setid_allowed_query, | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 138 Lines • Show Last 20 Lines |