Paul Floyd [Sun, 21 Jan 2024 20:33:06 +0000 (21:33 +0100)]
Bug 480126 - Build failure on Raspberry Pi 5 / OS 6.1.0-rpi7-rpi-v8
The problem is that the Pi 3+ with raspbian has a 64bit aarch64 OS
but a 32bit gnueabihf userland. If you just run "configure" the
result will be an attempt to use 32-bit GCC with the ARM64 Valgrind
platform, which will fail.
This can be fixed by using the appropriate --host= option.
I've updated README.aarch64 with a description of this.
I've also changed configure.ac to take "arm*" for the
ARM platform (previously it was "armv7*"). That's been
a patch on Debian for a while. It will allow building
on older arm hardware and also armv8 (used on the
Raspberry Pi 3 and later models).
Paul Floyd [Thu, 28 Dec 2023 20:50:06 +0000 (21:50 +0100)]
regtest: try to make cachegrind/tests/ann-merge2.vgtest deterministic
Add a touch of the cgout files so that they are more recent than the
source file. git clone seems to sometimes timestamp the source
after the cgout files which generates a warning and a post failure.
At least with FreeBSD on ZFS.
Paul Floyd [Thu, 28 Dec 2023 09:27:18 +0000 (10:27 +0100)]
Bug 479041 - Executables without RW sections do not trigger debuginfo reading
The main change is to not assume that there is always 1 and only 1 RW segment.
Now the rw segment count is obtained from the macho segments.
I've had to make several changes to remove asserts that checked
that there is always 1 or more rw segments. I don't think that this
really affects 'normal' C and C++ compiled binaries. There is one
exp-bbv testcase (x86/million) that is written in assembler and
was failing until I removed all of the asserts.
There's still a bit more work to do.
1. Handle fat binaries - are these still a thing (with "apple silicon")?
2. Use a dynamically sized buffer for the segments rather than just 4k.
Paul Floyd [Fri, 22 Dec 2023 18:59:56 +0000 (19:59 +0100)]
Bug 478837 - valgrind fails to read debug info for rust binaries
mold produces binaries with non-contiguous .rodata and .rodata.xxx
sections. The code that merges their addresses can only handle 1
rodata which means only contiguous sections can be merged.
Since this now seems to be a "normal" case I've changed the warning
message to be a SYMTAB_TRACE message.
Paul Floyd [Sun, 17 Dec 2023 13:18:51 +0000 (14:18 +0100)]
Bug 478624 - Valgrind incompatibility with binutils-2.42 on x86 with new nop patterns (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26)
It was a bit of a struggle to get the testcase to build
with both clang and gcc (oddly enough gcc was more difficult) so
I just resorted to using .byte arrays.
When vgdb replies to qRcmd packet recieved from GDB, it
used to send the reply as simple string. This is wrong,
GDB expects to get a hex encoded string.
Paul Floyd [Sun, 26 Nov 2023 09:23:34 +0000 (10:23 +0100)]
FreeBSD regtest: make aio test more robust
Had to remove a few of the errors - seems to me that aio errors
are not handled well by the FreeBSD kernel. E.g., it looks
like the error state doesn't get cleared by aio_return.
Paul Floyd [Sat, 18 Nov 2023 12:02:30 +0000 (13:02 +0100)]
Bug 428364 - Signals inside io_uring_enter not handled
Patch provide by
Andrew Soutar kdebugtraq@andrewsoutar.com
Thanks!
I haven't added the reproducers as they require interrupting
the Valgrind process. Maybe the tests can be adapted to use
fork and have the parent kill the child running io_uring.
Paul Floyd [Sat, 18 Nov 2023 06:34:00 +0000 (07:34 +0100)]
Darwin: remove global variable used in aio_return
This was using a global variable to signify a read success
between pre- and post- aio_return. I don't think that this
was safe. There could be multiple calls to aio_return on
different threads. The global aiocpb_table is safe enough
as the pointers to control block are unique. However if two
threads manipulate was_a_successful_aio_read there's no way
of telling them apart. Rather than trying to make
was_a_successful_aio_read thread safe I did the same as on
FreeBSD and removed post- aio_return and now do everything
in pre- aio_return. No global variable, no thread hazard.
Adds syscall wrappers for aio_readv and aio_writev
Also rewrote the wrappers for aio_read, aio_write and aio_return
as they weren't correctly checking the async memory.
The code is similar th that of Darwin with one exception.
Darwin uses a global variable to communicate between the
pre- and post- aio_return wrappers. I don't think that is
safe when there are multiple aio reads in flight. Instead
I put everything in the pre- aio_return wrapper.
Paul Floyd [Sun, 5 Nov 2023 12:35:01 +0000 (13:35 +0100)]
Bug 476535 - Difference in allocation size for massif/tests/overloaded-new between clang++/libc++ and g++/libstdc++
In the end all I could do was filter the results.
libc++ and libstdc++ allocate different sizes of stuff for their own usr.
That means that when we get to allocating aligned blocks there is some
slop (up to the alignment size) that gets counted. And the amount of
that slop depends on the prior (internal) allocations.
Paul Floyd [Sun, 5 Nov 2023 09:59:43 +0000 (10:59 +0100)]
massif regtest: make verbose tests work on both 32bit and 64bit
Now alloc fns only have the appropriate new overloads which
means 32bit has unsigned size but 64bit has unsigned long.
Filter the unsigned long to unsigned.
Paul Floyd [Sun, 5 Nov 2023 09:06:56 +0000 (09:06 +0000)]
massif regtest: try adding a new expected for overloaded-new
Added a filter for "pool" that's used on Arch Linux
I'm not too confident that the new expected will work for
all architectures or even versions of libstdc++
Paul Floyd [Fri, 3 Nov 2023 20:46:13 +0000 (21:46 +0100)]
FreeBSD: remove some massif regtest expecteds
These were added mainly to have a cleanish slate with GCC on FreeBSD.
Unfortunately FreeBSD doesn't have dependent packages, so no debuginfo
for libstdc++ and the GCC port libstdc++ is stripped. That means that
the filters for internal GCC allocations don't work.
Since I hardly use GCC any more I'm getting rid of these expecteds.
Mark Wielaard [Thu, 2 Nov 2023 18:50:07 +0000 (19:50 +0100)]
Do not run memcheck/tests/x86-linux/scalar when root
The test expects some syscalls to fail, but when run as root
the user actually has permission to do silly things. So skip
the test if we notice we are root.