[DTrace-devel] [PATCH 1/2] error: report probe name on failed enabling error
Kris Van Hees
kris.van.hees at oracle.com
Mon Mar 17 18:51:05 UTC 2025
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_bpf.c | 35 +++++++++++++++++++++++------------
libdtrace/dt_bpf.h | 2 ++
libdtrace/dt_error.c | 2 ++
libdtrace/dt_prov_uprobe.c | 15 +++------------
4 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
index 662fd81a..e50bb536 100644
--- a/libdtrace/dt_bpf.c
+++ b/libdtrace/dt_bpf.c
@@ -64,6 +64,25 @@ dt_bpf_error(dtrace_hdl_t *dtp, const char *fmt, ...)
return dt_set_errno(dtp, EDT_BPF);
}
+int
+dt_attach_error(dtrace_hdl_t *dtp, int rc, ...)
+{
+ va_list ap, apc;
+ char *fmt;
+
+ if (asprintf(&fmt, "Failed to enable %%s:%%s:%%s:%%s: %s",
+ dtrace_errmsg(dtp, -rc)) > 0) {
+ va_start(ap, rc);
+ va_copy(apc, ap);
+ dt_set_errmsg(dtp, NULL, NULL, NULL, 0, fmt, ap);
+ va_end(ap);
+ dt_debug_printf("bpf", "Failed to enable %s:%s:%s:%s", apc);
+ va_end(apc);
+ }
+
+ return dt_set_errno(dtp, EDT_ENABLING_ERR);
+}
+
int
dt_bpf_lockmem_error(dtrace_hdl_t *dtp, const char *msg)
{
@@ -1335,19 +1354,11 @@ dt_bpf_load_progs(dtrace_hdl_t *dtp, uint_t cflags)
if (prp->prov->impl->attach)
rc = prp->prov->impl->attach(dtp, prp, fd);
- if (rc == -ENOTSUPP) {
- char *s;
-
- close(fd);
- if (asprintf(&s, "Failed to enable %s:%s:%s:%s",
- prp->desc->prv, prp->desc->mod,
- prp->desc->fun, prp->desc->prb) == -1)
- return dt_set_errno(dtp, EDT_ENABLING_ERR);
- dt_handle_rawerr(dtp, s);
- free(s);
- } else if (rc < 0) {
+ if (rc < 0) {
close(fd);
- return dt_set_errno(dtp, EDT_ENABLING_ERR);
+ return dt_attach_error(dtp, rc,
+ prp->desc->prv, prp->desc->mod,
+ prp->desc->fun, prp->desc->prb);
}
}
diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
index 85934d2d..464f0189 100644
--- a/libdtrace/dt_bpf.h
+++ b/libdtrace/dt_bpf.h
@@ -67,6 +67,8 @@ extern int dt_perf_event_open(struct perf_event_attr *attr, pid_t pid, int cpu,
int group_fd, unsigned long flags);
extern int dt_bpf(enum bpf_cmd cmd, union bpf_attr *attr);
+extern int dt_attach_error(struct dtrace_hdl *, int, ...);
+
extern int dt_bpf_gmap_create(struct dtrace_hdl *);
extern int dt_bpf_lockmem_error(struct dtrace_hdl *dtp, const char *msg);
diff --git a/libdtrace/dt_error.c b/libdtrace/dt_error.c
index 213f0d9e..6721e8e4 100644
--- a/libdtrace/dt_error.c
+++ b/libdtrace/dt_error.c
@@ -111,6 +111,8 @@ dtrace_errmsg(dtrace_hdl_t *dtp, int error)
if (error == EDT_COMPILER && dtp != NULL && dtp->dt_errmsg[0] != '\0')
str = dtp->dt_errmsg;
+ if (error == EDT_ENABLING_ERR && dtp != NULL && dtp->dt_errmsg[0] != '\0')
+ str = dtp->dt_errmsg;
else if (error == EDT_BPF && dtp != NULL && dtp->dt_errmsg[0] != '\0')
str = dtp->dt_errmsg;
else if (error == EDT_CTF && dtp != NULL && dtp->dt_ctferr != 0)
diff --git a/libdtrace/dt_prov_uprobe.c b/libdtrace/dt_prov_uprobe.c
index 17f2f7ee..96a59aef 100644
--- a/libdtrace/dt_prov_uprobe.c
+++ b/libdtrace/dt_prov_uprobe.c
@@ -385,19 +385,10 @@ static int add_probe_uprobe(dtrace_hdl_t *dtp, dt_probe_t *prp)
if (prp->prov->impl->attach)
rc = prp->prov->impl->attach(dtp, prp, fd);
- if (rc == -ENOTSUPP) {
- char *s;
-
- close(fd);
- if (asprintf(&s, "Failed to enable %s:%s:%s:%s",
- prp->desc->prv, prp->desc->mod,
- prp->desc->fun, prp->desc->prb) == -1)
- return dt_set_errno(dtp, EDT_ENABLING_ERR);
- dt_handle_rawerr(dtp, s);
- free(s);
- } else if (rc < 0) {
+ if (rc < 0) {
close(fd);
- return dt_set_errno(dtp, EDT_ENABLING_ERR);
+ return dt_attach_error(dtp, rc, prp->desc->prv, prp->desc->mod,
+ prp->desc->fun, prp->desc->prb);
}
return 0;
--
2.43.5
More information about the DTrace-devel
mailing list