[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