[DTrace-devel] [PATCH v2 4/4] options: discontinue -xversion=V as a valid option

Eugene Loh eugene.loh at oracle.com
Thu Dec 18 21:06:00 UTC 2025


Reviewed-by: Eugene Loh <eugene.loh at oracle.com>

On 12/18/25 15:36, Kris Van Hees via DTrace-devel wrote:
> DTrace allowed setting a previous version to operate in compatibility
> mode.  Unfortunately, it was not fully implemented.  Translators are
> not really versioned, and if a translator uses an identifier that does
> not exist in the version specified in -xversion=V, data structures end
> up corrupted.
>
> Since the usefulness of -xversion=V seems to be less than the effort
> needed to rectify the implementation, we are no longer supporting this
> option.
>
> Tests added to ensure that the error is reported for -xversion=V and
> when set using a pragma.  The former version tests have been removed
> as they have become obsolete.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
>   libdtrace/dt_options.c                     | 14 ++---------
>   test/unittest/options/err.version-pragma.d | 18 ++++++++++++++
>   test/unittest/options/err.version-pragma.r |  2 ++
>   test/unittest/options/err.version.d        |  4 ++--
>   test/unittest/options/err.version.r        |  2 +-
>   test/unittest/options/tst.version.r        |  1 -
>   test/unittest/options/tst.version.sh       | 14 -----------
>   test/unittest/version/err.1.1.d            | 27 ---------------------
>   test/unittest/version/tst.1.0.d            | 28 ----------------------
>   9 files changed, 25 insertions(+), 85 deletions(-)
>   create mode 100644 test/unittest/options/err.version-pragma.d
>   create mode 100644 test/unittest/options/err.version-pragma.r
>   delete mode 100644 test/unittest/options/tst.version.r
>   delete mode 100755 test/unittest/options/tst.version.sh
>   delete mode 100644 test/unittest/version/err.1.1.d
>   delete mode 100644 test/unittest/version/tst.1.0.d
>
> diff --git a/libdtrace/dt_options.c b/libdtrace/dt_options.c
> index 97516517..0a35e852 100644
> --- a/libdtrace/dt_options.c
> +++ b/libdtrace/dt_options.c
> @@ -24,6 +24,7 @@
>   #include <dt_pcap.h>
>   #include <dt_string.h>
>   #include <libproc.h>
> +#include <port.h>
>   
>   static int
>   dt_opt_agg(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
> @@ -676,18 +677,7 @@ dt_opt_invcflags(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
>   static int
>   dt_opt_version(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
>   {
> -	dt_version_t v;
> -
> -	if (arg == NULL)
> -		return dt_set_errno(dtp, EDT_BADOPTVAL);
> -
> -	if (dt_version_str2num(arg, &v) == -1)
> -		return dt_set_errno(dtp, EDT_VERSINVAL);
> -
> -	if (!dt_version_defined(v))
> -		return dt_set_errno(dtp, EDT_VERSUNDEF);
> -
> -	return dt_reduce(dtp, v);
> +	return dt_set_errno(dtp, ENOTSUPP);
>   }
>   
>   static int
> diff --git a/test/unittest/options/err.version-pragma.d b/test/unittest/options/err.version-pragma.d
> new file mode 100644
> index 00000000..88825ef6
> --- /dev/null
> +++ b/test/unittest/options/err.version-pragma.d
> @@ -0,0 +1,18 @@
> +/*
> + * Oracle Linux DTrace.
> + * Copyright (c) 2023, 2025, 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: The -xversion option is deprecated.
> + *
> + * SECTION: Options and Tunables/Consumer Options
> + */
> +
> +#pragma D option version=99.1
> +
> +BEGIN {
> +	exit(0);
> +}
> diff --git a/test/unittest/options/err.version-pragma.r b/test/unittest/options/err.version-pragma.r
> new file mode 100644
> index 00000000..279186d3
> --- /dev/null
> +++ b/test/unittest/options/err.version-pragma.r
> @@ -0,0 +1,2 @@
> +-- @@stderr --
> +dtrace: failed to compile script test/unittest/options/err.version-pragma.d: line 14: failed to set option 'version' to '99.1': Operation not supported
> diff --git a/test/unittest/options/err.version.d b/test/unittest/options/err.version.d
> index bd86e13f..093b29aa 100644
> --- a/test/unittest/options/err.version.d
> +++ b/test/unittest/options/err.version.d
> @@ -1,12 +1,12 @@
>   /*
>    * Oracle Linux DTrace.
> - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2023, 2025, 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: The -xversion option works.
> + * ASSERTION: The -xversion option is deprecated.
>    *
>    * SECTION: Options and Tunables/Consumer Options
>    */
> diff --git a/test/unittest/options/err.version.r b/test/unittest/options/err.version.r
> index 6cdd1f7f..7c659859 100644
> --- a/test/unittest/options/err.version.r
> +++ b/test/unittest/options/err.version.r
> @@ -1,2 +1,2 @@
>   -- @@stderr --
> -dtrace: failed to set -x version: Requested version is not supported by compiler
> +dtrace: failed to set -x version: Operation not supported
> diff --git a/test/unittest/options/tst.version.r b/test/unittest/options/tst.version.r
> deleted file mode 100644
> index 8b137891..00000000
> --- a/test/unittest/options/tst.version.r
> +++ /dev/null
> @@ -1 +0,0 @@
> -
> diff --git a/test/unittest/options/tst.version.sh b/test/unittest/options/tst.version.sh
> deleted file mode 100755
> index 37fb6f75..00000000
> --- a/test/unittest/options/tst.version.sh
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -#!/bin/bash
> -#
> -# Oracle Linux DTrace.
> -# Copyright (c) 2023, 2025,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.
> -#
> -
> -dtrace=$1
> -
> -myversion=`$dtrace $dt_flags -V | gawk '{ print $NF }'`
> -
> -$dtrace $dt_flags -xversion=$myversion -qn 'BEGIN { exit(0) }'
> -exit $?
> diff --git a/test/unittest/version/err.1.1.d b/test/unittest/version/err.1.1.d
> deleted file mode 100644
> index 0b63421f..00000000
> --- a/test/unittest/version/err.1.1.d
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/*
> - * Oracle Linux DTrace.
> - * Copyright (c) 2006, 2020, 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.
> - */
> -/* @@runtest-opts: -Ze */
> -
> -#pragma D option version=1.1
> -
> -/*
> - * The following identifiers were added as D built-ins as of version 1.1.
> - * Using these identifiers as user-specified variables should be illegal in
> - * that and any later versions, but legal in earlier versions.
> - */
> -int strstr;
> -int strchr;
> -int strrchr;
> -int strtok;
> -int substr;
> -int index;
> -int freopen;
> -
> -write:entry
> -{
> -	exit(0);
> -}
> diff --git a/test/unittest/version/tst.1.0.d b/test/unittest/version/tst.1.0.d
> deleted file mode 100644
> index 79f23b0d..00000000
> --- a/test/unittest/version/tst.1.0.d
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/*
> - * Oracle Linux DTrace.
> - * Copyright (c) 2006, 2020, 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.
> - */
> -/* @@runtest-opts: -Ze */
> -
> -#pragma D option version=1.0
> -
> -/*
> - * The following identifiers were added as D built-ins as of version 1.1.
> - * Using these identifiers as user-specified variables should be illegal in
> - * that and any later versions, but legal in earlier versions.
> - */
> -int strstr;
> -int strchr;
> -int strrchr;
> -int strtok;
> -int substr;
> -int index;
> -int freopen;
> -
> -write:entry
> -{
> -	exit(0);
> -}
> -



More information about the DTrace-devel mailing list