public inbox for dtrace@lists.linux.dev
 help / color / mirror / Atom feed
* [PATCH v2] test: stack_fbt
@ 2024-11-07 23:28 eugene.loh
  2024-11-20 19:22 ` [DTrace-devel] " Kris Van Hees
  0 siblings, 1 reply; 6+ messages in thread
From: eugene.loh @ 2024-11-07 23:28 UTC (permalink / raw)
  To: dtrace, dtrace-devel

From: Eugene Loh <eugene.loh@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@oracle.com>
---
 test/unittest/stack/tst.stack3_fbt.aarch64.r |  11 --
 test/unittest/stack/tst.stack3_fbt.d         |  25 ----
 test/unittest/stack/tst.stack3_fbt.x         |   1 -
 test/unittest/stack/tst.stack3_fbt.x86_64.r  |  11 --
 test/unittest/stack/tst.stack_fbt.aarch64.r  |  14 ---
 test/unittest/stack/tst.stack_fbt.d          |  25 ----
 test/unittest/stack/tst.stack_fbt.sh         | 122 +++++++++++++++++++
 test/unittest/stack/tst.stack_fbt.x          |  10 --
 test/unittest/stack/tst.stack_fbt.x86_64.r   |  13 --
 9 files changed, 122 insertions(+), 110 deletions(-)
 delete mode 100644 test/unittest/stack/tst.stack3_fbt.aarch64.r
 delete mode 100644 test/unittest/stack/tst.stack3_fbt.d
 delete mode 120000 test/unittest/stack/tst.stack3_fbt.x
 delete mode 100644 test/unittest/stack/tst.stack3_fbt.x86_64.r
 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.stack3_fbt.aarch64.r b/test/unittest/stack/tst.stack3_fbt.aarch64.r
deleted file mode 100644
index 5c8bfaed2..000000000
--- a/test/unittest/stack/tst.stack3_fbt.aarch64.r
+++ /dev/null
@@ -1,11 +0,0 @@
-                   FUNCTION:NAME
-                          :BEGIN 
-               __vfs_write:entry 
-              vmlinux`__vfs_write
-              vmlinux`ksys_write+{ptr}
-              vmlinux`__arm64_sys_write+{ptr}
-
-
--- @@stderr --
-dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
-dtrace: allowing destructive actions
diff --git a/test/unittest/stack/tst.stack3_fbt.d b/test/unittest/stack/tst.stack3_fbt.d
deleted file mode 100644
index 1a2eaf582..000000000
--- a/test/unittest/stack/tst.stack3_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 depth 3.
- *
- * SECTION: Output Formatting/printf()
- */
-
-#pragma D option destructive
-
-BEGIN
-{
-	system("echo write something > /dev/null");
-}
-
-fbt::__vfs_write:entry
-{
-	stack(3);
-	exit(0);
-}
diff --git a/test/unittest/stack/tst.stack3_fbt.x b/test/unittest/stack/tst.stack3_fbt.x
deleted file mode 120000
index fe0d493c5..000000000
--- a/test/unittest/stack/tst.stack3_fbt.x
+++ /dev/null
@@ -1 +0,0 @@
-tst.stack_fbt.x
\ No newline at end of file
diff --git a/test/unittest/stack/tst.stack3_fbt.x86_64.r b/test/unittest/stack/tst.stack3_fbt.x86_64.r
deleted file mode 100644
index f24c8cba5..000000000
--- a/test/unittest/stack/tst.stack3_fbt.x86_64.r
+++ /dev/null
@@ -1,11 +0,0 @@
-                   FUNCTION:NAME
-                          :BEGIN 
-               __vfs_write:entry 
-              vmlinux`__vfs_write+{ptr}
-              vmlinux`ksys_write+{ptr}
-              vmlinux`__x64_sys_write+{ptr}
-
-
--- @@stderr --
-dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
-dtrace: allowing destructive actions
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..e60c519c8
--- /dev/null
+++ b/test/unittest/stack/tst.stack_fbt.sh
@@ -0,0 +1,122 @@
+#!/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();
+	printf("first 3 frames\n");
+	stack(3);
+	exit(0);
+}' >& dtrace.out
+
+if [ $? -ne 0 ]; then
+	echo ERROR: dtrace failed
+	cat dtrace.out
+	exit 1
+fi
+
+# Strip out blank lines and pointer values.
+
+awk 'NF != 0 { sub(/+0x[0-9a-f]*$/, "+{ptr}"); print }' 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
+
+# Add the first 3 frames a second time.
+
+head -3 dtrace.cmp > dtrace.tmp
+echo first 3 frames >> dtrace.cmp
+cat dtrace.tmp >> dtrace.cmp
+
+# 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [DTrace-devel] [PATCH v2] test: stack_fbt
  2024-11-07 23:28 [PATCH v2] test: stack_fbt eugene.loh
@ 2024-11-20 19:22 ` Kris Van Hees
  2024-11-20 19:38   ` Kris Van Hees
  2024-11-20 20:28   ` Eugene Loh
  0 siblings, 2 replies; 6+ messages in thread
From: Kris Van Hees @ 2024-11-20 19:22 UTC (permalink / raw)
  To: eugene.loh; +Cc: dtrace, dtrace-devel

On Thu, Nov 07, 2024 at 06:28:41PM -0500, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh@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@oracle.com>

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

... with small changes as shown below.

> ---
>  test/unittest/stack/tst.stack3_fbt.aarch64.r |  11 --
>  test/unittest/stack/tst.stack3_fbt.d         |  25 ----
>  test/unittest/stack/tst.stack3_fbt.x         |   1 -
>  test/unittest/stack/tst.stack3_fbt.x86_64.r  |  11 --
>  test/unittest/stack/tst.stack_fbt.aarch64.r  |  14 ---
>  test/unittest/stack/tst.stack_fbt.d          |  25 ----
>  test/unittest/stack/tst.stack_fbt.sh         | 122 +++++++++++++++++++
>  test/unittest/stack/tst.stack_fbt.x          |  10 --
>  test/unittest/stack/tst.stack_fbt.x86_64.r   |  13 --
>  9 files changed, 122 insertions(+), 110 deletions(-)
>  delete mode 100644 test/unittest/stack/tst.stack3_fbt.aarch64.r
>  delete mode 100644 test/unittest/stack/tst.stack3_fbt.d
>  delete mode 120000 test/unittest/stack/tst.stack3_fbt.x
>  delete mode 100644 test/unittest/stack/tst.stack3_fbt.x86_64.r
>  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.stack3_fbt.aarch64.r b/test/unittest/stack/tst.stack3_fbt.aarch64.r
> deleted file mode 100644
> index 5c8bfaed2..000000000
> --- a/test/unittest/stack/tst.stack3_fbt.aarch64.r
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -                   FUNCTION:NAME
> -                          :BEGIN 
> -               __vfs_write:entry 
> -              vmlinux`__vfs_write
> -              vmlinux`ksys_write+{ptr}
> -              vmlinux`__arm64_sys_write+{ptr}
> -
> -
> --- @@stderr --
> -dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
> -dtrace: allowing destructive actions
> diff --git a/test/unittest/stack/tst.stack3_fbt.d b/test/unittest/stack/tst.stack3_fbt.d
> deleted file mode 100644
> index 1a2eaf582..000000000
> --- a/test/unittest/stack/tst.stack3_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 depth 3.
> - *
> - * SECTION: Output Formatting/printf()
> - */
> -
> -#pragma D option destructive
> -
> -BEGIN
> -{
> -	system("echo write something > /dev/null");
> -}
> -
> -fbt::__vfs_write:entry
> -{
> -	stack(3);
> -	exit(0);
> -}
> diff --git a/test/unittest/stack/tst.stack3_fbt.x b/test/unittest/stack/tst.stack3_fbt.x
> deleted file mode 120000
> index fe0d493c5..000000000
> --- a/test/unittest/stack/tst.stack3_fbt.x
> +++ /dev/null
> @@ -1 +0,0 @@
> -tst.stack_fbt.x
> \ No newline at end of file
> diff --git a/test/unittest/stack/tst.stack3_fbt.x86_64.r b/test/unittest/stack/tst.stack3_fbt.x86_64.r
> deleted file mode 100644
> index f24c8cba5..000000000
> --- a/test/unittest/stack/tst.stack3_fbt.x86_64.r
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -                   FUNCTION:NAME
> -                          :BEGIN 
> -               __vfs_write:entry 
> -              vmlinux`__vfs_write+{ptr}
> -              vmlinux`ksys_write+{ptr}
> -              vmlinux`__x64_sys_write+{ptr}
> -
> -
> --- @@stderr --
> -dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
> -dtrace: allowing destructive actions
> 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..e60c519c8
> --- /dev/null
> +++ b/test/unittest/stack/tst.stack_fbt.sh
> @@ -0,0 +1,122 @@
> +#!/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.

Surely this is a copy'n'paste error and should be removed?  Or rather, it 
should be replaced with a message that actually states what this test
exercises/verifies?

Shall I make it:

	Test the stack action with default stack depth and depth 3.

> +
> +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 '

I assume $nusdt should not be used here.

> +BEGIN
> +{
> +	system("echo write something > /dev/null");
> +}
> +
> +fbt::vfs_write:entry
> +{
> +	stack();
> +	printf("first 3 frames\n");
> +	stack(3);
> +	exit(0);
> +}' >& dtrace.out
> +
> +if [ $? -ne 0 ]; then
> +	echo ERROR: dtrace failed
> +	cat dtrace.out
> +	exit 1
> +fi
> +
> +# Strip out blank lines and pointer values.
> +
> +awk 'NF != 0 { sub(/+0x[0-9a-f]*$/, "+{ptr}"); print }' 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
> +
> +# Add the first 3 frames a second time.
> +
> +head -3 dtrace.cmp > dtrace.tmp
> +echo first 3 frames >> dtrace.cmp
> +cat dtrace.tmp >> dtrace.cmp
> +
> +# 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
> 
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel@oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [DTrace-devel] [PATCH v2] test: stack_fbt
  2024-11-20 19:22 ` [DTrace-devel] " Kris Van Hees
@ 2024-11-20 19:38   ` Kris Van Hees
  2024-11-20 20:39     ` Eugene Loh
  2024-11-20 20:28   ` Eugene Loh
  1 sibling, 1 reply; 6+ messages in thread
From: Kris Van Hees @ 2024-11-20 19:38 UTC (permalink / raw)
  To: Kris Van Hees; +Cc: eugene.loh, dtrace, dtrace-devel

On Wed, Nov 20, 2024 at 02:22:56PM -0500, Kris Van Hees wrote:
> On Thu, Nov 07, 2024 at 06:28:41PM -0500, eugene.loh--- via DTrace-devel wrote:
> > From: Eugene Loh <eugene.loh@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@oracle.com>
> 
> Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
> 
> ... with small changes as shown below.

Also...  the full stack output comparison is riddled with issues because the
low level entry point handling for syscalls is an atrea that has changed a
lot and still changes.  E.g. this test fails now on a 6.8.8 upstream kernel
because of the following difference:

<               vmlinux`entry_SYSCALL_64+{ptr}
---
>               vmlinux`entry_SYSCALL_64_after_hwframe+{ptr}

Maybe it would be better to not bother trying to test the full stack trace
because it is bound to keep changing and we'll keep needing to update the
test to deal with various kernel versions.  After all, we do need to be able
to pass tests with upstream kernels also.

> > ---
> >  test/unittest/stack/tst.stack3_fbt.aarch64.r |  11 --
> >  test/unittest/stack/tst.stack3_fbt.d         |  25 ----
> >  test/unittest/stack/tst.stack3_fbt.x         |   1 -
> >  test/unittest/stack/tst.stack3_fbt.x86_64.r  |  11 --
> >  test/unittest/stack/tst.stack_fbt.aarch64.r  |  14 ---
> >  test/unittest/stack/tst.stack_fbt.d          |  25 ----
> >  test/unittest/stack/tst.stack_fbt.sh         | 122 +++++++++++++++++++
> >  test/unittest/stack/tst.stack_fbt.x          |  10 --
> >  test/unittest/stack/tst.stack_fbt.x86_64.r   |  13 --
> >  9 files changed, 122 insertions(+), 110 deletions(-)
> >  delete mode 100644 test/unittest/stack/tst.stack3_fbt.aarch64.r
> >  delete mode 100644 test/unittest/stack/tst.stack3_fbt.d
> >  delete mode 120000 test/unittest/stack/tst.stack3_fbt.x
> >  delete mode 100644 test/unittest/stack/tst.stack3_fbt.x86_64.r
> >  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.stack3_fbt.aarch64.r b/test/unittest/stack/tst.stack3_fbt.aarch64.r
> > deleted file mode 100644
> > index 5c8bfaed2..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.aarch64.r
> > +++ /dev/null
> > @@ -1,11 +0,0 @@
> > -                   FUNCTION:NAME
> > -                          :BEGIN 
> > -               __vfs_write:entry 
> > -              vmlinux`__vfs_write
> > -              vmlinux`ksys_write+{ptr}
> > -              vmlinux`__arm64_sys_write+{ptr}
> > -
> > -
> > --- @@stderr --
> > -dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
> > -dtrace: allowing destructive actions
> > diff --git a/test/unittest/stack/tst.stack3_fbt.d b/test/unittest/stack/tst.stack3_fbt.d
> > deleted file mode 100644
> > index 1a2eaf582..000000000
> > --- a/test/unittest/stack/tst.stack3_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 depth 3.
> > - *
> > - * SECTION: Output Formatting/printf()
> > - */
> > -
> > -#pragma D option destructive
> > -
> > -BEGIN
> > -{
> > -	system("echo write something > /dev/null");
> > -}
> > -
> > -fbt::__vfs_write:entry
> > -{
> > -	stack(3);
> > -	exit(0);
> > -}
> > diff --git a/test/unittest/stack/tst.stack3_fbt.x b/test/unittest/stack/tst.stack3_fbt.x
> > deleted file mode 120000
> > index fe0d493c5..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.x
> > +++ /dev/null
> > @@ -1 +0,0 @@
> > -tst.stack_fbt.x
> > \ No newline at end of file
> > diff --git a/test/unittest/stack/tst.stack3_fbt.x86_64.r b/test/unittest/stack/tst.stack3_fbt.x86_64.r
> > deleted file mode 100644
> > index f24c8cba5..000000000
> > --- a/test/unittest/stack/tst.stack3_fbt.x86_64.r
> > +++ /dev/null
> > @@ -1,11 +0,0 @@
> > -                   FUNCTION:NAME
> > -                          :BEGIN 
> > -               __vfs_write:entry 
> > -              vmlinux`__vfs_write+{ptr}
> > -              vmlinux`ksys_write+{ptr}
> > -              vmlinux`__x64_sys_write+{ptr}
> > -
> > -
> > --- @@stderr --
> > -dtrace: script 'test/unittest/stack/tst.stack3_fbt.d' matched 2 probes
> > -dtrace: allowing destructive actions
> > 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..e60c519c8
> > --- /dev/null
> > +++ b/test/unittest/stack/tst.stack_fbt.sh
> > @@ -0,0 +1,122 @@
> > +#!/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.
> 
> Surely this is a copy'n'paste error and should be removed?  Or rather, it 
> should be replaced with a message that actually states what this test
> exercises/verifies?
> 
> Shall I make it:
> 
> 	Test the stack action with default stack depth and depth 3.
> 
> > +
> > +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 '
> 
> I assume $nusdt should not be used here.
> 
> > +BEGIN
> > +{
> > +	system("echo write something > /dev/null");
> > +}
> > +
> > +fbt::vfs_write:entry
> > +{
> > +	stack();
> > +	printf("first 3 frames\n");
> > +	stack(3);
> > +	exit(0);
> > +}' >& dtrace.out
> > +
> > +if [ $? -ne 0 ]; then
> > +	echo ERROR: dtrace failed
> > +	cat dtrace.out
> > +	exit 1
> > +fi
> > +
> > +# Strip out blank lines and pointer values.
> > +
> > +awk 'NF != 0 { sub(/+0x[0-9a-f]*$/, "+{ptr}"); print }' 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
> > +
> > +# Add the first 3 frames a second time.
> > +
> > +head -3 dtrace.cmp > dtrace.tmp
> > +echo first 3 frames >> dtrace.cmp
> > +cat dtrace.tmp >> dtrace.cmp
> > +
> > +# 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
> > 
> > 
> > _______________________________________________
> > DTrace-devel mailing list
> > DTrace-devel@oss.oracle.com
> > https://oss.oracle.com/mailman/listinfo/dtrace-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [DTrace-devel] [PATCH v2] test: stack_fbt
  2024-11-20 19:22 ` [DTrace-devel] " Kris Van Hees
  2024-11-20 19:38   ` Kris Van Hees
@ 2024-11-20 20:28   ` Eugene Loh
  1 sibling, 0 replies; 6+ messages in thread
From: Eugene Loh @ 2024-11-20 20:28 UTC (permalink / raw)
  To: dtrace, dtrace-devel

On 11/20/24 14:22, Kris Van Hees wrote:

> On Thu, Nov 07, 2024 at 06:28:41PM -0500, eugene.loh--- via DTrace-devel wrote:
>> From: Eugene Loh <eugene.loh@oracle.com>
>>
>> Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
> Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
>
> ... with small changes as shown below.
>
>> diff --git a/test/unittest/stack/tst.stack_fbt.sh b/test/unittest/stack/tst.stack_fbt.sh
>> new file mode 100755
>> @@ -0,0 +1,122 @@
>> +#!/bin/bash
>> +#
>> +# This test verifies the nusdtprobes option.
> Surely this is a copy'n'paste error and should be removed?

Goodness.  Yes.  Good thing that at least one of us is reading this 
stuff!  Oops.

> Or rather, it
> should be replaced with a message that actually states what this test
> exercises/verifies?
>
> Shall I make it:
>
> 	Test the stack action with default stack depth and depth 3.


Thanks.  Well put.

>> +
>> +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 '
> I assume $nusdt should not be used here.

Sigh.  Right.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [DTrace-devel] [PATCH v2] test: stack_fbt
  2024-11-20 19:38   ` Kris Van Hees
@ 2024-11-20 20:39     ` Eugene Loh
  2024-11-20 20:53       ` Kris Van Hees
  0 siblings, 1 reply; 6+ messages in thread
From: Eugene Loh @ 2024-11-20 20:39 UTC (permalink / raw)
  To: dtrace, dtrace-devel

On 11/20/24 14:38, Kris Van Hees wrote:

> On Wed, Nov 20, 2024 at 02:22:56PM -0500, Kris Van Hees wrote:
>> On Thu, Nov 07, 2024 at 06:28:41PM -0500, eugene.loh--- via DTrace-devel wrote:
>>> From: Eugene Loh <eugene.loh@oracle.com>
>>>
>>> Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
>> Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
>>
>> ... with small changes as shown below.
> Also...  the full stack output comparison is riddled with issues because the
> low level entry point handling for syscalls is an atrea that has changed a
> lot and still changes.  E.g. this test fails now on a 6.8.8 upstream kernel
> because of the following difference:
>
> <               vmlinux`entry_SYSCALL_64+{ptr}
> ---
>>                vmlinux`entry_SYSCALL_64_after_hwframe+{ptr}
> Maybe it would be better to not bother trying to test the full stack trace
> because it is bound to keep changing and we'll keep needing to update the
> test to deal with various kernel versions.  After all, we do need to be able
> to pass tests with upstream kernels also.

Maybe.  Or we just bite the bullet and add more cases as they become 
needed.  After all, there is a framework here for being able to add new 
cases in the future.  There is the usual tension between simpler tests 
and more rigorous testing.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [DTrace-devel] [PATCH v2] test: stack_fbt
  2024-11-20 20:39     ` Eugene Loh
@ 2024-11-20 20:53       ` Kris Van Hees
  0 siblings, 0 replies; 6+ messages in thread
From: Kris Van Hees @ 2024-11-20 20:53 UTC (permalink / raw)
  To: Eugene Loh; +Cc: dtrace, dtrace-devel

On Wed, Nov 20, 2024 at 03:39:34PM -0500, Eugene Loh wrote:
> On 11/20/24 14:38, Kris Van Hees wrote:
> 
> > On Wed, Nov 20, 2024 at 02:22:56PM -0500, Kris Van Hees wrote:
> > > On Thu, Nov 07, 2024 at 06:28:41PM -0500, eugene.loh--- via DTrace-devel wrote:
> > > > From: Eugene Loh <eugene.loh@oracle.com>
> > > > 
> > > > Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
> > > Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
> > > 
> > > ... with small changes as shown below.
> > Also...  the full stack output comparison is riddled with issues because the
> > low level entry point handling for syscalls is an atrea that has changed a
> > lot and still changes.  E.g. this test fails now on a 6.8.8 upstream kernel
> > because of the following difference:
> > 
> > <               vmlinux`entry_SYSCALL_64+{ptr}
> > ---
> > >                vmlinux`entry_SYSCALL_64_after_hwframe+{ptr}
> > Maybe it would be better to not bother trying to test the full stack trace
> > because it is bound to keep changing and we'll keep needing to update the
> > test to deal with various kernel versions.  After all, we do need to be able
> > to pass tests with upstream kernels also.
> 
> Maybe.  Or we just bite the bullet and add more cases as they become
> needed.  After all, there is a framework here for being able to add new
> cases in the future.  There is the usual tension between simpler tests and
> more rigorous testing.

Yes, my challenge right now is that I really do not want to try this test on
a large variety of kernel versions to ensure that we cover the "most likely
cases" of kernels people might be wanting to use (and test) DTrace on.  That
is a recipe for fa massive headache.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-11-20 20:53 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-07 23:28 [PATCH v2] test: stack_fbt eugene.loh
2024-11-20 19:22 ` [DTrace-devel] " Kris Van Hees
2024-11-20 19:38   ` Kris Van Hees
2024-11-20 20:39     ` Eugene Loh
2024-11-20 20:53       ` Kris Van Hees
2024-11-20 20:28   ` Eugene Loh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox