[DTrace-devel] [PATCH 04/12] options: report EDT_NOREG for iregs < DIF_DIR_NREGS
Eugene Loh
eugene.loh at oracle.com
Fri Jan 5 21:22:09 UTC 2024
See my comments to the 03/12 patch.
On 1/5/24 00:26, Kris Van Hees via DTrace-devel wrote:
> The trampoline generation code hardcodes the use of %r7 and %r8, which
> means that iregs cannot be less than 8 (DIF_DIR_NREGS).
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_options.c | 4 +++-
> test/unittest/options/tst.iregs.r | 26 +++++++-------------------
> 2 files changed, 10 insertions(+), 20 deletions(-)
>
> diff --git a/libdtrace/dt_options.c b/libdtrace/dt_options.c
> index 6f7cf9e2..18b8f43a 100644
> --- a/libdtrace/dt_options.c
> +++ b/libdtrace/dt_options.c
> @@ -1,6 +1,6 @@
> /*
> * Oracle Linux DTrace.
> - * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2007, 2024, 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.
> */
> @@ -266,6 +266,8 @@ dt_opt_iregs(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
>
> if (arg == NULL || (n = atoi(arg)) <= 0 || n > DIF_DIR_NREGS)
> return dt_set_errno(dtp, EDT_BADOPTVAL);
> + if (n < DIF_DIR_NREGS)
> + return dt_set_errno(dtp, EDT_NOREG);
>
> dtp->dt_conf.dtc_difintregs = n;
> return 0;
> diff --git a/test/unittest/options/tst.iregs.r b/test/unittest/options/tst.iregs.r
> index 4926b28d..f67e7b07 100644
> --- a/test/unittest/options/tst.iregs.r
> +++ b/test/unittest/options/tst.iregs.r
> @@ -1,25 +1,13 @@
> 7
> iregs 8 gives 0
> -7
> -iregs 7 gives 0
> -7
> -iregs 6 gives 0
> +iregs 7 gives 1
> +iregs 6 gives 1
> iregs 5 gives 1
> iregs 4 gives 1
> iregs 3 gives 1
> -- @@stderr --
> -dtrace: invalid probe specifier BEGIN {
> - a = b = c = d = e = f = g = h = i = j = k = l = 1;
> - trace(a + b * (c + d * (e + f * (g + h * (i + j * (k + l))))));
> - exit(0);
> - }: Insufficient registers to generate code
> -dtrace: invalid probe specifier BEGIN {
> - a = b = c = d = e = f = g = h = i = j = k = l = 1;
> - trace(a + b * (c + d * (e + f * (g + h * (i + j * (k + l))))));
> - exit(0);
> - }: Insufficient registers to generate code
> -dtrace: invalid probe specifier BEGIN {
> - a = b = c = d = e = f = g = h = i = j = k = l = 1;
> - trace(a + b * (c + d * (e + f * (g + h * (i + j * (k + l))))));
> - exit(0);
> - }: Insufficient registers to generate code
> +dtrace: failed to set -x iregs: Insufficient registers to generate code
> +dtrace: failed to set -x iregs: Insufficient registers to generate code
> +dtrace: failed to set -x iregs: Insufficient registers to generate code
> +dtrace: failed to set -x iregs: Insufficient registers to generate code
> +dtrace: failed to set -x iregs: Insufficient registers to generate code
More information about the DTrace-devel
mailing list