[DTrace-devel] [PATCH 1/2] cg: optional 5th arg for dt_cg_subr_arg_to_tstring() calls
Kris Van Hees
kris.van.hees at oracle.com
Fri Sep 15 20:27:37 UTC 2023
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_cg.c | 35 ++++++++++++++++++++++-------------
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 0c518953..56b59260 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -4629,15 +4629,16 @@ dt_cg_array_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
/*
* Emit code to call a precompiled BPF function (named by fname)
- * that is of return type void and takes three or four arguments:
+ * that is of return type void and takes between three and five arguments:
* - a pointer to the DTrace context (dctx)
* - one input value
* - a pointer to an output tstring, allocated here
- * - an optional uint32_t value
+ * - two optional uint32_t values
*/
static void
dt_cg_subr_arg_to_tstring(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
- const char *fname, int isreg, uint32_t val)
+ const char *fname, int isreg4, uint32_t val4,
+ int isreg5, uint32_t val5)
{
dt_ident_t *idp;
dt_node_t *arg = dnp->dn_args;
@@ -4671,10 +4672,15 @@ dt_cg_subr_arg_to_tstring(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
emit(dlp, BPF_MOV_REG(BPF_REG_3, dnp->dn_reg));
- if (isreg == DT_ISREG)
- emit(dlp, BPF_MOV_REG(BPF_REG_4, val));
- else if (isreg == DT_ISIMM)
- emit(dlp, BPF_MOV_IMM(BPF_REG_4, val));
+ if (isreg4 == DT_ISREG)
+ emit(dlp, BPF_MOV_REG(BPF_REG_4, val4));
+ else if (isreg4 == DT_ISIMM)
+ emit(dlp, BPF_MOV_IMM(BPF_REG_4, val4));
+
+ if (isreg5 == DT_ISREG)
+ emit(dlp, BPF_MOV_REG(BPF_REG_5, val5));
+ else if (isreg5 == DT_ISIMM)
+ emit(dlp, BPF_MOV_IMM(BPF_REG_5, val5));
idp = dt_dlib_get_func(yypcb->pcb_hdl, fname);
assert(idp != NULL);
@@ -4689,13 +4695,15 @@ dt_cg_subr_arg_to_tstring(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
static void
dt_cg_subr_basename(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
{
- dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_basename", DT_IGNOR, 0);
+ dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_basename", DT_IGNOR, 0,
+ DT_IGNOR, 0);
}
static void
dt_cg_subr_dirname(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
{
- dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_dirname", DT_IGNOR, 0);
+ dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_dirname", DT_IGNOR, 0,
+ DT_IGNOR, 0);
}
static void
@@ -4760,7 +4768,8 @@ dt_cg_subr_index(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
static void
dt_cg_subr_lltostr(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
{
- dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_lltostr", DT_IGNOR, 0);
+ dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_lltostr", DT_IGNOR, 0,
+ DT_IGNOR, 0);
}
static void
@@ -5924,7 +5933,8 @@ dt_cg_subr_htonll(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
static void
dt_cg_subr_inet_ntoa(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
{
- dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_inet_ntoa", DT_IGNOR, 0);
+ dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_inet_ntoa", DT_IGNOR, 0,
+ DT_IGNOR, 0);
}
static void
@@ -5983,7 +5993,7 @@ dt_cg_subr_inet_ntoa6(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
longjmp(yypcb->pcb_jmpbuf, EDT_STR2BIG);
dt_cg_subr_arg_to_tstring(dnp, dlp, drp, "dt_inet_ntoa6",
- DT_ISIMM, tbloff);
+ DT_ISIMM, tbloff, DT_IGNOR, 0);
}
static void
@@ -6019,7 +6029,6 @@ dt_cg_subr_inet_ntop(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
xnp = dt_node_type(ddp); /* frees ddp */
/* Create a node to represent: (type)addr */
xnp = dt_node_op2(DT_TOK_LPAR, xnp, addr);
-
lnp->dn_args = xnp; /* inet_ntoa6((type)addr) */
/* Create a node for the function call: inet_ntoa(addr) */
--
2.40.1
More information about the DTrace-devel
mailing list