]> sourceware.org Git - valgrind.git/log
valgrind.git
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

2 years agoBug 452779 Valgrind fails to build on FreeBSD 13.0 with llvm-devel (15.0.0)
Paul Floyd [Wed, 27 Apr 2022 19:10:35 +0000 (21:10 +0200)]
Bug 452779 Valgrind fails to build on FreeBSD 13.0 with llvm-devel (15.0.0)

Only link with libgcc-sup if the compiler is clang.
Still need -lgcc

2 years agoFix warning building memcheck/tests/memalign2
Paul Floyd [Tue, 19 Apr 2022 20:36:36 +0000 (22:36 +0200)]
Fix warning building memcheck/tests/memalign2

Was getting warnings with clang like

memalign2.c:62:17: warning: requested alignment is not a power of 2 [-Wnon-power-of-two-alignment]
   p = memalign(0, 100);      assert(0 == (long)p % 8);

2 years agomemcheck/tests/amd64/shr_edx builds fine with clang
Paul Floyd [Tue, 19 Apr 2022 20:27:59 +0000 (22:27 +0200)]
memcheck/tests/amd64/shr_edx builds fine with clang

Make it build unconditionally

2 years agoAdd a configure test for -ansi and use it for none/tests/ansi
Paul Floyd [Tue, 19 Apr 2022 20:21:37 +0000 (22:21 +0200)]
Add a configure test for -ansi and use it for none/tests/ansi

2 years agoBug 452779 Valgrind fails to build on FreeBSD 13.0 with llvm-devel (15.0.0)
Paul Floyd [Tue, 19 Apr 2022 20:03:01 +0000 (22:03 +0200)]
Bug 452779 Valgrind fails to build on FreeBSD 13.0 with llvm-devel (15.0.0)

This fixes building.

I may make the -lgcc and libgcc-sup conditonal on not using clang later.

2 years agoSupport new memfd_secret linux syscall (447)
Di Chen [Thu, 14 Apr 2022 16:08:17 +0000 (00:08 +0800)]
Support new memfd_secret linux syscall (447)

memfd_secret is a new syscall in linux 5.14. memfd_secret() is
disabled by default and a command-line option needs to be added to
enable it at boot time.

$ cat /proc/cmdline
[...] secretmem.enable=y

https://bugs.kde.org/451878
https://lwn.net/Articles/865256/

2 years agocoregrind: fix compilation for uclibc
Dario Binacchi [Fri, 8 Apr 2022 10:36:33 +0000 (12:36 +0200)]
coregrind: fix compilation for uclibc

It fixes a known iusse whose details are described at [1] and more
generally it guarantees that Valgrind is properly compiled for ulibc.

[1] https://www.mail-archive.com/valgrind-users@lists.sourceforge.net/msg05295.html

Suggested-by Michael Trimarchi <michael@amarulasolutions.com>
Co-developed-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
2 years agoSome more auxv extensions for FreeBSD 14
Paul Floyd [Wed, 13 Apr 2022 22:01:49 +0000 (00:01 +0200)]
Some more auxv extensions for FreeBSD 14

New entries added to testcase and documented in initimg.
May need more work

2 years agoMissing defines for FreeBSD 14 swapoff
Paul Floyd [Wed, 13 Apr 2022 21:32:55 +0000 (23:32 +0200)]
Missing defines for FreeBSD 14 swapoff

+1 typo

2 years agoUpdates to FreeBSD syscalls for FreeBSD 14
Paul Floyd [Wed, 13 Apr 2022 21:00:44 +0000 (23:00 +0200)]
Updates to FreeBSD syscalls for FreeBSD 14

3 new syscalls, and swapoff has a COMPAT13 version.

2 years agoUpdate FreeBSD scalar for x86
Paul Floyd [Wed, 13 Apr 2022 20:59:09 +0000 (22:59 +0200)]
Update FreeBSD scalar for x86

Missed one execve diff.

2 years agoSet version to 3.20.0.GIT
Mark Wielaard [Tue, 12 Apr 2022 22:34:19 +0000 (00:34 +0200)]
Set version to 3.20.0.GIT

2 years agoFix typo in EXTRA_DIST
Paul Floyd [Tue, 12 Apr 2022 21:55:46 +0000 (23:55 +0200)]
Fix typo in EXTRA_DIST

2 years agoBug 452274 memcheck crashes with Assertion 'sci->status.what == SsIdle' failed
Paul Floyd [Tue, 12 Apr 2022 21:34:41 +0000 (23:34 +0200)]
Bug 452274 memcheck crashes with Assertion 'sci->status.what == SsIdle' failed

FreeBSD (and Darwin) use the carry flag for syscall syscall status.
That means that in the assembler for do_syscall_for_client_WRK
they have a call to LibVEX_GuestAMD64_put_rflag_c (amd64) or
LibVEX_GuestX86_put_eflag_c (x86). These also call WRK functions.

The problem is that do_syscall_for_client_WRK has carefully crafted
labels correspinding to IP addresses. If a signal interrupts
processdings, IP can be compared to these addresses so that
VG_(fixup_guest_state_after_syscall_interrupted) can work
out how to resume the syscall. But if IP is in the save
carry flag functions, the address is not recognized and
VG_(fixup_guest_state_after_syscall_interrupted) fails.

The crash in the title happens because the interrupted
syscall does not reset its status, and on the next syscall
it is expected that the status be idle.

To fix this I added global variables that get set to 1
just before calling the save carry flag functions, and cleared
just after. VG_(fixup_guest_state_after_syscall_interrupted)
can then check this and work out which section we are in
and resume the syscall correctly.

Also:

Start a new NEWS section for 3.20

Add a regtest for this and also a similar one for Bug 445032
(x86-freebsd only, new subdir).

I saw that this problem also probably exists with macOS, so I made
the same changes there (not yet tested)

2 years agoFix building on macOS
Paul Floyd [Mon, 11 Apr 2022 20:32:45 +0000 (22:32 +0200)]
Fix building on macOS

Adds a feature check for clockid_t

Also fix a typo in a macro affecting pthread_mutex_clocklock on Linux.

2 years ago-> 3.19.0 final. VALGRIND_3_19_0
Mark Wielaard [Mon, 11 Apr 2022 13:09:40 +0000 (15:09 +0200)]
-> 3.19.0 final.

2 years agoExtend helgrind suppression for _IO_*xsputn* FILE* state manipulation
Mark Wielaard [Mon, 11 Apr 2022 12:45:49 +0000 (14:45 +0200)]
Extend helgrind suppression for _IO_*xsputn* FILE* state manipulation

commit 7b5867b1f "helgrind reports false races for printfs using
mempcpy on FILE* state" extended the helgrind-glibc-io-xsputn
suppression by also covering mempcpy (instead of __GI_mempcpy).
The test added in that commit exposed a couple of other variants
of this suppression where _IO_*xsputn* called memcpy (instead of
mempcpy) and/or had an extra indirection/function in between.

Replace the two two suppressions with one that covers all cases
where _IO_*xsputn* *mem*cpy variants with possibly another ...
function in between.

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

2 years agoUpdate Solaris execve with checks for NULL argv
Paul Floyd [Sun, 10 Apr 2022 21:02:13 +0000 (23:02 +0200)]
Update Solaris execve with checks for NULL argv

Also requires 2 expected to be updated

2 years agoFix a crash handling fexecve.
Paul Floyd [Sun, 10 Apr 2022 18:55:28 +0000 (20:55 +0200)]
Fix a crash handling fexecve.

Found this by testing the Solaris execx (the bits that are
Linux-cmpatible) test. That was giving

--28286-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--28286-- si_code=2;  Faulting address: 0x4A0095A;  sp: 0x1002ca9c88

valgrind: the 'impossible' happened:
   Killed by fatal signal

host stacktrace:
==28286==    at 0x5803DE54: vgPlain_strcpy (m_libcbase.c:309)
==28286==    by 0x5810A9B3: vgSysWrap_linux_sys_execveat_before (syswrap-linux.c:13310)
==28286==    by 0x580953C9: vgPlain_client_syscall (syswrap-main.c:2234)

It's a mistake to copy the path obtained with VG_(resolve_filename) to
the client ARG2, it's unlikely to have space for the path.

Instead just copy the pointer.

2 years ago-> 3.19.0.RC2
Mark Wielaard [Sat, 9 Apr 2022 00:13:46 +0000 (02:13 +0200)]
-> 3.19.0.RC2

2 years agohelgrind reports false races for printfs using mempcpy on FILE* state
Mark Wielaard [Fri, 8 Apr 2022 12:58:38 +0000 (14:58 +0200)]
helgrind reports false races for printfs using mempcpy on FILE* state

We already have a suppression for helgrind which is for when glibc
uses __GI_mempcpy to manipulate internal FILE state (this was bug
352130). But since glibc-2.26 mempcpy is used instead __GI_mempcpy,
making the suppresion from the original bug obsolete.

This patch adds a new suppression using mempcpy but doesn't replace
the original suppression for older systems.

Patch adding suppression + testcase by Jesus Checa <jcheca@redhat.com>

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

2 years agoMove ht_sigchld_ignore and ht_ignore_node to pub_tool_signals.h
Mark Wielaard [Fri, 8 Apr 2022 07:42:10 +0000 (09:42 +0200)]
Move ht_sigchld_ignore and ht_ignore_node to pub_tool_signals.h

ht_sigchld_ignore and ht_ignore_node were defined in pub_core_signals.h
which cannot include any other tool header.

...checking header files and include directives
*** File coregrind/pub_core_signals.h must not include pub_tool_hashtable.h

So move the definition and type to pub_tool_signals.h

2 years agoFix out of tree builds.
Randy MacLeod [Wed, 17 Oct 2018 01:01:04 +0000 (21:01 -0400)]
Fix out of tree builds.

The paths to these files need to be fully specified in
the out of tree build case. glibc-2.X.supp is a generated file so the
full path is deliberately not specified in that case.

Also adjust the mpi include dir location as valgrind.h is
generated as well and needs to be taken out of build dir.

Also adjust the location of generated xml file. And the search paths
for the xmllint, xsltproc and xmlto programs.

Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
2 years agoBug 445011: SIGCHLD is sent when valgrind uses debuginfod-find
Aaron Merey [Wed, 26 Jan 2022 01:24:18 +0000 (20:24 -0500)]
Bug 445011: SIGCHLD is sent when valgrind uses debuginfod-find

Valgrind fork+execs debuginfod-find in order to perform debuginfod
queries. Any SIGCHLD debuginfod-find sends upon termination can
mistakenly be delivered to the client running under valgrind.

To prevent this, record in a hash table the PID of each process
valgrind forks for internal use. Do not send SIGCHLD to the client
if it is from a PID in this hash table.

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

2 years agoUpdate mc_main Copyright message to include 2022
Mark Wielaard [Thu, 7 Apr 2022 20:02:12 +0000 (22:02 +0200)]
Update mc_main Copyright message to include 2022

We haven't ran auxprogs/change-copyright-year since we switched to git.
This means most Copyright year ranges still say 2017. The script also
doesn't work for years >= 2020. Instead of trying to figure out how to
correctly update the per file Copyright year ranges just update the
main copyright notice that the program outputs on startup.

2 years agoUpdate FreeBSD [f]execve expecteds
Paul Floyd [Thu, 7 Apr 2022 05:56:27 +0000 (07:56 +0200)]
Update FreeBSD [f]execve expecteds

As requested by Mark, for https://bugs.kde.org/show_bug.cgi?id=450437

2 years agomemfd test should be memfd_create test
Di Chen [Tue, 29 Mar 2022 23:59:25 +0000 (07:59 +0800)]
memfd test should be memfd_create test

Currently, syscall memfd_create was tested by this:

$ perl tests/vg_regtest memcheck/tests/linux/memfd.vgtest

Since memfd_secret introduced in kernel 5.14, valgrind should rename
the "memfd" test to "memfd_create" test to avoid the ambiguity, so that
user will not get confused with the "memfd_secret" test.

After this change, syscall memfd_create will be tested by:

$ perl tests/vg_regtest memcheck/tests/linux/memfd_create.vgtest

2 years agoWarn for execve syscall with argv or argv[0] being NULL.
Mark Wielaard [Wed, 16 Feb 2022 21:56:31 +0000 (22:56 +0100)]
Warn for execve syscall with argv or argv[0] being NULL.

For execve valgrind would silently fail when argv was NULL or
unadressable. Make sure that this produces a warning under memcheck.

The linux kernel accepts argv[0] being NULL, but most other kernels
don't since posix says it should be non-NULL and it causes argc to
be zero which is unexpected and might cause security issues.

This adjusts some testcases so they don't rely on execve succeeding
when argv is NULL and expect warnings about argv or argv[0] being
NULL or unaddressable.

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

2 years agoMissed macro when adding FreeBSD 13.1
Paul Floyd [Wed, 6 Apr 2022 18:51:54 +0000 (20:51 +0200)]
Missed macro when adding FreeBSD 13.1

Also add the names of some new FreeBSD 14 syscalls (not yet
inplemented in Valgrind).

2 years agoPowerpc 32bit, fix the vbpermq support
Carl Love [Tue, 5 Apr 2022 01:31:33 +0000 (21:31 -0400)]
Powerpc 32bit, fix the vbpermq support

Passing the two 128-bit vA and vB arguments doesn't work in 32-bit mode.
The clean helper was changed to compute the result for 8 indexes.  The
helper is then called twice to get the result for the upper 64-bits of the
vB register and the lower 64-bits of the vB register.

The patch is an additional fix for bugzilla 451827.

2 years agoAdd missing bugzilla items and some more FreeBSD/DRD/Helgrind news
Paul Floyd [Mon, 4 Apr 2022 05:52:45 +0000 (07:52 +0200)]
Add missing bugzilla items and some more FreeBSD/DRD/Helgrind news

2 years agoSecond go at memcheck/tests/freebsd/relapathat
Paul Floyd [Sun, 3 Apr 2022 20:28:26 +0000 (22:28 +0200)]
Second go at memcheck/tests/freebsd/relapathat

Missed adding the argument to the C file
Needs more filtering

2 years agoFixes for memcheck/tests/freebsd/realpathat
Paul Floyd [Sun, 3 Apr 2022 20:00:09 +0000 (22:00 +0200)]
Fixes for memcheck/tests/freebsd/realpathat

The syscall to realpathat was missing the buffer size argument.
By luck, no problem on amd64 but this failed on x86.
This adds the argument and a filter for the errors (size_t can be 4 or 8 bytes)

2 years agoAdd filter to memcheck/tests/freebsd/fexecve for the size
Paul Floyd [Sun, 3 Apr 2022 19:28:24 +0000 (21:28 +0200)]
Add filter to memcheck/tests/freebsd/fexecve for the size

Different size on x86 was causing a failure

2 years agoExtend FreeBSD procctl
Paul Floyd [Sun, 3 Apr 2022 16:27:17 +0000 (18:27 +0200)]
Extend FreeBSD procctl

4 new types added in FreeBSD 13.1

2 years agoBug 451843 - valgrind fails to start on a FreeBSD system which enforces W^X
Paul Floyd [Sun, 3 Apr 2022 13:50:38 +0000 (15:50 +0200)]
Bug 451843 - valgrind fails to start on a FreeBSD system which enforces W^X

Also add FreeBSD 13.1 to configure.ac

2 years agoAdd some FreeBSD tests to .gitignore
Paul Floyd [Sun, 3 Apr 2022 13:34:14 +0000 (15:34 +0200)]
Add some FreeBSD tests to .gitignore

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