[DTrace-devel] [PATCH 4/7] provider: let dependent probe trampoline use parent probe

Kris Van Hees kris.van.hees at oracle.com
Tue May 9 22:31:10 UTC 2023


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 */
-- 
2.40.1




More information about the DTrace-devel mailing list