[DTrace-devel] [PATCH 04/12] options: report EDT_NOREG for iregs < DIF_DIR_NREGS
Kris Van Hees
kris.van.hees at oracle.com
Fri Jan 5 05:26:57 UTC 2024
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
--
2.42.0
More information about the DTrace-devel
mailing list