[DTrace-devel] [PATCH 04/12] Add ability to provide user-specified probes on demand

eugene.loh at oracle.com eugene.loh at oracle.com
Sat Jul 11 17:38:28 PDT 2020


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_probe.c    | 14 ++++++++++++++
 libdtrace/dt_provider.h |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index 4068fb83..5add8ae6 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -1084,6 +1084,7 @@ dt_probe_iter(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
 	dtrace_probedesc_t	desc;
 	dt_probe_t		tmpl;
 	dt_probe_t		*prp;
+	dt_provider_t		*pvp;
 	int			i;
 	int			p_is_glob, m_is_glob, f_is_glob, n_is_glob;
 	int			rv = 0;
@@ -1143,6 +1144,19 @@ dt_probe_iter(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
 
 	tmpl.desc = pdp;
 
+	/*
+	 * Loop over providers, allowing them to provide these probes.
+	 */
+	for (pvp = dt_list_next(&dtp->dt_provlist);
+	    pvp != NULL; pvp = dt_list_next(pvp)) {
+		if (pvp->impl->provide == NULL ||
+		    !dt_gmatch(pvp->desc.dtvd_name, pdp->prv))
+			continue;
+		memcpy(&desc, pdp, sizeof (desc));
+		desc.prv = pvp->desc.dtvd_name;
+		pvp->impl->provide(dtp, &desc);
+	}
+
 	/*
 	 * Special case: if the probe is fully specified (none of the elements
 	 * are empty of a glob pattern, we can do a direct lookup based on the
diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
index e98bfac1..4f488460 100644
--- a/libdtrace/dt_provider.h
+++ b/libdtrace/dt_provider.h
@@ -59,6 +59,8 @@ typedef struct dt_provimpl {
 	const char *name;			/* provider generic name */
 	int prog_type;				/* BPF program type */
 	int (*populate)(dtrace_hdl_t *dtp);	/* register probes */
+	int (*provide)(dtrace_hdl_t *dtp,	/* provide probes */
+		       const dtrace_probedesc_t *pdp);
 	int (*probe_info)(dtrace_hdl_t *dtp,	/* get probe info */
 			  const struct dt_probe *prp,
 			  int *idp, int *argcp, dt_argdesc_t **argvp);
-- 
2.18.2




More information about the DTrace-devel mailing list