[DTrace-devel] [PATCH] test: stack_fbt

eugene.loh at oracle.com eugene.loh at oracle.com
Thu Oct 31 22:52:39 UTC 2024


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

The test was being skipped on UEKR7 systems because __vfs_write
was no longer traceable.  The expected stack on UEKR6 x86_64 was
out of date.

Switch to fbt::vfs_write:entry.  Convert to a .sh test, so that
different stacks can be expected depending both on machine type
and release number.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 test/unittest/stack/tst.stack_fbt.aarch64.r |  14 ---
 test/unittest/stack/tst.stack_fbt.d         |  25 ----
 test/unittest/stack/tst.stack_fbt.sh        | 123 ++++++++++++++++++++
 test/unittest/stack/tst.stack_fbt.x         |  10 --
 test/unittest/stack/tst.stack_fbt.x86_64.r  |  13 ---
 5 files changed, 123 insertions(+), 62 deletions(-)
 delete mode 100644 test/unittest/stack/tst.stack_fbt.aarch64.r
 delete mode 100644 test/unittest/stack/tst.stack_fbt.d
 create mode 100755 test/unittest/stack/tst.stack_fbt.sh
 delete mode 100755 test/unittest/stack/tst.stack_fbt.x
 delete mode 100644 test/unittest/stack/tst.stack_fbt.x86_64.r

diff --git a/test/unittest/stack/tst.stack_fbt.aarch64.r b/test/unittest/stack/tst.stack_fbt.aarch64.r
deleted file mode 100644
index 3a2896c48..000000000
--- a/test/unittest/stack/tst.stack_fbt.aarch64.r
+++ /dev/null
@@ -1,14 +0,0 @@
-                   FUNCTION:NAME
-                          :BEGIN 
-               __vfs_write:entry 
-              vmlinux`__vfs_write
-              vmlinux`ksys_write+{ptr}
-              vmlinux`__arm64_sys_write+{ptr}
-              vmlinux`el0_svc_common+{ptr}
-              vmlinux`el0_svc_handler+{ptr}
-              vmlinux`el0_svc+{ptr}
-
-
--- @@stderr --
-dtrace: script 'test/unittest/stack/tst.stack_fbt.d' matched 2 probes
-dtrace: allowing destructive actions
diff --git a/test/unittest/stack/tst.stack_fbt.d b/test/unittest/stack/tst.stack_fbt.d
deleted file mode 100644
index 27db21164..000000000
--- a/test/unittest/stack/tst.stack_fbt.d
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Oracle Linux DTrace.
- * Copyright (c) 2021, 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: Test the stack action with the default stack depth.
- *
- * SECTION: Output Formatting/printf()
- */
-
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo write something > /dev/null");
-}
-
-fbt::__vfs_write:entry
-{
-	stack();
-	exit(0);
-}
diff --git a/test/unittest/stack/tst.stack_fbt.sh b/test/unittest/stack/tst.stack_fbt.sh
new file mode 100755
index 000000000..f70980a48
--- /dev/null
+++ b/test/unittest/stack/tst.stack_fbt.sh
@@ -0,0 +1,123 @@
+#!/bin/bash
+#
+# Oracle Linux DTrace.
+# Copyright (c) 2024, 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.
+#
+# This test verifies the nusdtprobes option.
+
+dtrace=$1
+
+# Set up test directory.
+
+DIRNAME=$tmpdir/stack_fbt.$$.$RANDOM
+mkdir -p $DIRNAME
+cd $DIRNAME
+
+# Use DTrace to capture stack() at vfs_write:entry.
+
+$dtrace $dt_flags $nusdt -wqn '
+BEGIN
+{
+	system("echo write something > /dev/null");
+}
+
+fbt::vfs_write:entry
+{
+	stack();
+	exit(0);
+}' >& dtrace.out
+
+if [ $? -ne 0 ]; then
+	echo ERROR: dtrace failed
+	cat dtrace.out
+	exit 1
+fi
+
+# Strip out pointer values.
+
+sed 's/+0x[0-9a-f]*$/+{ptr}/' dtrace.out > dtrace.post
+
+if [ $? -ne 0 ]; then
+	echo ERROR: awk failed
+	cat dtrace.out
+	exit 1
+fi
+
+# Figure out what stack to expect.
+
+read MAJOR MINOR <<< `uname -r | grep -Eo '^[0-9]+\.[0-9]+' | tr '.' ' '`
+
+if [ $MAJOR -eq 5 -a $MINOR -lt 8 ]; then
+	# up to 5.8
+	KERVER="A"
+else
+	# starting at 5.8
+	KERVER="B"
+fi
+
+if [ $(uname -m) == "x86_64" -a $KERVER == "A" ]; then
+cat << EOF > dtrace.cmp
+
+              vmlinux\`vfs_write+{ptr}
+              vmlinux\`__x64_sys_write+{ptr}
+              vmlinux\`x64_sys_call+{ptr}
+              vmlinux\`do_syscall_64+{ptr}
+              vmlinux\`entry_SYSCALL_64+{ptr}
+
+EOF
+elif [ $(uname -m) == "aarch64" -a $KERVER == "A" ]; then
+cat << EOF > dtrace.cmp
+
+              vmlinux\`vfs_write
+              vmlinux\`__arm64_sys_write+{ptr}
+              vmlinux\`el0_svc_common+{ptr}
+              vmlinux\`el0_svc_handler+{ptr}
+              vmlinux\`el0_svc+{ptr}
+
+EOF
+elif [ $(uname -m) == "x86_64" -a $KERVER == "B" ]; then
+cat << EOF > dtrace.cmp
+
+              vmlinux\`vfs_write+{ptr}
+              vmlinux\`ksys_write+{ptr}
+              vmlinux\`do_syscall_64+{ptr}
+              vmlinux\`entry_SYSCALL_64+{ptr}
+
+EOF
+elif [ $(uname -m) == "aarch64" -a $KERVER == "B" ]; then
+cat << EOF > dtrace.cmp
+
+              vmlinux\`vfs_write
+              vmlinux\`__arm64_sys_write+{ptr}
+              vmlinux\`invoke_syscall+{ptr}
+              vmlinux\`el0_svc_common+{ptr}
+              vmlinux\`do_el0_svc+{ptr}
+              vmlinux\`el0_svc+{ptr}
+              vmlinux\`el0t_64_sync_handler+{ptr}
+              vmlinux\`el0t_64_sync+{ptr}
+
+EOF
+else
+	echo ERROR: unrecognized platform
+	uname -r
+	uname -m
+	exit 1
+fi
+
+# Compare results.
+
+if ! diff -q dtrace.cmp dtrace.post; then
+	echo ERROR: results do not match
+	diff dtrace.cmp dtrace.post
+	echo "==== expect"
+	cat dtrace.cmp
+	echo "==== actual"
+	cat dtrace.out
+	exit 1
+fi
+
+echo success
+
+exit 0
diff --git a/test/unittest/stack/tst.stack_fbt.x b/test/unittest/stack/tst.stack_fbt.x
deleted file mode 100755
index 4561df8bb..000000000
--- a/test/unittest/stack/tst.stack_fbt.x
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-read MAJOR MINOR <<< `uname -r | grep -Eo '^[0-9]+\.[0-9]+' | tr '.' ' '`
-
-if [ $MAJOR -eq 5 -a $MINOR -lt 8 ]; then
-	exit 0
-else
-	echo "Function __vfs_write no longer exists starting in 5.8"
-	exit 2
-fi
diff --git a/test/unittest/stack/tst.stack_fbt.x86_64.r b/test/unittest/stack/tst.stack_fbt.x86_64.r
deleted file mode 100644
index 792ce80ad..000000000
--- a/test/unittest/stack/tst.stack_fbt.x86_64.r
+++ /dev/null
@@ -1,13 +0,0 @@
-                   FUNCTION:NAME
-                          :BEGIN 
-               __vfs_write:entry 
-              vmlinux`__vfs_write+{ptr}
-              vmlinux`ksys_write+{ptr}
-              vmlinux`__x64_sys_write+{ptr}
-              vmlinux`do_syscall_64+{ptr}
-              vmlinux`entry_SYSCALL_64+{ptr}
-
-
--- @@stderr --
-dtrace: script 'test/unittest/stack/tst.stack_fbt.d' matched 2 probes
-dtrace: allowing destructive actions
-- 
2.43.5




More information about the DTrace-devel mailing list