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

eugene.loh at oracle.com eugene.loh at oracle.com
Mon Aug 28 19:07:59 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh 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