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

Eugene Loh <[email protected]>
Newsgroups dev.linux.lists.dtrace
Message-ID <[email protected]>
Reviewed-by: Eugene Loh <[email protected]>

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 <[email protected]>
> ---
>   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);
> -}
> -
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.