[DTrace-devel] [PATCH 10/16] Export dt_cg_tramp_call_clauses() and dt_cg_tramp_return()

Kris Van Hees kris.van.hees at oracle.com
Thu Mar 18 21:54:43 PDT 2021


This patch also makes the probe argument to dt_cg_tramp_call_clauses()
const since that is what dt_probe_clause_iter() enforces.

The dt_cg_tramp_call_clauses() and dt_cg_tramp_return() functions
were only being used from dt_cg_tramp_epilogue() and its *_advance()
variant.  More complex providers have a need for calling them directly
to have more control over the trampoline epilogue creation.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_cg.c | 7 ++++---
 libdtrace/dt_cg.h | 4 ++++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index e6a7c7fc..9ffc5834 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -194,8 +194,9 @@ dt_cg_call_clause(dtrace_hdl_t *dtp, dt_ident_t *idp, dt_clause_arg_t *arg)
 	return 0;
 }
 
-static void
-dt_cg_tramp_call_clauses(dt_pcb_t *pcb, dt_probe_t *prp, dt_activity_t act)
+void
+dt_cg_tramp_call_clauses(dt_pcb_t *pcb, const dt_probe_t *prp,
+			 dt_activity_t act)
 {
 	dt_irlist_t	*dlp = &pcb->pcb_ir;
 	dt_clause_arg_t	arg = { dlp, act, pcb->pcb_exitlbl };
@@ -204,7 +205,7 @@ dt_cg_tramp_call_clauses(dt_pcb_t *pcb, dt_probe_t *prp, dt_activity_t act)
 			     (dt_clause_f *)dt_cg_call_clause, &arg);
 }
 
-static void
+void
 dt_cg_tramp_return(dt_pcb_t *pcb)
 {
 	dt_irlist_t	*dlp = &pcb->pcb_ir;
diff --git a/libdtrace/dt_cg.h b/libdtrace/dt_cg.h
index daeaa9a1..be430c28 100644
--- a/libdtrace/dt_cg.h
+++ b/libdtrace/dt_cg.h
@@ -10,6 +10,7 @@
 
 #include <dt_as.h>
 #include <dt_pcb.h>
+#include <dt_probe.h>
 #include <dt_state.h>
 
 #ifdef	__cplusplus
@@ -21,6 +22,9 @@ extern void dt_cg_xsetx(dt_irlist_t *, dt_ident_t *, uint_t, int, uint64_t);
 extern dt_irnode_t *dt_cg_node_alloc(uint_t, struct bpf_insn);
 extern void dt_cg_tramp_prologue_act(dt_pcb_t *pcb, dt_activity_t act);
 extern void dt_cg_tramp_prologue(dt_pcb_t *pcb);
+extern void dt_cg_tramp_call_clauses(dt_pcb_t *pcb, const dt_probe_t *prp,
+				     dt_activity_t act);
+extern void dt_cg_tramp_return(dt_pcb_t *pcb);
 extern void dt_cg_tramp_epilogue(dt_pcb_t *pcb);
 extern void dt_cg_tramp_epilogue_advance(dt_pcb_t *pcb, dt_activity_t act);
 extern void dt_cg_tramp_error(dt_pcb_t *pcb);
-- 
2.28.0




More information about the DTrace-devel mailing list