https://sourceware.org/cgit/valgrind/commit/?id=ba04b3177e8fdcbb71686585850877fe6ab48ffa
commit ba04b3177e8fdcbb71686585850877fe6ab48ffa
Author: Paul Floyd <pj...@wa...>
Date: Sat Sep 20 19:16:38 2025 +0200
FreeBSD regtest: add an amd64 test that max nb args to a syscall get passed correctly
Diff:
---
.gitignore | 1 +
memcheck/tests/amd64-freebsd/filter_arg_check | 22 ++++++++++++++++++++++
memcheck/tests/amd64-freebsd/scalar_arg_check.c | 8 ++++++++
.../amd64-freebsd/scalar_arg_check.stderr.exp | 1 +
.../tests/amd64-freebsd/scalar_arg_check.vgtest | 3 +++
5 files changed, 35 insertions(+)
diff --git a/.gitignore b/.gitignore
index d548fb7bab..75675b1310 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1492,6 +1492,7 @@
/memcheck/tests/amd64-freebsd/posix_fallocate
/memcheck/tests/amd64-freebsd/reallocarray
/memcheck/tests/amd64-freebsd/reallocf
+/memcheck/tests/amd64-freebsd/scalar_arg_check
# /memcheck/tests/x86-freebsd
/memcheck/tests/x86-freebsd/*.stderr.diff
diff --git a/memcheck/tests/amd64-freebsd/filter_arg_check b/memcheck/tests/amd64-freebsd/filter_arg_check
new file mode 100755
index 0000000000..334a326694
--- /dev/null
+++ b/memcheck/tests/amd64-freebsd/filter_arg_check
@@ -0,0 +1,22 @@
+#! /bin/sh
+
+# Only one test uses this which calls syscall(SYS_sendfile)
+# which is the only amd64 syscall that uses 7 arguments
+# The output includes --trace-syscalls=yes which is very verbose
+# but we only want to see the sendfile line
+
+# the libc signature for sendfile is
+# int sendfile(int fd, int s, off_t offset, size_t nbytes,
+# struct sf_hdtr *hdtr, off_t *sbytes, int flags);
+# The testcase uses values from 101 to 107 for the arguments
+# (to make it easy to match the testcase to the log output)
+# Some of the arguments are printed as hex, not too bad.
+# Argument 6 is an offset which seems to get added to some
+# variable length base address before being sent to the syscall.
+# I've checked with truss and ktrace, this doesn't come from Valgrind
+
+grep "SYSCALL.*sendfile" |
+sed 's/==.*//' |
+awk '{l=length($9);$9="0x"substr($9, l-2, l);print}' |
+sed -E 's/\[[0-9]{5}/[xxxxx/'
+
diff --git a/memcheck/tests/amd64-freebsd/scalar_arg_check.c b/memcheck/tests/amd64-freebsd/scalar_arg_check.c
new file mode 100644
index 0000000000..cfa6d4ea08
--- /dev/null
+++ b/memcheck/tests/amd64-freebsd/scalar_arg_check.c
@@ -0,0 +1,8 @@
+#include "../freebsd/scalar.h"
+
+int main(void)
+{
+ /* sendfile uses 7 args */
+ SY(SYS_sendfile, 101, 102, 103, 104, 105, 106, 107);
+}
+
diff --git a/memcheck/tests/amd64-freebsd/scalar_arg_check.stderr.exp b/memcheck/tests/amd64-freebsd/scalar_arg_check.stderr.exp
new file mode 100644
index 0000000000..7b9fc63632
--- /dev/null
+++ b/memcheck/tests/amd64-freebsd/scalar_arg_check.stderr.exp
@@ -0,0 +1 @@
+SYSCALL[xxxxx,1](393) sys_sendfile ( 101, 102, 103, 104, 0x69, 0x6a, 107 )
diff --git a/memcheck/tests/amd64-freebsd/scalar_arg_check.vgtest b/memcheck/tests/amd64-freebsd/scalar_arg_check.vgtest
new file mode 100644
index 0000000000..b5c15205e0
--- /dev/null
+++ b/memcheck/tests/amd64-freebsd/scalar_arg_check.vgtest
@@ -0,0 +1,3 @@
+prog: scalar_arg_check
+vgopts: -q --trace-syscalls=yes
+stderr_filter: filter_arg_check
|