[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