Author: kib Date: Mon Nov 23 17:29:25 2020 New Revision: 367959 URL: https://svnweb.freebsd.org/changeset/base/367959
Log: Provide ABI modules hooks for process exec/exit and thread exit. Exec and exit are same as corresponding eventhandler hooks. Thread exit hook is called somewhat earlier, while thread is still owned by the process and enough context is available. Note that the process lock is owned when the hook is called. Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D27309 Modified: head/sys/kern/kern_exec.c head/sys/kern/kern_exit.c head/sys/kern/kern_kthread.c head/sys/kern/kern_thr.c head/sys/sys/sysent.h Modified: head/sys/kern/kern_exec.c ============================================================================== --- head/sys/kern/kern_exec.c Mon Nov 23 17:00:06 2020 (r367958) +++ head/sys/kern/kern_exec.c Mon Nov 23 17:29:25 2020 (r367959) @@ -1051,6 +1051,8 @@ exec_new_vmspace(struct image_params *imgp, struct sys sigfastblock_clear(td); umtx_exec(p); itimers_exec(p); + if (sv->sv_onexec != NULL) + sv->sv_onexec(p, imgp); EVENTHANDLER_DIRECT_INVOKE(process_exec, p, imgp); Modified: head/sys/kern/kern_exit.c ============================================================================== --- head/sys/kern/kern_exit.c Mon Nov 23 17:00:06 2020 (r367958) +++ head/sys/kern/kern_exit.c Mon Nov 23 17:29:25 2020 (r367959) @@ -72,6 +72,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sdt.h> #include <sys/shm.h> #include <sys/sem.h> +#include <sys/sysent.h> #include <sys/timers.h> #include <sys/umtx.h> #ifdef KTRACE @@ -327,6 +328,9 @@ exit1(struct thread *td, int rval, int signo) itimers_exit(p); + if (p->p_sysent->sv_onexit != NULL) + p->p_sysent->sv_onexit(p); + /* * Check if any loadable modules need anything done at process exit. * E.g. SYSV IPC stuff. @@ -560,6 +564,9 @@ exit1(struct thread *td, int rval, int signo) /* Save exit status. */ PROC_LOCK(p); p->p_xthread = td; + + if (p->p_sysent->sv_ontdexit != NULL) + p->p_sysent->sv_ontdexit(td); #ifdef KDTRACE_HOOKS /* Modified: head/sys/kern/kern_kthread.c ============================================================================== --- head/sys/kern/kern_kthread.c Mon Nov 23 17:00:06 2020 (r367958) +++ head/sys/kern/kern_kthread.c Mon Nov 23 17:29:25 2020 (r367959) @@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include <sys/resourcevar.h> #include <sys/rwlock.h> #include <sys/signalvar.h> +#include <sys/sysent.h> #include <sys/sx.h> #include <sys/umtx.h> #include <sys/unistd.h> @@ -355,6 +356,10 @@ kthread_exit(void) PROC_UNLOCK(p); kproc_exit(0); } + + if (p->p_sysent->sv_ontdexit != NULL) + p->p_sysent->sv_ontdexit(td); + tidhash_remove(td); umtx_thread_exit(td); tdsigcleanup(td); Modified: head/sys/kern/kern_thr.c ============================================================================== --- head/sys/kern/kern_thr.c Mon Nov 23 17:00:06 2020 (r367958) +++ head/sys/kern/kern_thr.c Mon Nov 23 17:29:25 2020 (r367959) @@ -353,6 +353,9 @@ kern_thr_exit(struct thread *td) return (0); } + if (p->p_sysent->sv_ontdexit != NULL) + p->p_sysent->sv_ontdexit(td); + td->td_dbgflags |= TDB_EXIT; if (p->p_ptevents & PTRACE_LWP) { p->p_pendingexits++; Modified: head/sys/sys/sysent.h ============================================================================== --- head/sys/sys/sysent.h Mon Nov 23 17:00:06 2020 (r367958) +++ head/sys/sys/sysent.h Mon Nov 23 17:29:25 2020 (r367959) @@ -145,6 +145,9 @@ struct sysentvec { u_long *sv_hwcap2; /* Value passed in AT_HWCAP2. */ const char *(*sv_machine_arch)(struct proc *); vm_offset_t sv_fxrng_gen_base; + void (*sv_onexec)(struct proc *, struct image_params *); + void (*sv_onexit)(struct proc *); + void (*sv_ontdexit)(struct thread *td); }; #define SV_ILP32 0x000100 /* 32-bit executable. */ _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"