[DTrace-devel] [PATCH 06/15] Implement dt_bpf_raw_tracepoint_open()

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


Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_bpf.c | 15 +++++++++++++++
 libdtrace/dt_bpf.h |  1 +
 2 files changed, 16 insertions(+)

diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
index 6587ea95..3150d977 100644
--- a/libdtrace/dt_bpf.c
+++ b/libdtrace/dt_bpf.c
@@ -300,6 +300,21 @@ dt_bpf_map_update_inner(int fd, const void *okey, const void *ikey,
 	return rc;
 }
 
+/*
+ * Associate a BPF program (by fd) with a raw tracepoint.
+ */
+int
+dt_bpf_raw_tracepoint_open(const void *tp, int fd)
+{
+	union bpf_attr	attr;
+
+	memset(&attr, 0, sizeof(attr));
+	attr.raw_tracepoint.name = (uint64_t)(unsigned long)tp;
+	attr.raw_tracepoint.prog_fd = fd;
+
+	return bpf(BPF_RAW_TRACEPOINT_OPEN, &attr);
+}
+
 static int
 have_helper(uint32_t func_id)
 {
diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
index ab3862aa..9b6127d7 100644
--- a/libdtrace/dt_bpf.h
+++ b/libdtrace/dt_bpf.h
@@ -56,6 +56,7 @@ extern int dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey,
 				   void *val);
 extern int dt_bpf_map_update_inner(int fd, const void *okey, const void *ikey,
 				   const void *val);
+extern int dt_bpf_raw_tracepoint_open(const void *tp, int fd);
 extern int dt_bpf_load_progs(struct dtrace_hdl *, uint_t);
 extern void dt_bpf_init_helpers(struct dtrace_hdl *dtp);
 
-- 
2.39.1




More information about the DTrace-devel mailing list