[DTrace-devel] [PATCH 18/38] Add a provider-specific probe_add_clause for underlying probes
Kris Van Hees
kris.van.hees at oracle.com
Thu Jul 18 20:50:01 UTC 2024
See comments in 16/38
On Thu, Jun 27, 2024 at 01:34:35AM -0400, eugene.loh at oracle.com wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> ---
> libdtrace/dt_prov_uprobe.c | 34 ++++++++++++++++++++++++++++++++++
> 1 file changed, 34 insertions(+)
>
> diff --git a/libdtrace/dt_prov_uprobe.c b/libdtrace/dt_prov_uprobe.c
> index c77063a8..5dbd75e3 100644
> --- a/libdtrace/dt_prov_uprobe.c
> +++ b/libdtrace/dt_prov_uprobe.c
> @@ -129,6 +129,38 @@ static void probe_destroy(dtrace_hdl_t *dtp, void *datap)
> free_probe_list(dtp, datap);
> }
>
> +/*
> + * Add clause to probe.
> + */
> +static int probe_add_clause(dtrace_hdl_t *dtp, dt_probe_t *prp, dt_ident_t *idp)
> +{
> + const list_probe_t *pup;
> +
> + for (pup = prp->prv_data; pup != NULL; pup = dt_list_next(pup)) {
> + dt_probe_t *uprp = pup->probe;
> + dt_probe_clause_t *prev, *pcp;
> +
> + /*
> + * Check if the clause is already there. Since the clauses
> + * are added "in order," we only need to check the previous
> + * entry.
> + */
> + prev = dt_list_prev(&uprp->clauses);
> + if (prev && strcmp(prev->clause->di_name, idp->di_name) == 0)
> + continue;
> +
> + /*
> + * Add the clause.
> + */
> + pcp = dt_zalloc(dtp, sizeof(dt_probe_clause_t));
> + if (pcp == NULL)
> + return -1;
> + pcp->clause = idp;
> + dt_list_append(&uprp->clauses, pcp);
> + }
> +
> + return 0;
> +}
>
> /*
> * Look up or create an underlying (real) probe, corresponding directly to a
> @@ -811,6 +843,7 @@ dt_provimpl_t dt_pid = {
> .prog_type = BPF_PROG_TYPE_UNSPEC,
> .provide_probe = &provide_pid_probe,
> .enable = &enable_pid,
> + .probe_add_clause = &probe_add_clause,
> .probe_destroy = &probe_destroy,
> };
>
> @@ -822,5 +855,6 @@ dt_provimpl_t dt_usdt = {
> .prog_type = BPF_PROG_TYPE_UNSPEC,
> .provide_probe = &provide_usdt_probe,
> .enable = &enable_usdt,
> + .probe_add_clause = &probe_add_clause,
> .probe_destroy = &probe_destroy,
> };
> --
> 2.18.4
>
More information about the DTrace-devel
mailing list