|
From: Paul F. <pa...@so...> - 2025-09-20 17:18:26
|
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 |