[DTrace-devel] [PATCH 32/61] Add dt_cg_push_stack()

Kris Van Hees kris.van.hees at oracle.com
Tue Aug 9 03:52:56 UTC 2022


On Mon, Aug 08, 2022 at 01:25:49PM -0700, Eugene Loh wrote:
> Should I post a v2 patch that has this patch squashed into "Add support for
> aggregation keys"?  Or does that just create unnecessary churn for you?

I can merge the two together - no worries.
Thanks.

> On 8/5/22 11:41, Kris Van Hees wrote:
> > Let's defer this and add it to the patch that introduces dt_cg_pop_stack()
> > as well.  That (I think) makes more sense, and in the meantime the existing
> > code can just remain.  I was planning on introducing such functions down the
> > road anyway as part of the spill/fill rewrite but since you have a use for
> > it now, let's do it with the other patch:
> > 
> > 	"Add support for aggregation keys"
> > 
> > On Fri, Jul 08, 2022 at 10:45:16AM -0400, eugene.loh--- via DTrace-devel wrote:
> > > From: Eugene Loh <eugene.loh at oracle.com>
> > > 
> > > This patch prepares for future, additional uses of this stack.
> > > 
> > > Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> > > ---
> > >   libdtrace/dt_cg.c | 26 +++++++++++++++++---------
> > >   1 file changed, 17 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> > > index 11a9c8c5..b0c2a362 100644
> > > --- a/libdtrace/dt_cg.c
> > > +++ b/libdtrace/dt_cg.c
> > > @@ -2607,6 +2607,22 @@ dt_cg_typecast(const dt_node_t *src, const dt_node_t *dst,
> > >   	}
> > >   }
> > > +static void
> > > +dt_cg_push_stack(dt_irlist_t *dlp, dt_regset_t *drp, int reg)
> > > +{
> > > +	int tmp;
> > > +
> > > +	if ((tmp = dt_regset_alloc(drp)) == -1)
> > > +		longjmp(yypcb->pcb_jmpbuf, EDT_NOREG);
> > > +
> > > +	emit(dlp, BPF_LOAD(BPF_DW, tmp, BPF_REG_FP, DT_STK_SP));
> > > +	emit(dlp, BPF_STORE(BPF_DW, tmp, 0, reg));
> > > +	dt_regset_free(drp, reg);
> > > +	emit(dlp, BPF_ALU64_IMM(BPF_ADD, tmp, -DT_STK_SLOT_SZ));
> > > +	emit(dlp, BPF_STORE(BPF_DW, BPF_REG_FP, DT_STK_SP, tmp));
> > > +	dt_regset_free(drp, tmp);
> > > +}
> > > +
> > >   /*
> > >    * Generate code to push the specified argument list on to the tuple stack.
> > >    * We use this routine for handling the index tuple for associative arrays.
> > > @@ -2644,15 +2660,7 @@ dt_cg_arglist(dt_ident_t *idp, dt_node_t *args, dt_irlist_t *dlp,
> > >   			longjmp(yypcb->pcb_jmpbuf, EDT_NOTUPREG);
> > >   		dt_cg_node(dnp, dlp, drp);
> > > -
> > > -		/* Push the component (pointer or value) onto the stack. */
> > > -		dt_regset_xalloc(drp, BPF_REG_0);
> > > -		emit(dlp, BPF_LOAD(BPF_DW, BPF_REG_0, BPF_REG_FP, DT_STK_SP));
> > > -		emit(dlp, BPF_STORE(BPF_DW, BPF_REG_0, 0, dnp->dn_reg));
> > > -		dt_regset_free(drp, dnp->dn_reg);
> > > -		emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, -DT_STK_SLOT_SZ));
> > > -		emit(dlp, BPF_STORE(BPF_DW, BPF_REG_FP, DT_STK_SP, BPF_REG_0));
> > > -		dt_regset_free(drp, BPF_REG_0);
> > > +		dt_cg_push_stack(dlp, drp, dnp->dn_reg);
> > >   	}
> > >   	TRACE_REGSET("      arglist: Stack");
> > > -- 
> > > 2.18.4
> > > 
> > > 
> > > _______________________________________________
> > > DTrace-devel mailing list
> > > DTrace-devel at oss.oracle.com
> > > https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list