[DTrace-devel] [PATCH v3 3/5] Fix size for typecast tuple (and aggregation key) components
Eugene Loh
eugene.loh at oracle.com
Fri Sep 9 03:13:33 UTC 2022
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
though I still think:
*) broadening rather than narrowing test coverage makes more sense to me
*) this feels more like "correcting" the size than "updating" the size
On 9/8/22 17:18, Kris Van Hees via DTrace-devel wrote:
> Components of a tuple (or aggregation key) were being typecast where
> needed but if narrowing or widening took place, the storage size to store
> the value was never updated.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> Reviewed-by: Nick Alcock <nick.alcock at oracle.com>
> ---
> libdtrace/dt_cg.c | 3 +++
> test/unittest/aggs/tst.typecast-key.d | 27 +++++++++++++++++++++++++++
> test/unittest/aggs/tst.typecast-key.r | 2 ++
> 3 files changed, 32 insertions(+)
> create mode 100644 test/unittest/aggs/tst.typecast-key.d
> create mode 100644 test/unittest/aggs/tst.typecast-key.r
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index 06ab0974..c4e49129 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -2765,6 +2765,9 @@ empty_args:
> dt_cg_typecast(dnp, &isp->dis_args[i], dlp, drp);
> isp->dis_args[i].dn_reg = -1;
>
> + /* The typecast may have changed the size. */
> + size = dt_node_sizeof(&isp->dis_args[i]);
> +
> if (dt_node_is_scalar(dnp) || dt_node_is_float(dnp)) {
> assert(size > 0 && size <= 8 &&
> (size & (size - 1)) == 0);
> diff --git a/test/unittest/aggs/tst.typecast-key.d b/test/unittest/aggs/tst.typecast-key.d
> new file mode 100644
> index 00000000..77fe51c2
> --- /dev/null
> +++ b/test/unittest/aggs/tst.typecast-key.d
> @@ -0,0 +1,27 @@
> +/*
> + * Oracle Linux DTrace.
> + * Copyright (c) 2022, 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: Offset and alignment of an aggregation key element is defined by
> + * the prototype of the aggregation key and not the passed values.
> + *
> + * SECTION: Aggregations/Aggregations
> + */
> +
> +#pragma D option quiet
> +
> +BEGIN
> +{
> + @[(int32_t)1, 2] = count();
> + @[(int64_t)1, 2] = count();
> + exit(0);
> +}
> +
> +ERROR
> +{
> + exit(1);
> +}
> diff --git a/test/unittest/aggs/tst.typecast-key.r b/test/unittest/aggs/tst.typecast-key.r
> new file mode 100644
> index 00000000..0d4ee55a
> --- /dev/null
> +++ b/test/unittest/aggs/tst.typecast-key.r
> @@ -0,0 +1,2 @@
> +
> + 1 2 2
More information about the DTrace-devel
mailing list