[DTrace-devel] [PATCH 6/7] cg: allow input to translator to be NULL
Kris Van Hees
kris.van.hees at oracle.com
Fri Jul 28 01:50:45 UTC 2023
On Thu, Jul 27, 2023 at 08:06:00PM -0400, Eugene Loh via DTrace-devel wrote:
> Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
>
> nodemis?
>
> trask_struct?
Thanks. Having more trouble typing on my backup keyboard.
> On 7/27/23 11:30, Kris Van Hees via DTrace-devel wrote:
> > Some translators support NULL as input pointer value. The code generator
> > was performing a NULL-check on a the LHS of a PTR or DOT node before
> > considering the possibility that the nodemis subject to translator
> > handling. The check should happen after translator handling.
> >
> > With this patch, tst.ProcModelTrans.d works but only for the case of
> > NULL input. The test is changed to actually use a real trask_struct as
> > input. New test tst.NullInput.d exercises the case this patch fixes.
> >
> > Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> > ---
> > libdtrace/dt_cg.c | 4 +--
> > test/unittest/translators/tst.NullInput.d | 31 +++++++++++++++++++
> > .../unittest/translators/tst.ProcModelTrans.d | 16 ++++------
> > 3 files changed, 39 insertions(+), 12 deletions(-)
> > create mode 100644 test/unittest/translators/tst.NullInput.d
> >
> > diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> > index e05a1f64..ebe2e043 100644
> > --- a/libdtrace/dt_cg.c
> > +++ b/libdtrace/dt_cg.c
> > @@ -6305,8 +6305,6 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
> > assert(dnp->dn_right->dn_kind == DT_NODE_IDENT);
> > dt_cg_node(dnp->dn_left, dlp, drp);
> > - dt_cg_check_notnull(dlp, drp, dnp->dn_left->dn_reg);
> > -
> > /*
> > * If the left-hand side of PTR or DOT is a dynamic variable,
> > * we expect it to be the output of a D translator. In this
> > @@ -6340,6 +6338,8 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
> > break;
> > }
> > + dt_cg_check_notnull(dlp, drp, dnp->dn_left->dn_reg);
> > +
> > ctfp = dnp->dn_left->dn_ctfp;
> > type = ctf_type_resolve(ctfp, dnp->dn_left->dn_type);
> > diff --git a/test/unittest/translators/tst.NullInput.d b/test/unittest/translators/tst.NullInput.d
> > new file mode 100644
> > index 00000000..6d5f085b
> > --- /dev/null
> > +++ b/test/unittest/translators/tst.NullInput.d
> > @@ -0,0 +1,31 @@
> > +/*
> > + * Oracle Linux DTrace.
> > + * Copyright (c) 2023, 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.
> > + */
> > +
> > +/*
> > + * ASSERTION: Translators can receive NULL as input.
> > + *
> > + * SECTION: Translators/Translator Declarations
> > + * SECTION: Translators/Translate Operator
> > + *
> > + */
> > +
> > +#pragma D option quiet
> > +
> > +struct task_struct *T;
> > +
> > +BEGIN
> > +{
> > + T = 0;
> > + mypr_addr = xlate < psinfo_t > (T).pr_addr;
> > + printf("pr_addr: %p", mypr_addr);
> > + exit(0);
> > +}
> > +
> > +ERROR
> > +{
> > + exit(1);
> > +}
> > diff --git a/test/unittest/translators/tst.ProcModelTrans.d b/test/unittest/translators/tst.ProcModelTrans.d
> > index cf445658..7d5fff78 100644
> > --- a/test/unittest/translators/tst.ProcModelTrans.d
> > +++ b/test/unittest/translators/tst.ProcModelTrans.d
> > @@ -1,29 +1,25 @@
> > /*
> > * Oracle Linux DTrace.
> > - * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved.
> > + * Copyright (c) 2006, 2023, 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.
> > */
> > -/* @@xfail: dtv2 */
> > /*
> > - * ASSERTION:
> > - * Use the translators in /usr/lib/dtrace/procfs.d
> > + * ASSERTION: Basic test for translators in /usr/lib/dtrace/procfs.d
> > *
> > - * SECTION: Translators/ Translator Declarations
> > - * SECTION: Translators/ Translate Operator
> > + * SECTION: Translators/Translator Declarations
> > + * SECTION: Translators/Translate Operator
> > * SECTION: Translators/Process Model Translators
> > *
> > */
> > #pragma D option quiet
> > -struct task_struct *T;
> > -
> > BEGIN
> > {
> > - mypr_addr = xlate < psinfo_t > (T).pr_addr;
> > - printf("pr_addr: %d", mypr_addr);
> > + mypr_addr = xlate < psinfo_t > (curthread).pr_addr;
> > + printf("pr_addr: %p", mypr_addr);
> > exit(0);
> > }
>
> _______________________________________________
> 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