From ba04b3177e8fdcbb71686585850877fe6ab48ffa Mon Sep 17 00:00:00 2001 From: Paul Floyd Date: Sat, 20 Sep 2025 19:16:38 +0200 Subject: [PATCH] FreeBSD regtest: add an amd64 test that max nb args to a syscall get passed correctly --- .gitignore | 1 + memcheck/tests/amd64-freebsd/filter_arg_check | 22 +++++++++++++++++++ .../tests/amd64-freebsd/scalar_arg_check.c | 8 +++++++ .../amd64-freebsd/scalar_arg_check.stderr.exp | 1 + .../amd64-freebsd/scalar_arg_check.vgtest | 3 +++ 5 files changed, 35 insertions(+) create mode 100755 memcheck/tests/amd64-freebsd/filter_arg_check create mode 100644 memcheck/tests/amd64-freebsd/scalar_arg_check.c create mode 100644 memcheck/tests/amd64-freebsd/scalar_arg_check.stderr.exp create mode 100644 memcheck/tests/amd64-freebsd/scalar_arg_check.vgtest diff --git a/.gitignore b/.gitignore index d548fb7ba..75675b131 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 000000000..334a32669 --- /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 000000000..cfa6d4ea0 --- /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 000000000..7b9fc6363 --- /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 000000000..b5c15205e --- /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 -- 2.47.3