Skip to content

Commit

Permalink
options: report EDT_NOREG for iregs < DIF_DIR_NREGS
Browse files Browse the repository at this point in the history
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@oracle.com>
Reviewed-by: Eugene Loh <eugene.loh@oracle.com>
  • Loading branch information
kvanhees committed Jan 12, 2024
1 parent 7cb553c commit 0826927
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 20 deletions.
4 changes: 3 additions & 1 deletion libdtrace/dt_options.c
Original file line number Diff line number Diff line change
@@ -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.
*/
Expand Down Expand Up @@ -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;
Expand Down
26 changes: 7 additions & 19 deletions test/unittest/options/tst.iregs.r
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 0826927

Please sign in to comment.