[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