]> sourceware.org Git - valgrind.git/log
valgrind.git
2 years agoBug 444110 priv/guest_ppc_toIR.c: warning: duplicated 'if' condition
Carl Love [Mon, 31 Oct 2022 17:29:31 +0000 (13:29 -0400)]
Bug 444110 priv/guest_ppc_toIR.c: warning: duplicated 'if' condition

The compiler reported a duplicated condition in VEX/priv/guest_ppc_toIR.c
The handling of the plbz and xxpermx instructions have the same if/elseif
conditions.  The else if condition for the plbz instruction was wrong.  The
elseif statement should be checking for pType2 not pType1.  The plbz
instruction was inadvertently being handled by the else statement for
the lbz instruction.

This patch fixes the checking for the plbz and lbz instructions.

2 years agoFreeBSD: more filtering for gdbserver_tests/nlvgdbsigqueue
Paul Floyd [Fri, 28 Oct 2022 20:19:47 +0000 (22:19 +0200)]
FreeBSD: more filtering for gdbserver_tests/nlvgdbsigqueue

Needed for FreeBSD 14 without debug info files.

2 years agoFreeBSD: fix a typo in my previous commit for VKI_AT_USRSTACKLIM define.
Paul Floyd [Fri, 28 Oct 2022 15:04:26 +0000 (17:04 +0200)]
FreeBSD: fix a typo in my previous commit for VKI_AT_USRSTACKLIM define.

2 years agoFreeBSD: remove dependency on elf header and make VKI_ copies of AT defines
Paul Floyd [Fri, 28 Oct 2022 14:52:50 +0000 (16:52 +0200)]
FreeBSD: remove dependency on elf header and make VKI_ copies of AT defines

Also prepare NEWS and configure.ac for 3.21.0

2 years ago-> 3.20.0 final VALGRIND_3_20_0
Mark Wielaard [Mon, 24 Oct 2022 11:59:17 +0000 (13:59 +0200)]
-> 3.20.0 final

2 years agoFix DRD and Helgrind on Solaris.
Paul Floyd [Sun, 23 Oct 2022 13:16:51 +0000 (15:16 +0200)]
Fix DRD and Helgrind on Solaris.

It seems as though Solaris RW sections can also have the
execute flag set. Checking for RW and !X was causing the
debuginfo reading to fail. That meant that the helgrind and
drd preload shared libraries weren't processed, and also
the rtld bind function pointers not setup. Without the rtld bind
function an assert fires and Helgrind and DRD abort.

2 years ago{callgrind,callgrind}/tests/ann{1,2}.vgtest touch cgout-test
Mark Wielaard [Sat, 22 Oct 2022 15:29:00 +0000 (17:29 +0200)]
{callgrind,callgrind}/tests/ann{1,2}.vgtest touch cgout-test

Both a.c and cgout-test are checked into the repository and
used in testcases. Make sure cgout-test is newer than a.c
before running the post script to prevent warnings liks:

@@ WARNING @@ WARNING @@ WARNING @@ WARNING @@ WARNING @@ WARNING @@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Source file 'a.c' is more recent than input file
../../cachegrind/tests/cgout-test'.
@ Annotations may not be correct.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

2 years agoFix build on macOS
Paul Floyd [Thu, 20 Oct 2022 21:11:42 +0000 (23:11 +0200)]
Fix build on macOS

A while back when I added support for split RW PT_LOAD sections
one instance in the macho code didn't get updated. Also
update the comment that refers to the old struct member that
got renamed.

2 years agoSet version to 3.20.0-RC1 and update NEWS
Mark Wielaard [Wed, 19 Oct 2022 23:40:12 +0000 (01:40 +0200)]
Set version to 3.20.0-RC1 and update NEWS

2 years agoAdd none/tests/freebsd/auxv.stderr.exp-freebsd14 to EXTRA_DIST
Mark Wielaard [Wed, 19 Oct 2022 22:34:15 +0000 (00:34 +0200)]
Add none/tests/freebsd/auxv.stderr.exp-freebsd14 to EXTRA_DIST

2 years ago Auxv user stack for FreeBSD, last part
Paul Floyd [Tue, 18 Oct 2022 22:51:05 +0000 (00:51 +0200)]
 Auxv user stack for FreeBSD, last part

Clean up, didn't need an extra func for user stack limit.

2 years agoAuxv user stack for FreeBSD, part 2
Paul Floyd [Tue, 18 Oct 2022 20:11:32 +0000 (22:11 +0200)]
Auxv user stack for FreeBSD, part 2

Try to set the stack limit.

2 years agoAdd auxv entry for usrstack on FreeBSD 14, part 1
Paul Floyd [Tue, 18 Oct 2022 21:38:36 +0000 (23:38 +0200)]
Add auxv entry for usrstack on FreeBSD 14, part 1

Previously the user stack was obtained using the kern.usrstack
sysctl. This has been moved to auxv in FreeBSD 14. Without
this change all programs linked with libthr fail with a panic
when they fail to get a valid user stack address.

Note also in FreeBSD 14 ASLR has been enabled. This means that
there is now some extra difference between the address layout of
a standalone executable and the same executable under valgrind.

Pre-FreeBSD 14 and under valgrind:
lib rtld is loaded after the executable (though a much smaller gap
inder valgrind)
user stack starts at 0x7ffffffff000

FreeBSD 14
lib rtld is loaded at a much higher address, around 0xeeeecc15000
user stack is at a much lower address, around 0x82073d000

This means that valgrind behaves somewhat as thogh the
kern.elf(64|32).aslr.stack sysctl were set to 0.

Some more work will be needed for the stack size.
There are no plans at the moment to match the FreeBSD 14 memory
layout.

2 years agoImprove FreeBSD handling of W^X setting.
Paul Floyd [Sun, 16 Oct 2022 16:58:52 +0000 (18:58 +0200)]
Improve FreeBSD handling of W^X setting.

FreeBSD has a sysctl that prevents mmapping regions
that are both Write and Exec. This setting prevents
Valgrind from workig correctly.

This change uses ELF tags to turn off W^X control,
and also removes a sysctl check for the same flag.

Patch contributor:
https://github.com/semihalf-Duleba-Kornel/valgrind/commit/0a3a794143f7c451a5a00e598854ae8d813f8f17

2 years agoRemove register cache to fix 458915 gdbserver causes wrong syscall return
Philippe Waroquiers [Sat, 15 Oct 2022 20:59:08 +0000 (22:59 +0200)]
Remove register cache to fix 458915 gdbserver causes wrong syscall return

The valgrind gdbserver inheritated a register cache from the original
GDBserver implementation.
The objective of this register cache was to improve the performance
of GDB-> gdbserver -> inferior by avoiding the gdbserver having to
do ptrace system calls each time GDB wants to read or write a register
when the inferior is stopped.

This register cache is however not useful for the valgrind gdbserver:
As the valgrind gdbserver being co-located with the inferior, it
can directly and efficiently read and write registers from/to the VEX
state.

This commit ensures the valgrind GDBserver directly reads from
VEX state instead of fetching the registers from the VEX state and
copying them to the gdbserver regcache.

Similarly, when GDB wants to modify a register, the valgrind GDB server now
directly writes into the VEX state instead of writing the registers
in the regcache and having the regcache flushed to the VEX state
when execution is resumed.

The files regcache.h and regcache.c are still useful as they provide
a translation between a register number, a register name on one side
and the offset in an array of bytes in the format expected by GDB.
The regcache now is only used to create this array of bytes, which is
itself only used temporarily when GDB reads or writes the complete
set of registers instead of reading/writing one register at a time.

Removing the usage of this regcache avoids the bug 458915.
The regcache was causing the bug in the following circumstances:
We have a thread executing code, while we have a bunch of threads
that are blocked in a syscall.
When a thread is blocked in a syscall, the VEX rax register is set to the
syscall nr.
A thread executing code will check from time to time if GDB tries to
attach.
When GDB attaches to the valgrind gdbserver , the thread executing code
will copy the registers from all the threads to the thread gdbserver regcache.
However, the threads blocked in a system call can be unblocked e.g.
because the epoll_wait timeout expires. In such a case, the thread will
still execute the few instructions that follow the syscall instructions
till the thread is blocked trying to acquire the scheduler lock.
These instructions are extracting the syscall return code from the host
register and copies it to the valgrind VEX state.
However, this assembly code is not aware that there is a gdbserver cache.
When the unblocked thread is on the acquire lock statement,
the GDB server regcache is now inconsistent (i.e. different from) the
real VEX state.
When finally GDB tells GDB server to continue execution, the GDB server
wrongly detected that its regcache was modified compared to the VEX state:
the regcache still contains e.g. for the rax register the syscall number
while the unblocked thread has put the syscall return code in the VEX
rax register. GDBserver then flushed the regcache rax (containing the
syscall number) to the VEX rax.
And that led to the detected bug that the syscall return code seen by
the guest application was the syscall number.

Removing the regcache ensures that GDB directly reads the values
from VEX and directly writes to VEX state.

Note that we could still have GDB reading from VEX a register value
that will be changed a few instructions later.
GDB will then show some (slightly) old/obsolete values
for some registers to the user.
This should have no consequence as long as GDB does not try to modify
the registers to execute an inferior call.

The bug did not happen systematically as most of the time, when threads are
blocked in syscalls, vgdb attaches using ptrace to the valgrind process.
When vgdb attaches with ptrace, it stops all the threads using linux syscall.
When vgdb stops the threads, the threads blocked in a syscall will not
execute the instructions between the syscall instruction and the lock
acquire, and so the problem of desynchronisation between the VEX state
and the register cache could not happen.

This commit touches architecture specific files of the gdbserver,
it has been tested on amd64/debian, on pcc64/centos and on arm64/ubuntu.
Possibly, some untested arch might not compile but the fix should be trivial.

2 years agoBug 131186 - writev reports error in (vector[...])
Paul Floyd [Wed, 12 Oct 2022 06:34:51 +0000 (08:34 +0200)]
Bug 131186 - writev reports error in (vector[...])

Use the index rather than ...
Also done for readv.

2 years agoFix 459477 missing \n in XERROR and ERROR calls
Philippe Waroquiers [Sun, 25 Sep 2022 11:09:38 +0000 (13:09 +0200)]
Fix 459477 missing \n in XERROR and ERROR calls

Based on a patch by Alexandra Hajkova.

2 years agoUpdate valinfo5 FreeBSD expected
Paul Floyd [Sun, 18 Sep 2022 19:20:12 +0000 (21:20 +0200)]
Update valinfo5 FreeBSD expected

Slightly less diffs wrt the main one now with llvm 13 and FreeBSD 13.1

2 years agoAdd abexit to non-Linux expecteds for gdb atexit events
Paul Floyd [Sun, 18 Sep 2022 14:57:04 +0000 (16:57 +0200)]
Add abexit to non-Linux expecteds for gdb atexit events

2 years agoAdd abexit in --vgdb-stopat. fix 459031 --error-exitcode doc. Add lwpid in thread_wra...
Philippe Waroquiers [Sat, 17 Sep 2022 20:45:17 +0000 (22:45 +0200)]
Add abexit in --vgdb-stopat. fix 459031 --error-exitcode doc. Add lwpid in thread_wrapper tracing.

Note that this modifies files on darwin/solaris/bsd but I only did a linux
build so possibly this commit might cause a compilation error, that should
then be trivial to fix.

Also added memmem test in the list of ignored files.

2 years agoPowerPC: Fix the L field for the sync and dcbf instructions.
Carl Love [Wed, 7 Sep 2022 16:59:03 +0000 (11:59 -0500)]
PowerPC: Fix the L field for the sync and dcbf instructions.

The L field for the sync and dcbf instructions are three bits wide
starting with ISA 3.1.  The L field is two bits wide prior to ISA 3.1.

Patch based on patches from Shivaprasad Bhat <shivaprasadbhat@gmail.com>

2 years agoReplace git:// URLs with https:// URLs
Mark Wielaard [Mon, 29 Aug 2022 08:10:27 +0000 (10:10 +0200)]
Replace git:// URLs with https:// URLs

For unauthenticated git clones it is slightly more secure to use the https
link because the site certificate will be checked. Also https might be more
accessible from all places than the git protocol port.

2 years agoPowerpc, dcbf add check for L field and ISA version.
Carl Love [Mon, 1 Aug 2022 21:20:38 +0000 (17:20 -0400)]
Powerpc, dcbf add check for L field and ISA version.

ISA 3.1 added the L = 4 and L = 6 versions of the instruction.  Add a
check to make sure the L filed is valid for the instruction.

2 years agoPowerpc, add support for the sync instruction with L = 2, 3 and 5.
Carl Love [Mon, 1 Aug 2022 19:18:18 +0000 (15:18 -0400)]
Powerpc, add support for the sync instruction with L = 2, 3 and 5.

ISA 3.0 supports the sync instruction with L = 2.
ISA 3.1 supports the sync instruction with L = 3 and 5.

2 years agoAdd memmem memcheck tests
Mark Wielaard [Thu, 19 May 2022 22:08:40 +0000 (18:08 -0400)]
Add memmem memcheck tests

Ensure that memmem behaves as expected and doesn't yield memcheck false
positives.

2 years agoBug 454040 - Add intercept for memmem on s390x
Andreas Arnez [Thu, 19 May 2022 11:54:06 +0000 (13:54 +0200)]
Bug 454040 - Add intercept for memmem on s390x

Memcheck may report false positives in an optimized version of memmem on
s390x, specifically on arch13 systems.  Prevent this by adding an
intercept for memmem on s390x platforms.

2 years agoFix reading dwarf info for arrays with lower bound and count
Paul Floyd [Tue, 5 Jul 2022 10:53:34 +0000 (12:53 +0200)]
Fix reading dwarf info for arrays with lower bound and count

There was an out-by-one error, the upper bound was being set to
count whereas it should be count - 1.

This was causing drd/tests/atomic_var to fail because the g_dummy
array seemed to overlap the following s_y variable.

This seems only to have been caused by clang, not GCC, which
presumably supplies lower and upper bound rather than lower
bound and count.

2 years agoRemove a hack for read dwarf var size on FreeBSD
Paul Floyd [Tue, 5 Jul 2022 10:51:44 +0000 (12:51 +0200)]
Remove a hack for read dwarf var size on FreeBSD

The need for this are lost in the mists of time. It no longer
has any effect.

2 years agoBackout synthesizing AT_BSDFLAGS auxv entry
Paul Floyd [Sun, 3 Jul 2022 19:28:57 +0000 (21:28 +0200)]
Backout synthesizing AT_BSDFLAGS auxv entry

This was causing a crash on several FreeBSD 13.1 testcases
(but not 13.0). Probably related to "sig fastblock".

2 years agoFix a couple of compiler warnings because of some missed size_t -> SizeT changes.
Paul Floyd [Sun, 3 Jul 2022 14:25:10 +0000 (16:25 +0200)]
Fix a couple of compiler warnings because of some missed size_t -> SizeT changes.

2 years agoImprove FreeBSD sysctl kern.usrstack
Paul Floyd [Sun, 3 Jul 2022 11:58:18 +0000 (13:58 +0200)]
Improve FreeBSD sysctl kern.usrstack

This was handled by sysctl but not sysctlbyname.
The value returned was wrong.
Added a regtest.

2 years agoBug-456171 [PATCH] FreeBSD: Don't record address errors when accessing the 'kern...
Paul Floyd [Sun, 3 Jul 2022 11:05:54 +0000 (13:05 +0200)]
Bug-456171 [PATCH] FreeBSD: Don't record address errors when accessing the 'kern.ps_strings' sysctl struct

There is quite a lot of stuff here.

The problem is that setproctitle and kern.ps_strings were using the Valgrind host auxv
rather than the guest. The proposed patch would have just ignored those memory ranges.

I've gone a fair bit further than that
1. refactored the initimg code for building the client auxv. Previously we were
   simply ignoring any non-scalar entries. Now we copy most of thse as well.
   That means that 'strtab' built on the client stack no longet only contains
   strings, at can also now contain binary structures. Note I was a bit
   concerned that there may be some alignment issues, but I haven't seen any
   problems so far.
2. Added intercepts to sysctl and sysctlbyname for kern.ps_strings, then find
   AT_PS_STRINGS from the client auxv that is now usable from step 1.
3. Some refactoring of sysctl and sysctlbyname syscall wrappers. More to do
   there!
4. Added a setproctitle testcase (that also tests the sysctls).
5. Updated the auxv testcase now that more AT_* entries are handled.

2 years agoSimplify FreeeBSD Helgrind suppresssions
Paul Floyd [Sun, 3 Jul 2022 07:04:33 +0000 (09:04 +0200)]
Simplify FreeeBSD Helgrind suppresssions

Also add a file for debug builds of the runtime link editor rtld.
This is not used by default.

2 years agoFix memcheck/tests/amd64-freebsd/Makefile.am EXTRA_DIST reallocf
Mark Wielaard [Sat, 18 Jun 2022 13:30:54 +0000 (15:30 +0200)]
Fix memcheck/tests/amd64-freebsd/Makefile.am EXTRA_DIST reallocf

EXTRA_DIST included reallocf.stderr.out, should have been
reallocf.stderr.exp.

2 years agoAdd some FreeBSD Helgrind suppressions
Paul Floyd [Sat, 18 Jun 2022 06:59:08 +0000 (08:59 +0200)]
Add some FreeBSD Helgrind suppressions

These are mainly for debug builds of libthr.so for which
1. the lib name will be libthr.so.3.full
2. callstacks change because of inlining
3. more symbols are available

2 years agoFix a few issues with reallocf and add a FreeBSD amd64 regtest
Paul Floyd [Fri, 17 Jun 2022 11:52:45 +0000 (13:52 +0200)]
Fix a few issues with reallocf and add a FreeBSD amd64 regtest

1. new_size is size_t (unsigned) and can't be negative
2. NULL not returned when the size is 0 and the memory freed
3. set ENOMEM if the allocation fails (but this time NULL does
   get returned)

2 years agoAdd an expected for FreeBSD gdbserver_tests/nlcontrolc
Paul Floyd [Wed, 15 Jun 2022 05:06:25 +0000 (07:06 +0200)]
Add an expected for FreeBSD gdbserver_tests/nlcontrolc

2 years agoImplement vgdb invoker on FreeBSD
Paul Floyd [Tue, 14 Jun 2022 20:39:31 +0000 (22:39 +0200)]
Implement vgdb invoker on FreeBSD

This is a translation of the Linux vgdb-invoker-ptrace.c
to the FreeBSD ptrace dialect. It seems to be basically
functional (3 out of 4 of the regression tests pass,
and for the 4th one it seems to be a limitation of
ptrace on FreeBSD that it can cause syscalls to be
interrupted).

2 years agosupport DW_FORM_addrx3 and DW_FORM_strx3
Luboš Luňák [Tue, 26 Apr 2022 11:53:14 +0000 (13:53 +0200)]
support DW_FORM_addrx3 and DW_FORM_strx3

Apparently these may get used after all with large enough binaries,
despite being somewhat tricky with regard to endianess.

2 years agoimplement support for missing DW_LLE_* and DW_RLE_* values
Luboš Luňák [Mon, 25 Apr 2022 20:11:27 +0000 (22:11 +0200)]
implement support for missing DW_LLE_* and DW_RLE_* values

2 years agotreat DW_TAG_skeleton_unit like DW_TAG_compile_unit
Luboš Luňák [Tue, 26 Apr 2022 06:35:16 +0000 (08:35 +0200)]
treat DW_TAG_skeleton_unit like DW_TAG_compile_unit

It's basically the same, except for being split-dwarf. Handling
it is required e.g. for reading line info.

2 years agoAdd cachegrind and callgrind post.{diff,out} to .gitignore
Mark Wielaard [Mon, 13 Jun 2022 19:29:01 +0000 (21:29 +0200)]
Add cachegrind and callgrind post.{diff,out} to .gitignore

2 years agoread dwarf5 DW_FORM_rnglistx and DW_FORM_loclistx
Luboš Luňák [Tue, 19 Apr 2022 10:20:16 +0000 (12:20 +0200)]
read dwarf5 DW_FORM_rnglistx and DW_FORM_loclistx

The .debug_rnglists/.debug_loclists sections first have a list of offsets
and then a list of the actual data that those offsets point to.

2 years agoavoid warning about missing DW_AT_*_base in skip_DIE()
Luboš Luňák [Mon, 25 Apr 2022 20:11:27 +0000 (22:11 +0200)]
avoid warning about missing DW_AT_*_base in skip_DIE()

Similarly to setup_cu_bases(), DW_FORM_addrx etc. may depend
on DW_AT_addr_base etc. that have not been read yet.

2 years agoread dwarf5 DW_FORM_addrx* and DW_FORM_strx* as generated by Clang14
Luboš Luňák [Tue, 19 Apr 2022 09:14:52 +0000 (11:14 +0200)]
read dwarf5 DW_FORM_addrx* and DW_FORM_strx* as generated by Clang14

DW_FORM_addrx* are offsets into .debug_addr containing addresses.
DW_FORM_strx* are offsets into .debug_str_offsets, which contain
offsets into .debug_str. Support for these also requires reading
DW_AT_addr_base and DW_AT_str_offsets_base before any other field
in the abbrev table entry, as those may use this form.

2 years agoFix some compiler warnings on FreeBSD
Paul Floyd [Sun, 12 Jun 2022 13:48:32 +0000 (15:48 +0200)]
Fix some compiler warnings on FreeBSD

Includes one serious issue of a switch case fallthrough

2 years agosyswrap-linux.c (sys_execveat): Define path as const HChar *
Mark Wielaard [Thu, 9 Jun 2022 21:06:36 +0000 (23:06 +0200)]
syswrap-linux.c (sys_execveat): Define path as const HChar *

Like buf, path (ARG2) is a const HChar *
Prevents a gcc warning: assignment discards 'const' qualifier from
                        pointer target type [-Wdiscarded-qualifiers]
13328 |                        path = buf;
      |                             ^

2 years agosyswrap-linux.c (sys_bpf): Compare raw_tracepoint.name against 0, not NULL
Mark Wielaard [Thu, 9 Jun 2022 20:51:56 +0000 (22:51 +0200)]
syswrap-linux.c (sys_bpf): Compare raw_tracepoint.name against 0, not NULL

raw_tracepoint.name is a __vki_u64 (even on 32bit arches), so compare
against zero, not NULL, to avoid a gcc warning.

2 years agoread properly unit headers depending on dwarf5 unit_type
Luboš Luňák [Tue, 19 Apr 2022 08:58:44 +0000 (10:58 +0200)]
read properly unit headers depending on dwarf5 unit_type

There may be additional fields that need to be skipped over, otherwise
further reading will interpret these incorrectly.

2 years agoBug 452802 Handle lld 9+ split RW PT_LOAD segments correctly
Paul Floyd [Thu, 9 Jun 2022 20:03:04 +0000 (22:03 +0200)]
Bug 452802 Handle lld 9+ split RW PT_LOAD segments correctly

Many changes mostly related to modifying VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd )
so that instead of triggering debuginfo reading after seeing one RX PT_LOAD and 1 RW PT_LOAD it
can handle either 1 or 2 RW PT_LOADs.

2 years agoRegtest memcheck/tests/amd64/shr_edx does not build on macOS
Paul Floyd [Wed, 8 Jun 2022 21:17:09 +0000 (23:17 +0200)]
Regtest memcheck/tests/amd64/shr_edx does not build on macOS

Make it conditional

2 years agoA little bit in indentation
Paul Floyd [Tue, 7 Jun 2022 18:38:17 +0000 (20:38 +0200)]
A little bit in indentation

2 years agoAdd syscall wrappers for FreeBSD funlinkat and copy_file_range
Paul Floyd [Mon, 6 Jun 2022 20:32:53 +0000 (22:32 +0200)]
Add syscall wrappers for FreeBSD funlinkat and copy_file_range

Aslo add a smoketest for /bin/cp, which uses copy_file_range

2 years agoUse a different way to tell where the syscall handler was interrupted on FreeBSD...
Paul Floyd [Mon, 6 Jun 2022 13:18:29 +0000 (15:18 +0200)]
Use a different way to tell where the syscall handler was interrupted on FreeBSD and macOS

I was using a global variable. This would be set to '1' just before
calling the function to save cflags and cleared just after, then
using the variable to fill in the 'outside_rnage_ condition
in VG_(fixup_guest_state_after_syscall_interrupted)

Even though I haven't experienced any isseus with that, the comments just before
do_syscall_for_client made me want to try an alternative.

This code is very ugly and won't please the language lawyers.
Functions aren't guaranteed to have an address and there is no
guarantee that the binary layout will reflect the source layout.
Sadly C doesn't have something like "sizeof(*function)" to give
the size of a function in bytes. The next best that I could
manage was to use dummy 'marker' functions just after the
ones I want the end address of and then use the address of
'marker - 1'

I did think of one other way to do this. That would be to
generate a C file containing the function sizes. This would
require

1. "put_flag_size.c" would depend on the VEX guest_(x86|amd64)_helpers
   object files
2. Extract the sizes, for instance

echo -n "const size_t x86_put_eflag_c_size = 0x" > put_flag_size.c
nm -F sysv libvex_x86_freebsd_a-guest_x86_helpers.o | awk -F\| '/LibVEX_GuestX86_put_eflag_c/{print $5}' >> put_flag_size.c
echo ";" >> put_flag_size.c

That seems fairly difficult to do in automake and I'm not sure if
it would be robust.

2 years agoFix FreeBSD x86 allocation of GDT for threads on x86
Paul Floyd [Mon, 6 Jun 2022 09:20:39 +0000 (11:20 +0200)]
Fix FreeBSD x86 allocation of GDT for threads on x86

Also update README.freebsd
This is about the last significant failure that is x86 FreeBSD specific.

2 years agoRemove expected from EXTRA_DIST
Paul Floyd [Thu, 2 Jun 2022 19:02:59 +0000 (21:02 +0200)]
Remove expected from EXTRA_DIST

2 years agoAdd code that makes 1st page after brk inaccessible.
Paul Floyd [Thu, 2 Jun 2022 18:31:12 +0000 (20:31 +0200)]
Add code that makes 1st page after brk inaccessible.

Also remove FreeBSD expected.

Note: this code is also mssing from Solaris and macOS initimg's.

2 years agoCleanup of str* and mem* functions
Paul Floyd [Wed, 1 Jun 2022 20:09:50 +0000 (22:09 +0200)]
Cleanup of str* and mem* functions

Add function checks to configure.ac
Use the configure HAVE_ macro rather than OS-dependent tests.
I suspect that a lot of the tests hve been obsolete for many
years. Add wrappers to FreeBSD.
:w

2 years agoRemove alignment warning from a FreeBSD regtest
Paul Floyd [Wed, 1 Jun 2022 19:54:19 +0000 (21:54 +0200)]
Remove alignment warning from a FreeBSD regtest

2 years agoForgot wildcard in FreeBSD DRD suppression, previous commit
Paul Floyd [Tue, 31 May 2022 20:34:51 +0000 (22:34 +0200)]
Forgot wildcard in FreeBSD DRD suppression, previous commit

2 years agoAdd suppresions for DRD and Helgrind, guard variables on FreeBSD 14.0
Paul Floyd [Tue, 31 May 2022 20:18:13 +0000 (22:18 +0200)]
Add suppresions for DRD and Helgrind, guard variables on FreeBSD 14.0

This is a change probably related to clang 13.

guard variables make the initialization of function static variables
thread safe (only the initialization, not other accesses).

2 years agoAdd a DRD suppression for thread local data on FreeBSD 14.0
Paul Floyd [Tue, 31 May 2022 20:05:28 +0000 (22:05 +0200)]
Add a DRD suppression for thread local data on FreeBSD 14.0

2 years agoAdd some filtering to massif C++ tests with GCC on FreeBSD
Paul Floyd [Tue, 31 May 2022 18:36:18 +0000 (20:36 +0200)]
Add some filtering to massif C++ tests with GCC on FreeBSD

I should perhaps just delete these expected. The testcases don't
work well with the stripped libstc++ without debuginfo on FreeBSD.
That means that the --ignore-fn= options don't work to remove
exception handling and iostream allocations and just leave the
tesatcase allocations.

2 years agoIndent and add more comments for FreeBSD syscall code
Paul Floyd [Mon, 30 May 2022 20:57:34 +0000 (22:57 +0200)]
Indent and add more comments for FreeBSD syscall code

After working on an issue that turns out to seem to be with the
FreeBSD kernel sched_uler I played a lot with the Valgrind
syscall and scheduler code. I've kept the comments and the
reformatting.

2 years agoFix typo in added EXTRA_DIST expected
Paul Floyd [Fri, 27 May 2022 13:45:25 +0000 (15:45 +0200)]
Fix typo in added EXTRA_DIST expected

2 years agoSecond attempt at new expected
Paul Floyd [Fri, 27 May 2022 13:19:12 +0000 (15:19 +0200)]
Second attempt at new expected

Not sure what I did wrong, but it failed straight away.
Might have been playing with the .cpp file?

2 years agoAdd a suppression For FreeBSD DRD
Paul Floyd [Fri, 27 May 2022 12:50:15 +0000 (14:50 +0200)]
Add a suppression For FreeBSD DRD

Occurs with clang++13

2 years agoForgot to push Makefile.am with EXTRA_DIST for new expecteds
Paul Floyd [Fri, 27 May 2022 12:49:25 +0000 (14:49 +0200)]
Forgot to push Makefile.am with EXTRA_DIST for new expecteds

2 years agoAdd new expecteds for drd/tests/annotate_trace_memory[_xml]
Paul Floyd [Fri, 27 May 2022 12:18:18 +0000 (14:18 +0200)]
Add new expecteds for drd/tests/annotate_trace_memory[_xml]

With clang13 x86 there is a code gen difference wrt GCC:

gcc:
  i64 = 9;
 8048a6f:       c7 05 68 9f 04 08 09    movl   $0x9,0x8049f68
 8048a76:       00 00 00
 8048a79:       c7 05 6c 9f 04 08 00    movl   $0x0,0x8049f6c
 8048a80:       00 00 00
  i64 += 0x12345678ULL;
 8048a83:       a1 68 9f 04 08          mov    0x8049f68,%eax
 8048a88:       8b 15 6c 9f 04 08       mov    0x8049f6c,%edx
 8048a8e:       05 78 56 34 12          add    $0x12345678,%eax
 8048a93:       83 d2 00                adc    $0x0,%edx
 8048a96:       a3 68 9f 04 08          mov    %eax,0x8049f68
 8048a9b:       89 15 6c 9f 04 08       mov    %edx,0x8049f6c

 clang:
   i64 = 9;
  401ae2:       c7 05 64 3f 40 00 00    movl   $0x0,0x403f64
  401ae9:       00 00 00
  401aec:       c7 05 60 3f 40 00 09    movl   $0x9,0x403f60
  401af3:       00 00 00
  i64 += 0x12345678ULL;
  401af6:       8b 15 60 3f 40 00       mov    0x403f60,%edx
  401afc:       81 c2 78 56 34 12       add    $0x12345678,%edx
  401b02:       83 15 64 3f 40 00 00    adcl   $0x0,0x403f64
  401b09:       89 15 60 3f 40 00       mov    %edx,0x403f60
  401b0f:       8d 85 1c ff ff ff       lea    -0xe4(%ebp),%eax

This inversion of the order of the low and high 32bits
of the 64bit word causes a difference in traced loads
and stores reported by DRD.

2 years agoAdd another expected for memcheck/tests/leak_cpp_interior
Paul Floyd [Fri, 27 May 2022 11:27:58 +0000 (13:27 +0200)]
Add another expected for memcheck/tests/leak_cpp_interior

There is a difference between the outputs when using
32bit and 64bit with clang++/libc++

Running the test in a shell with the output piped through c++filt I see
64bit:
--2153-- operator new[](unsigned long)(32) = 0x55AB040
--2153-- malloc(31) = 0x55AB0A0
--2153-- operator new[](unsigned long)(8) = 0x55AB100
--2153-- operator new(unsigned long)(16) = 0x55AB150
--2153-- operator new(unsigned long)(16) = 0x55AB1A0
--2153-- operator new(unsigned long)(32) = 0x55AB1F0
--2153-- operator new(unsigned long)(32) = 0x55AB250

32bit:
--55024-- operator new[](unsigned int)(28) = 0x7D41030
--55024-- malloc(31) = 0x7D41090
--55024-- operator new[](unsigned int)(4) = 0x7D410F0
--55024-- operator new(unsigned int)(8) = 0x7D41140
--55024-- operator new(unsigned int)(8) = 0x7D41190
--55024-- operator new(unsigned int)(16) = 0x7D411E0
--55024-- operator new(unsigned int)(16) = 0x7D41230
--55024-- operator new(unsigned int)(32) = 0x7D41280

Note the extra 32 byte allocation at the end. This is because of

  str2 += " rocks (str2)\n"; // interior ptr.

at the end of void doit(void)

Details of the mechaism here
https://stackoverflow.com/questions/21694302/what-are-the-mechanics-of-short-string-optimization-in-libc

str2 starts containing 9 characters "Valgrind"
Catenating to it makes it "Valgrind rocks (str2)\n" which is exactly 22 characters.

The 64bit SSO has a capacity of 22 chars, so there is no need to switch from
SSO in the stack variable to using heap allocation.

The 32bit SSO only has a capacity of 10, so there there is space
in the SSO for the initial string but the catenation expands it
beyond the SSO capacity and there is a heap allocation
via the std::basic_string allocator, which calls raw ::operator new.

2 years agoFixes for FreeBSD pdkill syscall wrapper
Paul Floyd [Tue, 24 May 2022 21:39:12 +0000 (23:39 +0200)]
Fixes for FreeBSD pdkill syscall wrapper

2 years agoAdd small sleep to none/tests/pth_2sig to help prevent hanging
Paul Floyd [Mon, 23 May 2022 19:27:58 +0000 (21:27 +0200)]
Add small sleep to none/tests/pth_2sig to help prevent hanging

On FreeBSD 13.0 x86 this testcase was hanging on some systems.
It seems like the SIGTERM signals were not being recieved
before the child exited, which left the parent hanging in the
pause() waiting to be killed.

Reported, patch provided and tested by Nick Briggs.

2 years agoChange coredump note names for FreeBSD
Paul Floyd [Sun, 22 May 2022 11:05:10 +0000 (13:05 +0200)]
Change coredump note names for FreeBSD

Was not able to load vgcore files with lldb on FreeBSD.

I think that there is a way to go for lldb / FreeBSD to be able to fully read vgcore files.
See
https://www.moritz.systems/blog/lldb-core-dump-support-improvements/

2 years agoAdd expecteds to EXTRA_DIST
Paul Floyd [Fri, 20 May 2022 20:13:16 +0000 (22:13 +0200)]
Add expecteds to EXTRA_DIST

2 years agoAdd cmdline{1,2}.stdout.exp-non-linux files
Mark Wielaard [Fri, 20 May 2022 12:58:45 +0000 (14:58 +0200)]
Add cmdline{1,2}.stdout.exp-non-linux files

The new --enable-debuginfod=<yes|no> command line flag is only
available on GNU/Linux systems. Add new exp file for other systems.

2 years agoAdd --enabled-debuginfod command line option
Aaron Merey [Mon, 9 May 2022 20:56:23 +0000 (16:56 -0400)]
Add --enabled-debuginfod command line option

Currently debuginfod is enabled in Valgrind when the $DEBUGINFOD_URLS
environment variable is set and disabled when it isn't set.

This patch adds an --enable-debuginfod=<yes|no> command line option
to provide another level of control over whether Valgrind attempts
to download debuginfo. "yes" is the default value.

$DEBUGINFOD_URLS must still contain debuginfod server URLs in order
for this feature to work when --enable-debuginfod=yes.

https://bugs.kde.org/show_bug.cgi?id=453602

2 years agoClobber ecx for clang x86 leak tests
Paul Floyd [Thu, 19 May 2022 20:40:03 +0000 (22:40 +0200)]
Clobber ecx for clang x86 leak tests

The assembler for leak-cases.c on x86 with clang for f() ends with

  40198b:       c7 04 24 00 00 00 00    movl   $0x0,(%esp)
  401992:       e8 c9 fe ff ff          call   401860 <mk>
  401997:       89 04 24                mov    %eax,(%esp)
  40199a:       e8 c1 fe ff ff          call   401860 <mk>
  40199f:       a3 74 40 40 00          mov    %eax,0x404074
  4019a4:       a1 74 40 40 00          mov    0x404074,%eax
  4019a9:       8b 08                   mov    (%eax),%ecx
  4019ab:       83 c1 08                add    $0x8,%ecx
  4019ae:       89 08                   mov    %ecx,(%eax)
  4019b0:       c7 05 74 40 40 00 00    movl   $0x0,0x404074
  4019b7:       00 00 00
  4019ba:       83 c4 04                add    $0x4,%esp
  4019bd:       5d                      pop    %ebp
  4019be:       c3                      ret

If I've read that correctly, at the enc ECX contains the pointer
to allocated memory returned by mk() plus 8.

main() doesn't clobber ECX either, so this shows up in the
leak checks.

Clobbering ECX fixes the following testcases on FreeBSD 13.1 x86 with clang 13

< gdbserver_tests/mcblocklistsearch        (stderrB)
< memcheck/tests/leak-cases-full           (stderr)
< memcheck/tests/leak-cases-summary        (stderr)
< memcheck/tests/leak-cycle                (stderr)
< memcheck/tests/leak-tree                 (stderr)
< memcheck/tests/lks                       (stderr)

2 years agoAdd filter for size of stat structure
Paul Floyd [Thu, 19 May 2022 19:28:35 +0000 (21:28 +0200)]
Add filter for size of stat structure

2 years agoMake regtest memcheck/tests/amd64/insn-pmovmskb clang friendly
Paul Floyd [Thu, 19 May 2022 19:21:18 +0000 (21:21 +0200)]
Make regtest memcheck/tests/amd64/insn-pmovmskb clang friendly

Clang 13 on FreeBSD 13.1 emits a cmov which changes the error
messages. Use an 'if' instead which works with both clang and GCC.

2 years agoAdd attribute noinline to memcheck/tests/wrap6.c
Paul Floyd [Thu, 19 May 2022 18:58:10 +0000 (20:58 +0200)]
Add attribute noinline to memcheck/tests/wrap6.c

With clang 13 this testcase was failing due to inlining/optimization of fn_12.

2 years agoUpdate FreeBSD (f)stat tests for FreeBSD 13.1
Paul Floyd [Thu, 19 May 2022 17:52:57 +0000 (19:52 +0200)]
Update FreeBSD (f)stat tests for FreeBSD 13.1

Somewhat annoyingly, libc is using tail call optimization
which alters our callstacks.

FreeBSD 13 and earlier had something like

{compatibility API check}
  1372e0:       48 8d 95 08 fe ff ff    lea    -0x1f8(%rbp),%rdx
  1372e7:       bf 8d 01 00 00          mov    $0x18d,%edi
  1372ec:       44 89 f6                mov    %r14d,%esi
  1372ef:       31 c0                   xor    %eax,%eax
  1372f1:       e8 8a c5 09 00          call   1d3880 <syscall@plt>

{compatibility API check}
  1342b9:       3d 9f 4f 12 00          cmp    $0x124f9f,%eax
  1342be:       7c 25                   jl     1342e5 <_fstatfs+0x55>
  1342c0:       49 8b 07                mov    (%r15),%rax
  1342c3:       48 3b 45 e0             cmp    -0x20(%rbp),%rax
  1342c7:       0f 85 51 01 00 00       jne    13441e <_fstatfs+0x18e>

{compatibility not needed}
  1342cd:       44 89 f7                mov    %r14d,%edi
  1342d0:       48 89 de                mov    %rbx,%rsi
  1342d3:       48 81 c4 e8 01 00 00    add    $0x1e8,%rsp
  1342da:       5b                      pop    %rbx
  1342db:       41 5e                   pop    %r14
  1342dd:       41 5f                   pop    %r15
  1342df:       5d                      pop    %rbp

{tail call optimization}

  1342e0:       e9 bb a0 09 00          jmp    1ce3a0 <__sys_fstatfs@plt>

{compatibility API call}

So I've updated the expecteds and added a filter for 13.0 and older.

2 years agoFix memcheck/tests/freebsd/fexecve
Paul Floyd [Thu, 19 May 2022 08:10:32 +0000 (10:10 +0200)]
Fix memcheck/tests/freebsd/fexecve

This contained a stupid mistake, and had been working by luck.

2 years agoMake testcase myrandom() noinline.
Paul Floyd [Wed, 18 May 2022 21:41:43 +0000 (23:41 +0200)]
Make testcase myrandom() noinline.

With clang 13 none/tests/amd64/amd64locked fails because of what
looks like a clang optimization error. do_bt_G_E_tests is the
point of failure, and one factor is that clang 13 is inlining
myrandom().

2 years agoMore changes for FreeBSD 13.1
Paul Floyd [Sat, 14 May 2022 14:46:03 +0000 (16:46 +0200)]
More changes for FreeBSD 13.1

These concern auxv, swapoff and fcntl F_KINFO

I wanted to use the new fcntl K_INFO to replace the existing
horrible implementation of resolve_filename, but it seems to
have change the behaviour for redirected files. Several
fdleak regtests fail because stdout resolves to an empty
string.

2 years agoChanges to auxv for FreeBSD 13.1
Paul Floyd [Sat, 14 May 2022 14:24:22 +0000 (16:24 +0200)]
Changes to auxv for FreeBSD 13.1

2 years agoIntercept strncmp for glibc ld.so v2.28+
Mike Crowe [Mon, 9 Sep 2019 13:16:16 +0000 (14:16 +0100)]
Intercept strncmp for glibc ld.so v2.28+

In glibc 5aad5f617892e75d91d4c8fb7594ff35b610c042 (first released in
v2.28) a call to strncmp was added to dl-load.c:is_dst. This causes
valgrind to complain about glibc's highly-optimised strncmp performing
sixteen-byte reads on short strings in ld.so. Let's intercept strncmp in
ld.so too so we use valgrind's simple version to avoid this problem.

2 years agoTry again for FreeBSD errno_aligned_allocs on x86
Paul Floyd [Tue, 10 May 2022 19:01:01 +0000 (21:01 +0200)]
Try again for FreeBSD errno_aligned_allocs on x86

Harder than I thought to trigger ENOMEM on x86, so just fake it.

2 years agoUpdate FreeBSD memcheck/tests/freebsd/errno_aligned_allocs.c for x86
Paul Floyd [Tue, 10 May 2022 18:23:27 +0000 (20:23 +0200)]
Update FreeBSD memcheck/tests/freebsd/errno_aligned_allocs.c for x86

Size to force an ENOMEM on 64bit too big for 32bit.

2 years agoAdd check for DRD OMP tests for FreeBSD
Paul Floyd [Tue, 10 May 2022 18:08:43 +0000 (20:08 +0200)]
Add check for DRD OMP tests for FreeBSD

2 years agoBug 446754 Improve error codes from alloc functions under memcheck
Paul Floyd [Mon, 9 May 2022 20:53:04 +0000 (22:53 +0200)]
Bug 446754 Improve error codes from alloc functions under memcheck

I've made these changes only for FreeBSD and Solaris for the moment.

I don't know what should be done on Linux for aligned_alloc/memalign.
The current Valgrind code refects the glibc implementation, but not
what the documentation says.

2 years agoFreeBSD shm_open2 also accepts first argument as SHM_ANON
Paul Floyd [Mon, 9 May 2022 19:27:36 +0000 (21:27 +0200)]
FreeBSD shm_open2 also accepts first argument as SHM_ANON

Add an extra test to scalar

2 years agoFreeBSD shm_open2 arg5 seems to be optional
Paul Floyd [Mon, 9 May 2022 09:58:45 +0000 (11:58 +0200)]
FreeBSD shm_open2 arg5 seems to be optional

This syscall doesn't have a libc interface and manpage so
the documentation is skimpy.

2 years agoAdd FreeBSD shm_open2 syscall wrapper
Paul Floyd [Mon, 9 May 2022 09:05:49 +0000 (11:05 +0200)]
Add FreeBSD shm_open2 syscall wrapper

2 years agoAdd FreeBSD-specific expected for memcheck/tests/gone_abrt_xml
Paul Floyd [Mon, 9 May 2022 07:47:12 +0000 (09:47 +0200)]
Add FreeBSD-specific expected for memcheck/tests/gone_abrt_xml

The difference is in the si_code. Linux has a value of 0, FreeBSD has
65537. This is correct.

From vki-freebsd.h

/*
 * si_code values
 */

and indeed this signal gets sent by kill()

2 years agoMake memcheck/tests/clientperm clang-friendly
Paul Floyd [Mon, 9 May 2022 07:16:48 +0000 (09:16 +0200)]
Make memcheck/tests/clientperm clang-friendly

The use of the ternary operator was causing diffs compared to
GCC output. Switching to use two 'ifs' should remove this
difference.

2 years agoUpdate clang version of insn-pmovmskb expected.
Paul Floyd [Mon, 9 May 2022 06:15:06 +0000 (08:15 +0200)]
Update clang version of insn-pmovmskb expected.

I'm not sure when this output changed.

This expected differs from the main GCC expected due to clang emitting
a cmovne for the ternary expression in 'use':
fprintf(stderr, "%d: Invalid value is %s\n", index, invalid ? "true" : "false");

2 years agoFreeBSD: only set osrel for executables.
Paul Floyd [Mon, 9 May 2022 05:49:56 +0000 (07:49 +0200)]
FreeBSD: only set osrel for executables.

2 years agoFreeBSD x86 small logging changes and add comments explaining why none/tests/manythre...
Paul Floyd [Sat, 7 May 2022 15:30:23 +0000 (17:30 +0200)]
FreeBSD x86 small logging changes and add comments explaining why none/tests/manythreads fails

2 years agoUpdate FreeBSD struct vki_kinfo_vmentry
Paul Floyd [Sat, 7 May 2022 15:28:08 +0000 (17:28 +0200)]
Update FreeBSD struct vki_kinfo_vmentry

2 years agoBug 453055 shared_timed_mutex drd test fails with "Lock shared failed" message
Paul Floyd [Wed, 27 Apr 2022 19:13:45 +0000 (21:13 +0200)]
Bug 453055 shared_timed_mutex drd test fails with "Lock shared failed" message

Patch submited by Jesus Checa jcheca@redhat.com

This page took 0.077313 seconds and 5 git commands to generate.