[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