[DTrace-devel] [PATCH 01/20] Correct storage size assignment for variables
Kris Van Hees
kris.van.hees at oracle.com
Tue Jun 8 06:11:30 PDT 2021
On Tue, Jun 08, 2021 at 02:05:00AM -0400, Eugene Loh wrote:
> Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
>
> I understand the commit message, but I don't understand the parser and
> so I cannot say I really reviewed this. I'm curious though: no tests?
> Or, are the tests in the alignment patch? If so, should the two patches
> be combined?
Test added.
> On 6/2/21 1:47 AM, Kris Van Hees wrote:
> > The implementation of global and local variables using BPF maps added
> > calls to dt_ident_set_storage() to set the offset and size of the data
> > storage for each variable. It was setting the storage requirement for
> > any automatically declared variable to 8 bytes regardless of its type.
> > Since the datatype of such a variable is determined dynamically based
> > on its use, the storage assignment must be done once the datatype is
> > known.
> >
> > Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> > ---
> > libdtrace/dt_parser.c | 14 +++++++-------
> > 1 file changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/libdtrace/dt_parser.c b/libdtrace/dt_parser.c
> > index 948ef2d8..9d71cd43 100644
> > --- a/libdtrace/dt_parser.c
> > +++ b/libdtrace/dt_parser.c
> > @@ -1661,10 +1661,10 @@ dt_node_decl(void)
> > if (idp == NULL)
> > longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM);
> >
> > - dt_ident_set_storage(idp, 8,
> > - ctf_type_size(dtt.dtt_ctfp, type));
> > -
> > dt_ident_type_assign(idp, dtt.dtt_ctfp, dtt.dtt_type);
> > + dt_ident_set_storage(idp, 8,
> > + ctf_type_size(dtt.dtt_ctfp,
> > + dtt.dtt_type));
> >
> > /*
> > * If we are declaring an associative array, use our
> > @@ -2754,10 +2754,6 @@ dt_xcook_ident(dt_node_t *dnp, dt_idhash_t *dhp, uint_t idkind, int create)
> > if (idp == NULL)
> > longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM);
> >
> > - /* aggregation storage size is set later, in dt_cg.c */
> > - if (idkind != DT_IDENT_AGG)
> > - dt_ident_set_storage(idp, 8, 8);
> > -
> > /*
> > * Arrays and aggregations are not cooked individually. They
> > * have dynamic types and must be referenced using operator [].
> > @@ -2871,6 +2867,8 @@ dt_cook_op1(dt_node_t *dnp, uint_t idflags)
> > xyerror(D_TYPE_ERR, "failed to lookup int64_t\n");
> >
> > dt_ident_type_assign(cp->dn_ident, dtt.dtt_ctfp, dtt.dtt_type);
> > + dt_ident_set_storage(cp->dn_ident, 8,
> > + ctf_type_size(dtt.dtt_ctfp, dtt.dtt_type));
> > dt_node_type_assign(cp, dtt.dtt_ctfp, dtt.dtt_type);
> > }
> >
> > @@ -3485,6 +3483,8 @@ dt_cook_op2(dt_node_t *dnp, uint_t idflags)
> > dt_ident_unref(lp->dn_ident)) {
> > dt_node_type_assign(lp, ctfp, type);
> > dt_ident_type_assign(lp->dn_ident, ctfp, type);
> > + dt_ident_set_storage(lp->dn_ident, 8,
> > + ctf_type_size(ctfp, type));
> >
> > if (uref) {
> > lp->dn_flags |= DT_NF_USERLAND;
>
> _______________________________________________
> 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