[DTrace-devel] [PATCH v2 2/4] fbt: clean up fprobe/kprobe support
Kris Van Hees
kris.van.hees at oracle.com
Thu Dec 5 23:20:47 UTC 2024
Instead of leaking dt_fbt_fprobe outside of the FBT provider so that
there is *something* to represent the FBT provider, use a minimal
dt_fbt that does the job of providing a hook to the populate function,
which then will update dt_fbt from dt_fbt_fprobe o dt_fbt_kprobe
depending on what implementation is available (fprobe is preferred).
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_prov_fbt.c | 13 ++++++++++---
libdtrace/dt_provider.c | 2 +-
libdtrace/dt_provider.h | 3 +--
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/libdtrace/dt_prov_fbt.c b/libdtrace/dt_prov_fbt.c
index da288401..8d8545c4 100644
--- a/libdtrace/dt_prov_fbt.c
+++ b/libdtrace/dt_prov_fbt.c
@@ -57,6 +57,9 @@ static const dtrace_pattr_t pattr = {
{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
};
+dt_provimpl_t dt_fbt_fprobe;
+dt_provimpl_t dt_fbt_kprobe;
+
/*
* Scan the PROBE_LIST file and add entry and return probes for every function
* that is listed.
@@ -64,7 +67,6 @@ static const dtrace_pattr_t pattr = {
static int populate(dtrace_hdl_t *dtp)
{
dt_provider_t *prv;
- dt_provimpl_t *impl;
FILE *f;
char *buf = NULL;
char *p;
@@ -73,9 +75,9 @@ static int populate(dtrace_hdl_t *dtp)
dtrace_syminfo_t sip;
dtrace_probedesc_t pd;
- impl = BPF_HAS(dtp, BPF_FEAT_FENTRY) ? &dt_fbt_fprobe : &dt_fbt_kprobe;
+ dt_fbt = BPF_HAS(dtp, BPF_FEAT_FENTRY) ? dt_fbt_kprobe : dt_fbt_kprobe;
- prv = dt_provider_create(dtp, prvname, impl, &pattr, NULL);
+ prv = dt_provider_create(dtp, prvname, &dt_fbt, &pattr, NULL);
if (prv == NULL)
return -1; /* errno already set */
@@ -463,3 +465,8 @@ dt_provimpl_t dt_fbt_kprobe = {
.detach = &kprobe_detach,
.probe_destroy = &dt_tp_probe_destroy,
};
+
+dt_provimpl_t dt_fbt = {
+ .name = prvname,
+ .populate = &populate,
+};
diff --git a/libdtrace/dt_provider.c b/libdtrace/dt_provider.c
index ca8b53df..1e2e844e 100644
--- a/libdtrace/dt_provider.c
+++ b/libdtrace/dt_provider.c
@@ -30,7 +30,7 @@
const dt_provimpl_t *dt_providers[] = {
&dt_dtrace, /* list dt_dtrace first */
&dt_cpc,
- &dt_fbt_fprobe,
+ &dt_fbt,
&dt_io,
&dt_ip,
&dt_lockstat,
diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
index 8f143dce..f62137de 100644
--- a/libdtrace/dt_provider.h
+++ b/libdtrace/dt_provider.h
@@ -76,8 +76,7 @@ typedef struct dt_provimpl {
/* list dt_dtrace first */
extern dt_provimpl_t dt_dtrace;
extern dt_provimpl_t dt_cpc;
-extern dt_provimpl_t dt_fbt_fprobe;
-extern dt_provimpl_t dt_fbt_kprobe;
+extern dt_provimpl_t dt_fbt;
extern dt_provimpl_t dt_io;
extern dt_provimpl_t dt_ip;
extern dt_provimpl_t dt_lockstat;
--
2.45.2
More information about the DTrace-devel
mailing list