svn commit: r367959 - in head/sys: kern sys
Konstantin Belousov
kib at FreeBSD.org
Mon Nov 23 17:29:27 UTC 2020
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. */
More information about the svn-src-all
mailing list