[DTrace-devel] [PATCH 07/15] provider: Add support for attaching to raw tracepoints

Kris Van Hees kris.van.hees at oracle.com
Thu Feb 23 07:24:01 UTC 2023


Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_provider.h    |  2 ++
 libdtrace/dt_provider_tp.c | 24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
index a7f6c95b..21f66a94 100644
--- a/libdtrace/dt_provider.h
+++ b/libdtrace/dt_provider.h
@@ -116,6 +116,8 @@ extern struct dt_probe *dt_tp_probe_insert(dtrace_hdl_t *dtp,
 					   const char *fun, const char *prb);
 extern int dt_tp_probe_attach(dtrace_hdl_t *dtp, const struct dt_probe *prp,
 			      int bpf_fd);
+extern int dt_tp_probe_attach_raw(dtrace_hdl_t *dtp, const struct dt_probe *prp,
+				  int bpf_fd);
 extern void dt_tp_probe_detach(dtrace_hdl_t *dtp, const struct dt_probe *prp);
 extern void dt_tp_probe_destroy(dtrace_hdl_t *dtp, void *datap);
 
diff --git a/libdtrace/dt_provider_tp.c b/libdtrace/dt_provider_tp.c
index 7388bb94..55e62033 100644
--- a/libdtrace/dt_provider_tp.c
+++ b/libdtrace/dt_provider_tp.c
@@ -318,6 +318,30 @@ dt_tp_probe_attach(dtrace_hdl_t *dtp, const dt_probe_t *prp, int bpf_fd)
 	return dt_tp_attach(dtp, prp->prv_data, bpf_fd);
 }
 
+/*
+ * Convenience function for raw  tracepoint-based probe attach.
+ */
+int
+dt_tp_probe_attach_raw(dtrace_hdl_t *dtp, const dt_probe_t *prp, int bpf_fd)
+{
+	tp_probe_t	*tpp = prp->prv_data;
+
+	if (tpp->event_id != -1)
+		tpp->event_id = INT_MAX;
+
+	if (tpp->event_fd == -1) {
+		int			fd;
+
+		fd = dt_bpf_raw_tracepoint_open(prp->desc->prb, bpf_fd);
+		if (fd < 0)
+			return -errno;
+
+		tpp->event_fd = fd;
+	}
+
+	return 0;
+}
+
 /*
  * Convenience function for basic tracepoint-based probe detach.
  */
-- 
2.39.1




More information about the DTrace-devel mailing list