Florian Krohm [Thu, 15 Jan 2026 09:19:10 +0000 (09:19 +0000)]
s390: Remove s390_format_RR and friends.
This patch removes the functions: s390_format_RR, s390_format_RR_RR
and s390_format_RR_FF.
First, because of the disassembly changes in 370531396ad there is no
longer a need to specialise s390_format_RR because the register class
of its operands is now irrelevant. Hence s390_format_RR_RR and
s390_format_RR_FF can go.
Secondly, s390_irgen_RR only calls the function pointer being passed in.
So we can call that function directly and s390_irgen_RR can go as well.
The same reasoning also applies to other opcode formats. Patches will
follow soon. Having several installments gives a chance to actually
proofread them.
Florian Krohm [Sun, 11 Jan 2026 17:54:59 +0000 (17:54 +0000)]
vg_regtest: Miscellaneous tweaks
Drop the requirement that there must be at least one .stderr.exp
file. That way we can eliminate some 440 empty stderr.exp files and
a few stderrB.exp files.
Drop the requirement that there must be a "filter_stderr" script.
If there is nothing to filter (e.g. iropt-test) a filter script is
not meaningful. In that is so desired, specify an empty stderr_filter
and stderrB_filter in the .vgtest file.
Paul Floyd [Sat, 10 Jan 2026 14:53:43 +0000 (15:53 +0100)]
regtest: undo changes to str_tester as a workaround for darwin checked functions
I had added parens to force the use of the function rarther than a
macro expanding to the _chk version. The _chk functions are now wrapped
so no longer need to keep the workaround.
Mark Wielaard [Wed, 7 Jan 2026 21:20:49 +0000 (22:20 +0100)]
Disable linux madvise MADV_GUARD_INSTALL
glibc 2.42+ (with linux 6.13+) uses MADV_GUARD_INSTALL to setup stack
guard pages. valgrind currently isn't able to track this and such
guard pages also don't show up in /proc maps (only in /proc pagemap
since linux 6.14). For now valgrind fails a madvise MADV_GUARD_INSTALL
syscall with EINVAL. This causes glibc to fall back to mprotect
PROT_NONE which valgrind is able to track.
Mark Wielaard [Sat, 3 Jan 2026 13:08:08 +0000 (14:08 +0100)]
VEX: Fix srcdir != builddir build
commit 370531396ad1 ("s390: Use objdump machinery to disassemble insns")
broke srcdir != builddir builds with:
../../../VEX/priv/objdump/s390-dis.c:26:10: fatal error: main_util.h: No such file or directory
26 | #include "main_util.h" // vex_strlen
| ^~~~~~~~~~~~~
This comes from including the "wrong" priv directory for main_util.h
in Makefile.vex.am. Fix this by adding -I$(srcdir)/priv. This was
always wrong but didn't cause issues till now because of the extra
objdump subdir.
Paul Floyd [Fri, 26 Dec 2025 13:20:34 +0000 (14:20 +0100)]
Darwin regtest: ensure no stdout output for memcheck/tests/darwin/deep_badparam
The test was doing a write of an uninit ilocal 32byte char buffer.
This has started outputting junk resulting in a stdout diff. So
make sure that the buffer only contains zeros (but still uninit).
Hope the compiler doesn't get too smart.
Support pmulld (packed multiply 32-bit doubleword integers) instruction
in guest_x86_toIR.c and host_x86_isel.c. Add test function to
sse4-common.h and update none/tests/x86/sse4-x86.c to test the
instruction.
Paul Floyd [Tue, 23 Dec 2025 20:22:17 +0000 (21:22 +0100)]
Darwin mmap: use ARG5 for VG_(di_notify_mmap)
The fix for bug280965 (a long long time ago) changed VG_(di_notify_mmap)
so that instead of opening a new fd to peek at the ELF header it would
reuse the same mmap fd with pread() to avoid resetting fcntl flags.
Except that the patch was applied to mmap in syswrap-generic but not
to the mmap in syswrap-darwin. So the problem remained there on Darwin
for 14 years.
Paul Floyd [Mon, 22 Dec 2025 09:19:30 +0000 (10:19 +0100)]
Helgrind regtest: add asserts to cond_timedwait_test.c
This test fails on Darwin, It looks like Darwin uses another mutex
and it's complaining that the condition mutex is not locked when
the unlock call is made. I made these changes when checking that the
testcase has the same behaviour on FreeBSD.
Paul Floyd [Fri, 19 Dec 2025 05:58:51 +0000 (06:58 +0100)]
Bug 258140 - Valgrind on OS X always reports some memory "still reachable"
Just needed one more suppression for the minimal test in the bugzilla
item. I expect that there will be a seemingly endless number of leaks
in Darwin (different libs, later versions).
Martin Cermak [Tue, 16 Dec 2025 08:52:29 +0000 (09:52 +0100)]
Wrap new lsm_list_modules syscall
The lsm_list_modules syscall returns a list of the active LSM ids. On
success this function returns the number of @ids array elements. This
value may be zero if there are no LSMs active. If @size is insufficient
to contain the return data -E2BIG is returned and @size is set to the
minimum required size. In all other cases a negative value indicating
the error is returned.
Paul Floyd [Sun, 14 Dec 2025 19:23:10 +0000 (20:23 +0100)]
Darwin DRD: redirs for semaphore functions
Like 2802b31ae644301ee641dcae20d1f84373615d54 for Helgrind.
Use the DRD script supported_sem_init in Helgrind tests that use
semaphores, it's clearer than just using tests/os_test
Paul Floyd [Sun, 14 Dec 2025 17:21:19 +0000 (18:21 +0100)]
Darwin helgrind: redirs for semaphore functions
The semaphore functions are not in the pthread library (similar to FreeBSD).
Change the redirs to use libsystem_kernel.dylib
Unfortunately this doesn't help much. Darwin has deprecated these functions
so the tests will compile (with a warning) but at runtime they all fail
with errors like ENOSYS and EBADF.
Paul Floyd [Sun, 14 Dec 2025 12:31:18 +0000 (13:31 +0100)]
Darwin fdleaks: fix handling of recvmsg cmsg
In the Darwin headers the macro __DARWIN_ALIGN32 is used for
the CMSG macros. We were using just ALIGN which looks like
it uses __DARWIN_ALIGN for 8 byte alignment. Using the
wrong alignment gate a wrong count of fds and check_cmsg_for_fds
was only calling ML_(record_fd_open_named) for one fd. The result
was fd errors when writing to a second fd that should have been
recorded.
Paul Floyd [Sun, 14 Dec 2025 09:05:04 +0000 (10:05 +0100)]
Darwin regtest: update none ioctl_moans
This testcase needs IOCTL_REQUEST_BASE to be set to some bogus
value with the platform dependent "no direction" flag set.
That flag wasn't being set for Darwin and so the testcase was
failing.
Andreas Arnez [Fri, 5 Dec 2025 17:01:22 +0000 (18:01 +0100)]
s390x: Simplify single multiplications
So far the single-multiplication instructions are implemented by taking
the low half of a widening multiply. This pattern is then recognized by
the instruction selector, which combines it to a single multiplication
again.
This is unnecessarily complicated, since single-multiply operations can be
expressed directly by Iop_Mul32 and Iop_Mul64 instead. So do this,
simplifying the code generation.
Also, since Iop_Mul32 and Iop_Mul64 haven't really been used before, the
instruction selector generates sub-optimal code for them. Fix that.
Paul Floyd [Thu, 11 Dec 2025 08:06:38 +0000 (09:06 +0100)]
Darwin regtest: update a few expecteds
One predated correct redirection of the C++ library operator new
One has a few line number changes plus I removed an assert that is firing
(asserts firing in tests is never a good thing). And the last one is just
line number changes.
Paul Floyd [Thu, 11 Dec 2025 08:03:08 +0000 (09:03 +0100)]
Darwin libcproc: fix for VG_(read_millisecond_timer)
This function had some peculiar workaround for how the result
was handled. That peculiarity seems to have gone away (some time
before Darwin 17). Now use 'normal' handling for the result for
Darwin 17+.
This was causing some DRD timed mutex testcases to fail.
Paul Floyd [Wed, 10 Dec 2025 07:58:25 +0000 (08:58 +0100)]
Darwin regtest: numerous bits of Darwin 18 cleanup
Add a few more ignore-fn options to the massif tests for the
extra leaks that are in Darwin 18.
Add some suppressions to a couple of memcheck tests that use
num-callers of 2 or 3. The shorter callsteack means some of the
many Darwin default suppressions don't match which was causing
these tests to fail.
Add more DRD suppressions for getaddrinfo. There seems to be a never
ending amount of conflicts in dyld.
Support pmaxsb, pminsb, pmaxuw, pminuw, pmaxud and pminud instructions
in guest_x86_toIR.c and host_x86_isel.c. Move test functions from
amd64/sse4-64.c to sse4-common.h and update none/tests/x86/sse4-x86.c
and sse4-x86.stdout.exp to test all min/max instructions.
Paul Floyd [Tue, 9 Dec 2025 06:33:49 +0000 (07:33 +0100)]
Darwin suppressions: merge old suppression files to darwin-legacy.supp
Merge files for Darwin 10 to 16 into a legacy file. Rename the Darwin 17
file as just darwin.supp. I'll add suppressions to that file, at least for
10.14 and 10.15. When I get to Darwin 20 and the dyld shared cache
we'll see, that might need a new set of suppression files.
Remove freebsd-helgrind-dbgrtld.supp. I thought that it would be useful
but it wasn't. When I merged the Darwin suppression files I wrote a little
duplication detection tool (only for exact duplicates). This found one
duplicate in solaris12.supp that I've removed.
Martin Cermak [Mon, 8 Dec 2025 12:20:25 +0000 (13:20 +0100)]
Wrap new lsm_get_self_attr and lsm_set_self_attr syscalls
Create a system call lsm_get_self_attr() to provide the security
module maintained attributes of the current process.
Create a system call lsm_set_self_attr() to set a security
module maintained attribute of the current process.
Historically these attributes have been exposed to user space via
entries in procfs under /proc/self/attr.
Declare lsm_get_self_attr and lsm_set_self_attr wrappers in
priv_syswrap-linux.h and hook it for {amd64,arm,arm64,mips64,\
ppc32,ppc64,riscv64,s390x,x86}-linux.