[DTrace-devel] [PATCH 1/2] Fix disasm for endian operations

Kris Van Hees kris.van.hees at oracle.com
Mon Sep 11 19:08:37 UTC 2023


On Mon, Aug 28, 2023 at 03:07:59PM -0400, eugene.loh at oracle.com via DTrace-devel wrote:
> 
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>

Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>

> ---
>  libdtrace/dt_dis.c                     |  4 ++--
>  test/unittest/disasm/tst.ann-endian.r  |  3 +++
>  test/unittest/disasm/tst.ann-endian.sh | 26 ++++++++++++++++++++++++++
>  3 files changed, 31 insertions(+), 2 deletions(-)
>  create mode 100644 test/unittest/disasm/tst.ann-endian.r
>  create mode 100755 test/unittest/disasm/tst.ann-endian.sh
> 
> diff --git a/libdtrace/dt_dis.c b/libdtrace/dt_dis.c
> index e0f2039f..d3785d4e 100644
> --- a/libdtrace/dt_dis.c
> +++ b/libdtrace/dt_dis.c
> @@ -630,9 +630,9 @@ static const struct opent {
>  	INSN3(ALU, DIV, X)	= { "div", dt_dis_op2 },
>  	INSN3(ALU, MOD, X)	= { "mod", dt_dis_op2 },
>  	INSN2(ALU, NEG)		= { "neg", dt_dis_op1 },
> -	INSN3(ALU, END, TO_BE)	= { "tobe", dt_dis_op2 },
> -	INSN3(ALU, END, TO_LE)	= { "tole", dt_dis_op2 },
>  	/* 32-bit ALU ops, op(dst, imm) */
> +	INSN3(ALU, END, TO_BE)	= { "tobe", dt_dis_op2imm },
> +	INSN3(ALU, END, TO_LE)	= { "tole", dt_dis_op2imm },
>  	INSN3(ALU, ADD, K)	= { "add", dt_dis_op2imm },
>  	INSN3(ALU, SUB, K)	= { "sub", dt_dis_op2imm },
>  	INSN3(ALU, AND, K)	= { "and", dt_dis_op2imm },
> diff --git a/test/unittest/disasm/tst.ann-endian.r b/test/unittest/disasm/tst.ann-endian.r
> new file mode 100644
> index 00000000..8a0ef273
> --- /dev/null
> +++ b/test/unittest/disasm/tst.ann-endian.r
> @@ -0,0 +1,3 @@
> +dc X 0 0000 00000010    tobe %rX, 16
> +dc X 0 0000 00000020    tobe %rX, 32
> +dc X 0 0000 00000040    tobe %rX, 64
> diff --git a/test/unittest/disasm/tst.ann-endian.sh b/test/unittest/disasm/tst.ann-endian.sh
> new file mode 100755
> index 00000000..df3ac9c1
> --- /dev/null
> +++ b/test/unittest/disasm/tst.ann-endian.sh
> @@ -0,0 +1,26 @@
> +#!/bin/bash
> +#
> +# Oracle Linux DTrace.
> +# Copyright (c) 2023, 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
> +
> +$dtrace $dt_flags -Sen '
> +sdt:task::task_rename
> +{
> +	htons(1234);
> +	htonl(1234);
> +	htonll(1234);
> +}
> +' 2>&1 | \
> +	awk '/ tobe / {
> +                sub(/^[^:]+: /, "");
> +		sub(/^dc [0-9] /, "dc X ");
> +		sub(/%r[0-9],/, "%rX,");
> +		print;
> +	     }'
> +
> +exit $?
> -- 
> 2.18.4
> 
> 



More information about the DTrace-devel mailing list