[DTrace-devel] [PATCH 4/7] provider: let dependent probe trampoline use parent probe
Eugene Loh
eugene.loh at oracle.com
Thu May 11 19:42:52 UTC 2023
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
On 5/9/23 18:31, Kris Van Hees via DTrace-devel wrote:
> Future providers that are implemented as dependent probes on other
> probes may need to know what parent probe they are to generate a
> trampoline for. Store it in the PCB.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_cg.c | 5 +++--
> libdtrace/dt_pcb.h | 1 +
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index c8e95168..94c1c1ba 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -588,11 +588,11 @@ dt_cg_add_dependent(dtrace_hdl_t *dtp, dt_probe_t *prp, void *arg)
> dt_pcb_t *pcb = dtp->dt_pcb;
> dt_irlist_t *dlp = &pcb->pcb_ir;
> dt_ident_t *idp = dt_dlib_add_probe_var(pcb->pcb_hdl, prp);
> - dt_probe_t *saved_prp = pcb->pcb_probe;
> uint_t exitlbl = dt_irlist_label(dlp);
> int skip = 0;
>
> dt_cg_tramp_save_args(pcb);
> + pcb->pcb_parent_probe = pcb->pcb_probe;
> pcb->pcb_probe = prp;
> emite(dlp, BPF_STORE_IMM(BPF_W, BPF_REG_7, DMST_PRID, prp->desc->id), idp);
> if (prp->prov->impl->trampoline != NULL)
> @@ -601,7 +601,8 @@ dt_cg_add_dependent(dtrace_hdl_t *dtp, dt_probe_t *prp, void *arg)
> if (!skip)
> dt_cg_tramp_call_clauses(pcb, prp, DT_ACTIVITY_ACTIVE);
>
> - pcb->pcb_probe = saved_prp;
> + pcb->pcb_probe = pcb->pcb_parent_probe;
> + pcb->pcb_parent_probe = NULL;
> dt_cg_tramp_restore_args(pcb);
> emitl(dlp, exitlbl,
> BPF_NOP());
> diff --git a/libdtrace/dt_pcb.h b/libdtrace/dt_pcb.h
> index c6427317..f80848a2 100644
> --- a/libdtrace/dt_pcb.h
> +++ b/libdtrace/dt_pcb.h
> @@ -48,6 +48,7 @@ typedef struct dt_pcb {
> ulong_t **pcb_asxrefs; /* assembler imported xlators (see dt_as.c) */
> uint_t pcb_asxreflen; /* assembler xlator map length (see dt_as.c) */
> const dtrace_probedesc_t *pcb_pdesc; /* probedesc for current context */
> + struct dt_probe *pcb_parent_probe; /* parent of PCB probe */
> struct dt_probe *pcb_probe; /* probe associated with current context */
> dtrace_probeinfo_t pcb_pinfo; /* info associated with current context */
> dtrace_datadesc_t *pcb_ddesc; /* data record description */
More information about the DTrace-devel
mailing list