From c4443570b616a998fb115e9ea8e02aaa8291c538 Mon Sep 17 00:00:00 2001 From: jb Date: Sat, 24 May 2008 06:22:16 +0000 Subject: Add DTrace 'proc' provider probes using the Statically Defined Trace (sdt) mechanism. --- sys/kern/kern_fork.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'sys/kern/kern_fork.c') diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 7dc42f4..8387532 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -37,6 +37,7 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_kdtrace.h" #include "opt_ktrace.h" #include "opt_mac.h" @@ -63,6 +64,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -75,6 +77,16 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef KDTRACE_HOOKS +#include +dtrace_fork_func_t dtrace_fasttrap_fork; +#endif + +SDT_PROVIDER_DECLARE(proc); +SDT_PROBE_DEFINE(proc, kernel, , create); +SDT_PROBE_ARGTYPE(proc, kernel, , create, 0, "struct proc *"); +SDT_PROBE_ARGTYPE(proc, kernel, , create, 1, "struct proc *"); +SDT_PROBE_ARGTYPE(proc, kernel, , create, 2, "int"); #ifndef _SYS_SYSPROTO_H_ struct fork_args { @@ -626,6 +638,15 @@ again: p2->p_pfsflags = p1->p_pfsflags; } +#ifdef KDTRACE_HOOKS + /* + * Tell the DTrace fasttrap provider about the new process + * if it has registered an interest. + */ + if (dtrace_fasttrap_fork) + dtrace_fasttrap_fork(p1, p2); +#endif + /* * This begins the section where we must prevent the parent * from being swapped. @@ -715,6 +736,8 @@ again: PROC_UNLOCK(p1); + SDT_PROBE(proc, kernel, , create, p2, p1, flags, 0, 0); + /* * Preserve synchronization semantics of vfork. If waiting for * child to exec or exit, set P_PPWAIT on child, and sleep on our -- cgit v1.1