[DTrace-devel] [PATCH] Improve diagnosibility of disassembly tests

eugene.loh at oracle.com eugene.loh at oracle.com
Fri Apr 29 00:20:26 UTC 2022


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

If these tests fail, they provide essentially no diagnostic output.

Further, if these tests pass, they emit a little bit of output into
the log file.  This is largely harmless, but simply not useful.

Change the tests so that fails report what went wrong and passes
emit no gratuitous output.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 test/unittest/disasm/tst.ann-gvar-assoc.r     |  2 -
 test/unittest/disasm/tst.ann-gvar-assoc.sh    | 26 +++++++++-
 test/unittest/disasm/tst.ann-js-neg.r         |  2 -
 test/unittest/disasm/tst.ann-js-neg.sh        | 38 ++++++++++----
 test/unittest/disasm/tst.ann-reg-spill.r      |  7 ---
 test/unittest/disasm/tst.ann-reg-spill.sh     | 35 +++++++++++--
 .../unittest/disasm/tst.ann-strconst-strtab.r |  2 -
 .../disasm/tst.ann-strconst-strtab.sh         | 48 ++++++++++++------
 test/unittest/disasm/tst.ann-strconst.r       |  1 -
 test/unittest/disasm/tst.ann-strconst.sh      | 39 +++++++++++----
 test/unittest/disasm/tst.ann-tvar-assoc.r     |  2 -
 test/unittest/disasm/tst.ann-tvar-assoc.sh    | 26 +++++++++-
 test/unittest/disasm/tst.ann-tvar.r           |  1 -
 test/unittest/disasm/tst.ann-tvar.sh          | 25 +++++++++-
 test/unittest/disasm/tst.ann-var.r            | 23 ---------
 test/unittest/disasm/tst.ann-var.sh           | 50 ++++++++++++++++++-
 16 files changed, 243 insertions(+), 84 deletions(-)
 delete mode 100644 test/unittest/disasm/tst.ann-gvar-assoc.r
 delete mode 100644 test/unittest/disasm/tst.ann-js-neg.r
 delete mode 100644 test/unittest/disasm/tst.ann-reg-spill.r
 delete mode 100644 test/unittest/disasm/tst.ann-strconst-strtab.r
 delete mode 100644 test/unittest/disasm/tst.ann-strconst.r
 delete mode 100644 test/unittest/disasm/tst.ann-tvar-assoc.r
 delete mode 100644 test/unittest/disasm/tst.ann-tvar.r
 delete mode 100644 test/unittest/disasm/tst.ann-var.r

diff --git a/test/unittest/disasm/tst.ann-gvar-assoc.r b/test/unittest/disasm/tst.ann-gvar-assoc.r
deleted file mode 100644
index f7563a51..00000000
--- a/test/unittest/disasm/tst.ann-gvar-assoc.r
+++ /dev/null
@@ -1,2 +0,0 @@
-85 0 1 0000 ffffffff    call dt_get_assoc             ! st[]
-85 0 1 0000 ffffffff    call dt_get_assoc             ! ld[]
diff --git a/test/unittest/disasm/tst.ann-gvar-assoc.sh b/test/unittest/disasm/tst.ann-gvar-assoc.sh
index 6690967d..2fa7e9c1 100755
--- a/test/unittest/disasm/tst.ann-gvar-assoc.sh
+++ b/test/unittest/disasm/tst.ann-gvar-assoc.sh
@@ -8,6 +8,8 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -Sen '
 int st[int], ld[int];
 
@@ -17,6 +19,26 @@ BEGIN
 	trace(ld[5]);
 	exit(0);
 }
-' 2>&1 | awk '/ call dt_get_assoc/ { sub(/^[^:]+: /, ""); print; }'
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+85 0 1 0000 ffffffff    call dt_get_assoc             ! st[]
+85 0 1 0000 ffffffff    call dt_get_assoc             ! ld[]
+EOF
+
+awk '/ call dt_get_assoc/ { sub(/^[^:]+: /, ""); print; }' $label.out \
+| diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
 
-exit $?
+exit 0
diff --git a/test/unittest/disasm/tst.ann-js-neg.r b/test/unittest/disasm/tst.ann-js-neg.r
deleted file mode 100644
index d70a02ff..00000000
--- a/test/unittest/disasm/tst.ann-js-neg.r
+++ /dev/null
@@ -1,2 +0,0 @@
-75 0 0 XXXX 00000000    jsge %r0, 0, 3
-d5 0 0 XXXX fffff800    jsle %r0, -2048, 2
diff --git a/test/unittest/disasm/tst.ann-js-neg.sh b/test/unittest/disasm/tst.ann-js-neg.sh
index 0914d3fe..a7d6994f 100755
--- a/test/unittest/disasm/tst.ann-js-neg.sh
+++ b/test/unittest/disasm/tst.ann-js-neg.sh
@@ -8,17 +8,37 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -xdisasm=8 -Sn '
 BEGIN, syscall::write:return
 {
 	exit(0);
 }
-' 2>&1 | \
-	awk '/js[a-z]+/ {
-		sub(/^[^:]+: /, "");
-		sub(/ +!.*$/, "");
-		sub(/ [0-9a-f]{4} /, " XXXX ");
-		print;
-	     }'
-
-exit $?
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+75 0 0 XXXX 00000000    jsge %r0, 0, 3
+d5 0 0 XXXX fffff800    jsle %r0, -2048, 2
+EOF
+
+awk '/js[a-z]+/ {
+	sub(/^[^:]+: /, "");
+	sub(/ +!.*$/, "");
+	sub(/ [0-9a-f]{4} /, " XXXX ");
+	print;
+     }' $label.out | diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
+
+exit 0
diff --git a/test/unittest/disasm/tst.ann-reg-spill.r b/test/unittest/disasm/tst.ann-reg-spill.r
deleted file mode 100644
index 2b71ca92..00000000
--- a/test/unittest/disasm/tst.ann-reg-spill.r
+++ /dev/null
@@ -1,7 +0,0 @@
-7b a 8 ffa8 00000000    stdw [%fp-88], %r8            ! spill %r8
-79 8 a ffa8 00000000    lddw %r8, [%fp-88]            ! restore %r8
-7b a 8 ffa8 00000000    stdw [%fp-88], %r8            ! spill %r8
-7b a 7 ffb0 00000000    stdw [%fp-80], %r7            ! spill %r7
-79 7 a ffb0 00000000    lddw %r7, [%fp-80]            ! restore %r7
-79 8 a ffa8 00000000    lddw %r8, [%fp-88]            ! restore %r8
-123456798
diff --git a/test/unittest/disasm/tst.ann-reg-spill.sh b/test/unittest/disasm/tst.ann-reg-spill.sh
index 16786947..8c144d4b 100755
--- a/test/unittest/disasm/tst.ann-reg-spill.sh
+++ b/test/unittest/disasm/tst.ann-reg-spill.sh
@@ -8,6 +8,8 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -qSn '
 BEGIN
 {
@@ -22,6 +24,33 @@ BEGIN
 	i = 9;
 	trace(++a + (++b + (++c + (++d + (++e + (++f + (++g + (++h + ++i))))))));
 	exit(0);
-}' 2>&1 | awk '/! (spill|restore)/ { sub(/^[^:]+: /, ""); print; next; }
-	       { s = $0; }
-	       END { print s; }'
+}
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+7b a 8 ffa8 00000000    stdw [%fp-88], %r8            ! spill %r8
+79 8 a ffa8 00000000    lddw %r8, [%fp-88]            ! restore %r8
+7b a 8 ffa8 00000000    stdw [%fp-88], %r8            ! spill %r8
+7b a 7 ffb0 00000000    stdw [%fp-80], %r7            ! spill %r7
+79 7 a ffb0 00000000    lddw %r7, [%fp-80]            ! restore %r7
+79 8 a ffa8 00000000    lddw %r8, [%fp-88]            ! restore %r8
+123456798
+EOF
+
+awk '/! (spill|restore)/ { sub(/^[^:]+: /, ""); print; next; }
+       { s = $0; }
+       END { print s; }' $label.out | diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
+
+exit 0
diff --git a/test/unittest/disasm/tst.ann-strconst-strtab.r b/test/unittest/disasm/tst.ann-strconst-strtab.r
deleted file mode 100644
index 2c10e380..00000000
--- a/test/unittest/disasm/tst.ann-strconst-strtab.r
+++ /dev/null
@@ -1,2 +0,0 @@
-linked 07 X 0 0000 XXXXXXXX    add  %rX, D ! "a"
-final 07 X 0 0000 XXXXXXXX    add  %rX, D ! "a"
diff --git a/test/unittest/disasm/tst.ann-strconst-strtab.sh b/test/unittest/disasm/tst.ann-strconst-strtab.sh
index 76a65604..84df6b84 100755
--- a/test/unittest/disasm/tst.ann-strconst-strtab.sh
+++ b/test/unittest/disasm/tst.ann-strconst-strtab.sh
@@ -15,23 +15,43 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -xdisasm=12 -Sn '
 BEGIN
 {
 	a["a"] = 42;
 	exit(0);
 }
-' 2>&1 | \
-	awk '/^Disassembly of/ {
-		kind = $3;
-		next;
-	     }
-	     / ! "/ {
-		sub(/^[^:]+:/, kind);
-		sub(/ 07 [0-9] /, " 07 X ");
-		sub(/[0-9a-f]{8}    add/, "XXXXXXXX    add");
-		sub(/%r[0-9], [0-9]+ +/, "%rX, D ");
-		print;
-	     }'
-
-exit $?
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+linked 07 X 0 0000 XXXXXXXX    add  %rX, D ! "a"
+final 07 X 0 0000 XXXXXXXX    add  %rX, D ! "a"
+EOF
+
+awk '/^Disassembly of/ {
+	kind = $3;
+	next;
+     }
+     / ! "/ {
+	sub(/^[^:]+:/, kind);
+	sub(/ 07 [0-9] /, " 07 X ");
+	sub(/[0-9a-f]{8}    add/, "XXXXXXXX    add");
+	sub(/%r[0-9], [0-9]+ +/, "%rX, D ");
+	print;
+     }' $label.out | diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
+
+exit 0
diff --git a/test/unittest/disasm/tst.ann-strconst.r b/test/unittest/disasm/tst.ann-strconst.r
deleted file mode 100644
index 49273e33..00000000
--- a/test/unittest/disasm/tst.ann-strconst.r
+++ /dev/null
@@ -1 +0,0 @@
-07 X 0 0000 XXXXXXXX    add  %rX, D ! "strconst"
diff --git a/test/unittest/disasm/tst.ann-strconst.sh b/test/unittest/disasm/tst.ann-strconst.sh
index 81e1268c..d43d42ed 100755
--- a/test/unittest/disasm/tst.ann-strconst.sh
+++ b/test/unittest/disasm/tst.ann-strconst.sh
@@ -8,19 +8,38 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -Sen '
 BEGIN
 {
 	var = "strconst";
 	exit(0);
 }
-' 2>&1 | \
-	awk '/ ! "strconst"/ {
-		sub(/^[^:]+: /, "");
-		sub(/^07 [0-9] /, "07 X ");
-		sub(/[0-9a-f]{8}    add/, "XXXXXXXX    add");
-		sub(/%r[0-9], [0-9]+ +/, "%rX, D ");
-		print;
-	     }'
-
-exit $?
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+07 X 0 0000 XXXXXXXX    add  %rX, D ! "strconst"
+EOF
+
+awk '/ ! "strconst"/ {
+	sub(/^[^:]+: /, "");
+	sub(/^07 [0-9] /, "07 X ");
+	sub(/[0-9a-f]{8}    add/, "XXXXXXXX    add");
+	sub(/%r[0-9], [0-9]+ +/, "%rX, D ");
+	print;
+     }' $label.out | diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
+
+exit 0
diff --git a/test/unittest/disasm/tst.ann-tvar-assoc.r b/test/unittest/disasm/tst.ann-tvar-assoc.r
deleted file mode 100644
index 573c93e2..00000000
--- a/test/unittest/disasm/tst.ann-tvar-assoc.r
+++ /dev/null
@@ -1,2 +0,0 @@
-85 0 1 0000 ffffffff    call dt_get_assoc             ! self->st[]
-85 0 1 0000 ffffffff    call dt_get_assoc             ! self->ld[]
diff --git a/test/unittest/disasm/tst.ann-tvar-assoc.sh b/test/unittest/disasm/tst.ann-tvar-assoc.sh
index 354d8fbe..4bbf6817 100755
--- a/test/unittest/disasm/tst.ann-tvar-assoc.sh
+++ b/test/unittest/disasm/tst.ann-tvar-assoc.sh
@@ -8,6 +8,8 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -Sen '
 self int st[int], ld[int];
 
@@ -17,6 +19,26 @@ BEGIN
 	trace(self->ld[5]);
 	exit(0);
 }
-' 2>&1 | awk '/ call dt_get_assoc/ { sub(/^[^:]+: /, ""); print; }'
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+85 0 1 0000 ffffffff    call dt_get_assoc             ! self->st[]
+85 0 1 0000 ffffffff    call dt_get_assoc             ! self->ld[]
+EOF
+
+awk '/ call dt_get_assoc/ { sub(/^[^:]+: /, ""); print; }' $label.out \
+| diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
 
-exit $?
+exit 0
diff --git a/test/unittest/disasm/tst.ann-tvar.r b/test/unittest/disasm/tst.ann-tvar.r
deleted file mode 100644
index 5194531b..00000000
--- a/test/unittest/disasm/tst.ann-tvar.r
+++ /dev/null
@@ -1 +0,0 @@
-85 0 1 0000 ffffffff    call dt_get_tvar              ! self->var
diff --git a/test/unittest/disasm/tst.ann-tvar.sh b/test/unittest/disasm/tst.ann-tvar.sh
index 66501840..cb193934 100755
--- a/test/unittest/disasm/tst.ann-tvar.sh
+++ b/test/unittest/disasm/tst.ann-tvar.sh
@@ -8,12 +8,33 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 $dtrace $dt_flags -Sen '
 BEGIN
 {
 	self->var = 42;
 	exit(0);
 }
-' 2>&1 | awk '/ call dt_get_tvar/ { sub(/^[^:]+: /, ""); print; }'
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+85 0 1 0000 ffffffff    call dt_get_tvar              ! self->var
+EOF
+
+awk '/ call dt_get_tvar/ { sub(/^[^:]+: /, ""); print; }' $label.out \
+| diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
 
-exit $?
+exit 0
diff --git a/test/unittest/disasm/tst.ann-var.r b/test/unittest/disasm/tst.ann-var.r
deleted file mode 100644
index d7fdef90..00000000
--- a/test/unittest/disasm/tst.ann-var.r
+++ /dev/null
@@ -1,23 +0,0 @@
-CheckVariable_Z
-CheckVariable_Y
-CheckVariable_X
-CheckVariable_A
-CheckVariable_A
-CheckVariable_A
-CheckVariable_A
-CheckVariable_B
-CheckVariable_A
-CheckVariable_C
-CheckVariable_Z
-this->CheckVariable_z
-this->CheckVariable_y
-this->CheckVariable_x
-CheckVariable_C
-this->CheckVariable_c
-this->CheckVariable_b
-this->CheckVariable_a
-this->CheckVariable_b
-CheckVariable_C
-this->CheckVariable_x
-CheckVariable_Y
-this->CheckVariable_z
diff --git a/test/unittest/disasm/tst.ann-var.sh b/test/unittest/disasm/tst.ann-var.sh
index 68a827b6..0bef4d37 100755
--- a/test/unittest/disasm/tst.ann-var.sh
+++ b/test/unittest/disasm/tst.ann-var.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 # Oracle Linux DTrace.
-# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2021, 2022, 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.
 
@@ -9,6 +9,8 @@
 
 dtrace=$1
 
+label=$tmpdir/$(basename $_test).$$.$RANDOM
+
 # generate disassembly and print the emitted variable names
 $dtrace $dt_flags -Sen '
 struct foo {
@@ -50,4 +52,48 @@ BEGIN {
     trace(this->CheckVariable_x);
     trace(      CheckVariable_Y);
     trace(this->CheckVariable_z);
-}' |& awk '/ ! (|this->)CheckVariable_/ { print $NF }'
+}
+' > $label.out 2>&1
+
+if [ $? -ne 0 ]; then
+	echo DTrace run failed
+	cat $label.out
+	exit 1
+fi
+
+cat << EOF > $label.cmp
+CheckVariable_Z
+CheckVariable_Y
+CheckVariable_X
+CheckVariable_A
+CheckVariable_A
+CheckVariable_A
+CheckVariable_A
+CheckVariable_B
+CheckVariable_A
+CheckVariable_C
+CheckVariable_Z
+this->CheckVariable_z
+this->CheckVariable_y
+this->CheckVariable_x
+CheckVariable_C
+this->CheckVariable_c
+this->CheckVariable_b
+this->CheckVariable_a
+this->CheckVariable_b
+CheckVariable_C
+this->CheckVariable_x
+CheckVariable_Y
+this->CheckVariable_z
+EOF
+
+awk '/ ! (|this->)CheckVariable_/ { print $NF }' $label.out \
+| diff -q - $label.cmp
+
+if [ $? -ne 0 ]; then
+	echo comparison failed
+	cat $label.out
+	exit 1
+fi
+
+exit 0
-- 
2.18.4




More information about the DTrace-devel mailing list