[DTrace-devel] [PATCH 03/12] cg: reserve %r7 and %r8 in trampolines
Kris Van Hees
kris.van.hees at oracle.com
Fri Jan 5 05:26:54 UTC 2024
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_cg.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 30b1da16..d9d56f0a 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -1,6 +1,6 @@
/*
* Oracle Linux DTrace.
- * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved.
* Licensed under the Universal Permissive License v 1.0 as shown at
* http://oss.oracle.com/licenses/upl.
*/
@@ -138,6 +138,7 @@ dt_cg_tramp_prologue_act(dt_pcb_t *pcb, dt_activity_t act)
{
dtrace_hdl_t *dtp = pcb->pcb_hdl;
dt_irlist_t *dlp = &pcb->pcb_ir;
+ dt_regset_t *drp = pcb->pcb_regs;
dt_ident_t *aggs = dt_dlib_get_map(dtp, "aggs");
dt_ident_t *mem = dt_dlib_get_map(dtp, "mem");
dt_ident_t *state = dt_dlib_get_map(dtp, "state");
@@ -151,6 +152,10 @@ dt_cg_tramp_prologue_act(dt_pcb_t *pcb, dt_activity_t act)
assert(prid != NULL);
assert(ro_off != NULL);
+ /* Reserve %r7 and %r8. */
+ dt_regset_xalloc(drp, BPF_REG_7);
+ dt_regset_xalloc(drp, BPF_REG_8);
+
/*
* On input, %r1 is the BPF context.
*
@@ -718,6 +723,7 @@ void
dt_cg_tramp_return(dt_pcb_t *pcb)
{
dt_irlist_t *dlp = &pcb->pcb_ir;
+ dt_regset_t *drp = pcb->pcb_regs;
/*
* exit:
@@ -728,6 +734,10 @@ dt_cg_tramp_return(dt_pcb_t *pcb)
emitl(dlp, pcb->pcb_exitlbl,
BPF_MOV_IMM(BPF_REG_0, 0));
emit(dlp, BPF_RETURN());
+
+ /* Free %r7 and %r8. */
+ dt_regset_free(drp, BPF_REG_7);
+ dt_regset_free(drp, BPF_REG_8);
}
void
--
2.42.0
More information about the DTrace-devel
mailing list