[DTrace-devel] [PATCH 11/15] dlib: Add dt_dlib_add_probe_var()
Kris Van Hees
kris.van.hees at oracle.com
Thu Feb 23 07:24:11 UTC 2023
This new function defines a BPF symbol (variable) with the fully
qualified probe name as name, and the probe ID as value.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_dlibs.c | 17 +++++++++++++++++
libdtrace/dt_impl.h | 2 ++
libdtrace/dt_prov_uprobe.c | 7 ++-----
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/libdtrace/dt_dlibs.c b/libdtrace/dt_dlibs.c
index eea0ba41..e3196b63 100644
--- a/libdtrace/dt_dlibs.c
+++ b/libdtrace/dt_dlibs.c
@@ -12,6 +12,7 @@
#include <port.h>
#include <dt_parser.h>
#include <dt_program.h>
+#include <dt_probe.h>
#include <dt_grammar.h>
#include <dt_impl.h>
#include <dt_bpf.h>
@@ -235,6 +236,22 @@ dt_dlib_add_var(dtrace_hdl_t *dtp, const char *name, uint_t id)
return dt_dlib_add_sym_id(dtp, name, DT_IDENT_SCALAR, id);
}
+/*
+ * Add a BPF variable for a probe.
+ * The fully qualified probe name is tha variable name, and the probe ID is the
+ * value of the variable.
+ */
+dt_ident_t *
+dt_dlib_add_probe_var(dtrace_hdl_t *dtp, const dt_probe_t *prp)
+{
+ char pn[DTRACE_FULLNAMELEN + 1];
+
+ snprintf(pn, DTRACE_FULLNAMELEN, "%s:%s:%s:%s", prp->desc->prv,
+ prp->desc->mod, prp->desc->fun, prp->desc->prb);
+
+ return dt_dlib_add_var(dtp, pn, prp->desc->id);
+}
+
/*
* Return the DIFO for an external symbol.
*/
diff --git a/libdtrace/dt_impl.h b/libdtrace/dt_impl.h
index 9edef5ab..46db2878 100644
--- a/libdtrace/dt_impl.h
+++ b/libdtrace/dt_impl.h
@@ -738,6 +738,8 @@ extern dt_ident_t *dt_dlib_get_func(dtrace_hdl_t *, const char *);
extern dt_ident_t *dt_dlib_get_map(dtrace_hdl_t *, const char *);
extern dt_ident_t *dt_dlib_add_var(dtrace_hdl_t *dtp, const char *name,
uint_t id);
+extern dt_ident_t *dt_dlib_add_probe_var(dtrace_hdl_t *dtp,
+ const struct dt_probe *prp);
extern dt_ident_t *dt_dlib_get_var(dtrace_hdl_t *, const char *);
extern dtrace_difo_t *dt_dlib_get_func_difo(dtrace_hdl_t *, const dt_ident_t *);
extern void dt_dlib_reset(dtrace_hdl_t *dtp, boolean_t);
diff --git a/libdtrace/dt_prov_uprobe.c b/libdtrace/dt_prov_uprobe.c
index 2d77176f..1ab1fe98 100644
--- a/libdtrace/dt_prov_uprobe.c
+++ b/libdtrace/dt_prov_uprobe.c
@@ -397,17 +397,14 @@ static void trampoline(dt_pcb_t *pcb)
const dt_probe_t *pprp = pop->probe;
uint_t lbl_next = dt_irlist_label(dlp);
pid_t pid;
- char pn[DTRACE_FULLNAMELEN + 1];
dt_ident_t *idp;
pid = dt_pid_get_pid(pprp->desc, pcb->pcb_hdl, pcb, NULL);
assert(pid != -1);
- snprintf(pn, DTRACE_FULLNAMELEN, "%s:%s:%s:%s",
- pprp->desc->prv, pprp->desc->mod, pprp->desc->fun,
- pprp->desc->prb);
- idp = dt_dlib_add_var(pcb->pcb_hdl, pn, pprp->desc->id);
+ idp = dt_dlib_add_probe_var(pcb->pcb_hdl, pprp);
assert(idp != NULL);
+
/*
* Check whether this pid-provider probe serves the current
* process, and emit a sequence of clauses for it when it does.
--
2.39.1
More information about the DTrace-devel
mailing list