[DTrace-devel] [PATCH 13/15] cg: Pass exit label to trampoline
Kris Van Hees
kris.van.hees at oracle.com
Thu Feb 23 07:24:17 UTC 2023
Some trampolines will need to be able to gemerate code for some form of
pre-conditions. It therefore needs to know a jump label that will be
positioned right after the trampoline being generated.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_cg.c | 2 +-
libdtrace/dt_prov_dtrace.c | 2 +-
libdtrace/dt_prov_fbt.c | 2 +-
libdtrace/dt_prov_profile.c | 2 +-
libdtrace/dt_prov_rawtp.c | 2 +-
libdtrace/dt_prov_sdt.c | 2 +-
libdtrace/dt_prov_syscall.c | 2 +-
libdtrace/dt_prov_uprobe.c | 2 +-
libdtrace/dt_provider.h | 3 ++-
9 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index f1d05d6c..4b619cc7 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -6960,7 +6960,7 @@ dt_cg(dt_pcb_t *pcb, dt_node_t *dnp)
assert(pcb->pcb_probe != NULL);
if (pcb->pcb_probe->prov->impl->trampoline != NULL)
- pcb->pcb_probe->prov->impl->trampoline(pcb);
+ pcb->pcb_probe->prov->impl->trampoline(pcb, pcb->pcb_exitlbl);
} else
dt_cg_node(dnp, &pcb->pcb_ir, pcb->pcb_regs);
diff --git a/libdtrace/dt_prov_dtrace.c b/libdtrace/dt_prov_dtrace.c
index 4a587efc..38158ace 100644
--- a/libdtrace/dt_prov_dtrace.c
+++ b/libdtrace/dt_prov_dtrace.c
@@ -77,7 +77,7 @@ static int populate(dtrace_hdl_t *dtp)
* The trampoline will populate a dt_dctx_t struct and then call the function
* that implements the compiled D clause. It returns 0 to the caller.
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
dt_irlist_t *dlp = &pcb->pcb_ir;
dt_activity_t act = DT_ACTIVITY_ACTIVE;
diff --git a/libdtrace/dt_prov_fbt.c b/libdtrace/dt_prov_fbt.c
index fdedb0be..add76c55 100644
--- a/libdtrace/dt_prov_fbt.c
+++ b/libdtrace/dt_prov_fbt.c
@@ -148,7 +148,7 @@ static int populate(dtrace_hdl_t *dtp)
* The trampoline will populate a dt_dctx_t struct and then call the function
* that implements the compiled D clause. It returns 0 to the caller.
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
dt_cg_tramp_prologue(pcb);
diff --git a/libdtrace/dt_prov_profile.c b/libdtrace/dt_prov_profile.c
index 6d1d3a80..60dad547 100644
--- a/libdtrace/dt_prov_profile.c
+++ b/libdtrace/dt_prov_profile.c
@@ -213,7 +213,7 @@ static int provide(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp)
* __u64 addr;
* }
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
int i;
dt_irlist_t *dlp = &pcb->pcb_ir;
diff --git a/libdtrace/dt_prov_rawtp.c b/libdtrace/dt_prov_rawtp.c
index 58b0947f..ac95df34 100644
--- a/libdtrace/dt_prov_rawtp.c
+++ b/libdtrace/dt_prov_rawtp.c
@@ -131,7 +131,7 @@ static int populate(dtrace_hdl_t *dtp)
* that implements the compiled D clause. It returns the value that it gets
* back from that function.
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
int i;
dt_irlist_t *dlp = &pcb->pcb_ir;
diff --git a/libdtrace/dt_prov_sdt.c b/libdtrace/dt_prov_sdt.c
index ca47cf41..dd0d06f0 100644
--- a/libdtrace/dt_prov_sdt.c
+++ b/libdtrace/dt_prov_sdt.c
@@ -128,7 +128,7 @@ static int populate(dtrace_hdl_t *dtp)
* that implements the compiled D clause. It returns the value that it gets
* back from that function.
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
int i;
dt_irlist_t *dlp = &pcb->pcb_ir;
diff --git a/libdtrace/dt_prov_syscall.c b/libdtrace/dt_prov_syscall.c
index 518340a9..18d451f8 100644
--- a/libdtrace/dt_prov_syscall.c
+++ b/libdtrace/dt_prov_syscall.c
@@ -131,7 +131,7 @@ static int populate(dtrace_hdl_t *dtp)
* The trampoline will populate a dt_dctx_t struct and then call the function
* that implements the compiled D clause. It returns 0 to the caller.
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
int i;
dt_irlist_t *dlp = &pcb->pcb_ir;
diff --git a/libdtrace/dt_prov_uprobe.c b/libdtrace/dt_prov_uprobe.c
index 1ab1fe98..f85d1529 100644
--- a/libdtrace/dt_prov_uprobe.c
+++ b/libdtrace/dt_prov_uprobe.c
@@ -344,7 +344,7 @@ static void enable(dtrace_hdl_t *dtp, dt_probe_t *prp)
* The trampoline will first populate a dt_dctx_t struct. It will then emulate
* the firing of all dependent pid* probes and their clauses.
*/
-static void trampoline(dt_pcb_t *pcb)
+static void trampoline(dt_pcb_t *pcb, uint_t exitlbl)
{
dt_irlist_t *dlp = &pcb->pcb_ir;
const dt_probe_t *prp = pcb->pcb_probe;
diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
index 49563f35..92fa7d55 100644
--- a/libdtrace/dt_provider.h
+++ b/libdtrace/dt_provider.h
@@ -66,7 +66,8 @@ typedef struct dt_provimpl {
const pid_probespec_t *psp);
void (*enable)(dtrace_hdl_t *dtp, /* enable the given probe */
struct dt_probe *prp);
- void (*trampoline)(dt_pcb_t *pcb); /* generate BPF trampoline */
+ void (*trampoline)(dt_pcb_t *pcb, /* generate BPF trampoline */
+ uint_t exitlbl);
int (*attach)(dtrace_hdl_t *dtp, /* attach BPF prog to probe */
const struct dt_probe *prp, int bpf_fd);
int (*probe_info)(dtrace_hdl_t *dtp, /* get probe info */
--
2.39.1
More information about the DTrace-devel
mailing list