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

2 years ago202? -> 2022
Mark Wielaard [Sat, 2 Apr 2022 18:22:02 +0000 (20:22 +0200)]
202? -> 2022

2 years ago3.19.0-RC1 Add some NEWS entries
Mark Wielaard [Sat, 2 Apr 2022 17:13:12 +0000 (19:13 +0200)]
3.19.0-RC1 Add some NEWS entries

2 years agoconfigure.ac: AC_HEADER_TIME is deprecated just check for sys/time.h
Mark Wielaard [Fri, 1 Apr 2022 15:28:24 +0000 (17:28 +0200)]
configure.ac: AC_HEADER_TIME is deprecated just check for sys/time.h

AC_HEADER_TIME is deprecated and checks for various things, like
whether you can include both time.h and sys/time.h together. Which
is fine on all systems these days. Just check whether sys/time.h
is available. HAVE_SYS_TIME_H is used once in the code base in the
timerfd-syscall.c testcase. So even this limited check might be
overkill.

2 years agoPowerpc, re-implement the vbpermq instruction support
Carl Love [Wed, 23 Mar 2022 18:41:16 +0000 (13:41 -0500)]
Powerpc, re-implement the vbpermq instruction support

The instruction support generates too many Iops when multiple vbpermq
instructions occur together in the binary. This patch changes the
implementation to use a clean helper and thus avoid overflowing the
internal Valgrind buffer.

bugzilla 451827

2 years agobpf attr->raw_tracepoint.name may be NULL for BPF_RAW_TRACEPOINT_OPEN.
Mark Wielaard [Sat, 19 Mar 2022 00:06:40 +0000 (01:06 +0100)]
bpf attr->raw_tracepoint.name may be NULL for BPF_RAW_TRACEPOINT_OPEN.

For BPF_RAW_TRACEPOINT_OPEN attr->raw_tracepoint.name may be NULL.
Otherwise it should point to a valid (max 128 char) string. Only
raw_tracepoint.prog_fd needs to be set.

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

2 years agoPowerpc: Fix checking for scv support, add check to scv instruction parsing.
Carl Love [Fri, 11 Feb 2022 20:07:20 +0000 (14:07 -0600)]
Powerpc: Fix checking for scv support, add check to scv instruction parsing.

The check for the scv instruction in coregrind/m_machine.c issues an scv
instruction and uses sigill to determine if the instruction is supported.
Issuing scv on systems that don't support scv, i.e. scv support is not in
HWCAPS2, generates a message in dmesg "Facility 'SCV' unavailable (12),
exception".

This patch removes the sigill based scv instruction test from
coregrind/m_machine.c.  The scv support is now determined by reading the
HWCAPS2 in setup_client_stack().  VG_(machine_ppc64_set_scv_support) is
called to set the flag ppc_scv_supported in struct VexArchInfo.

The allow_scv flag is added in disInstr_PPC_WRK.  The allow_scv flag is
used to ensure the host has support for scv before generating the iops for
the scv instruction.

2 years agoBug 444552 - s390x: Fix sys_ipc semtimedop syscall
Andreas Arnez [Wed, 5 Jan 2022 18:49:19 +0000 (19:49 +0100)]
Bug 444552 - s390x: Fix sys_ipc semtimedop syscall

On s390x Linux platforms the sys_ipc semtimedop call has four instead of
five parameters, where the timeout is passed in the third instead of the
fifth.

Reflect this difference in the handling of VKI_SEMTIMEDOP.

2 years agoNEWS: Add bug 445916 Demangle Rust v0 symbols with .llvm suffix
Mark Wielaard [Thu, 17 Feb 2022 23:07:44 +0000 (00:07 +0100)]
NEWS: Add bug 445916 Demangle Rust v0 symbols with .llvm suffix

2 years agoUpdate libiberty demangler
Mark Wielaard [Thu, 17 Feb 2022 17:35:38 +0000 (18:35 +0100)]
Update libiberty demangler

Update the libiberty demangler using the auxprogs/update-demangler
script to gcc git commit d3b2ead595467166c849950ecd3710501a5094d9.

This update includes:

- libiberty rust-demangle, ignore .suffix
- libiberty: Fix infinite recursion in rust demangler
- Update copyright years
- libiberty: support digits in cpp mangled clone names
- d-demangle: properly skip anonymous symbols
- d-demangle: remove parenthesis where it is not needed

2 years agonone/tests/amd64/avx_estimate_insn.vgtest fails on AMD processors
Mark Wielaard [Tue, 8 Feb 2022 12:12:46 +0000 (13:12 +0100)]
none/tests/amd64/avx_estimate_insn.vgtest fails on AMD processors

commit ef9ac3aa0fd3ed41d74707ffe49abe9ad2797ddd
"fix avx-1 amd64 test" split off the estimate instructions
into their own testcase avx_estimate_insn.

The commit message suggested that two .exp files would be
added, one for the intel and one for the amd cases.

It seems the .exp-amd variant was forgotten. This commit
adds it.

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

2 years agoAdd power_ISA2_05.stdout.exp_Without_FPPO_2 to EXTRA_DIST
Mark Wielaard [Wed, 16 Feb 2022 22:03:00 +0000 (23:03 +0100)]
Add power_ISA2_05.stdout.exp_Without_FPPO_2 to EXTRA_DIST

2 years agoPowerpc: Additional expected output for memcheck/tests/ppc64/power_ISA2_05 test.
Carl Love [Mon, 14 Feb 2022 17:26:50 +0000 (17:26 +0000)]
Powerpc: Additional expected output for memcheck/tests/ppc64/power_ISA2_05 test.

Latest compiler is generating slightly different effective address.

2 years agoarm64: Mismatch detected between RDMA and atomics features
Mark Wielaard [Fri, 11 Feb 2022 16:50:47 +0000 (17:50 +0100)]
arm64: Mismatch detected between RDMA and atomics features

check_hwcaps contains code that tries to enforce Arm architecture's
rules for the support of features (FEAT_) on v8.1. Specifically for
v8.1 FEAT_RDM and FEAT_LSE (named FEAT_ATOMICS in Valgrind) are
mandatory.

But an v8.x implementation can implement any of the v8.{x+1}
features, or not, as it chooses. Also under QEMU, which tends
to implement features on an "as-demanded" basis, you sometimes
end up with an odd combination of features, which does not
strictly comply with the architecture.

So ignore the "v8.x" architecture levels, and look only only at
"is feature X present or not". Unless the features are really not
independent.

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

2 years agoPowerpc: Update ACC support to reflect being mapped over vsr registers
Carl Love [Tue, 8 Feb 2022 23:52:33 +0000 (17:52 -0600)]
Powerpc: Update ACC support to reflect being mapped over vsr registers

The ISA 3.1 implemention provides the effect of ACC and VSRs
logically containing the same data.    Future versions of the
hardware may define new state or redefine the backing state
of the registers.

This reworks the code to support the ACC as implemented as a logical
mapping over the VSR registers, and lays groundwork for a future
implementation utilizing a separate register file.  There
is a single boolean variable, ACC_mapped_on_VSR, that can be set in
disInstr_PPC_WRK(), based on the ISA being used, to select which
implementation model to use.

2 years agoPowerpc: Fix typo in assembly code specification.
Carl Love [Thu, 10 Feb 2022 17:01:06 +0000 (12:01 -0500)]
Powerpc: Fix typo in assembly code specification.

The extra 0 results in an assebler error:
    Error: junk at end of line, first unrecognized character is `x'

2 years agoAdd missing \n in debug printing. No end-user functional change.
Julian Seward [Thu, 10 Feb 2022 04:33:38 +0000 (05:33 +0100)]
Add missing \n in debug printing.  No end-user functional change.

2 years agoDo not try to record fd name for io_uring_setup
Mark Wielaard [Wed, 9 Feb 2022 22:37:53 +0000 (23:37 +0100)]
Do not try to record fd name for io_uring_setup

In POST(sys_io_uring_setup) we tried to use record_fd_open_with_given_name
with ARG1 as name. But ARG1 isn't a char pointer. So this might crash with
--track-fds=yes. Since no (file) name is associated with the fd returned by
io_uring_setup use record_fd_open_nameless instead.

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

2 years agos390: Fix VFLRX and WFLRX instructions
Andreas Arnez [Mon, 3 Jan 2022 17:15:05 +0000 (18:15 +0100)]
s390: Fix VFLRX and WFLRX instructions

Due to a typo in s390_irgen_VFLR, the VFLR instruction behaves incorrectly
when its m3 field contains 4, meaning extended format.  In that case VFLR
is also written as VFLRX (or WFLRX) and supposed to round down from the
extended 128-bit format to the long 64-bit format.  However, the typo
checks for m3 == 2 instead, so the value of 4 is unhandled, causing
Valgrind to throw a specification exception.

This fixes the typo.

2 years agoppc64 --track-origins=yes failure because of bad cmov addHRegUse
Mark Wielaard [Tue, 8 Feb 2022 15:36:08 +0000 (16:36 +0100)]
ppc64 --track-origins=yes failure because of bad cmov addHRegUse

For Pin_CMov getRegUsage_PPCInstr called addHRegUse for the dst
register with HRmWrite, but since this is a conditional move the
register could be both read and written (read + write = modify).
This matches the dst of Pin_FpCMov and Pin_AvCMov.

In a very rare case, and only with --track-origins=yes, this
could cause bad code generation.

This is slightly amazing, this code is from 2005 and as far as
I know we never seen an issue with --track-origins=yes on power
before. And I have been unable to come up simple reproducer.

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

2 years agoPowerpc test_isa_3_1_VRT fix
Carl Love [Tue, 1 Feb 2022 21:22:37 +0000 (21:22 +0000)]
Powerpc test_isa_3_1_VRT fix

The vcmpequq, vcmpgtsq, vcmpgtuq test cases for the dotted versions of the
instructions were issuing the non-dotted instruction.

This patch fixes the issues and updates the expected output.

Note, the issue exposed a bug in the VEX/priv/guest_ppc_toIR.c handling of
the instructions.  That fix is in a separate patch.

2 years agoFix setting condition code for Vector Compare quad word instructions.
Carl Love [Tue, 1 Feb 2022 21:29:30 +0000 (21:29 +0000)]
Fix setting condition code for Vector Compare quad word instructions.

The vcmpgtsq., vcmpgtuq,, vcmpequq. instructions set the condition code field
6 to 0b1000 for true, 0b0010 for false.  The condition code was being set
according to the typical condition code values for equal and greater than
which is incorrect for these instructions.  The patch fixes the setting of the
condition code as specified in the instructions.

3 years agoAssorted changes to protect from side affects from the feature checking code.
Carl Love [Fri, 14 Jan 2022 23:04:44 +0000 (23:04 +0000)]
Assorted changes to protect from side affects from the feature checking code.

Patch contributed by Will Schmidt <will_schmidt@vnet.ibm.com>

This problem was initially reported by Tulio, he assisted me in
identifying the underlying issue here.

This was discovered on a Power10, and occurs since the ISA 3.1 support
check uses the brh instruction via a hardcoded ".long 0x7f1401b6" asm stanza.
That encoding writes to r20, and since the stanza does not contain a clobber
the compiler did not know to save or restore that register upon entry or exit.
The junk value remaining in r20 subsequently caused a segfault.

This patch adds clobber masks to the instruction stanzas, as well as
updates the associated comments to clarify which registers are being
used.
    As part of this change I've also
    - updated the .long for the cnttzw instruction to write to r20, and
      zeroed the reserved bits from that instruction so it is properly
      decoded by the disassembler.
    - updated the .long for the dadd instruction to write to f0.

    I've inspected the current codegen with these changes in place, and
    confirm that r20 is now saved and restored on entry and exit from the
    machine_get_hwcaps() function.

bugzilla 447995   Valgrind segfault on power10 due to hwcap checking code

3 years agoAdd a post-release update to the 3.18 release notes.
Nicholas Nethercote [Tue, 4 Jan 2022 05:53:53 +0000 (16:53 +1100)]
Add a post-release update to the 3.18 release notes.

3 years agoImplement linux rseq syscall as ENOSYS
Mark Wielaard [Fri, 10 Dec 2021 16:41:59 +0000 (17:41 +0100)]
Implement linux rseq syscall as ENOSYS

This implements rseq for amd64, arm, arm64, ppc32, ppc64,
s390x and x86 linux as ENOSYS (without warning).

glibc will start using rseq to accelerate sched_getcpu, if
available. This would cause a warning from valgrind every
time a new thread is started.

Real rseq (restartable sequences) support is pretty hard, so
for now just explicitly return ENOSYS (just like we do for clone3).

https://sourceware.org/pipermail/libc-alpha/2021-December/133656.html

3 years agoForgot to remove FreeBSD 13 i386 scalar expected
Paul Floyd [Sat, 11 Dec 2021 15:20:58 +0000 (16:20 +0100)]
Forgot to remove FreeBSD 13 i386 scalar expected

3 years agoFreeBSD syswrap and scalar corrections for i386 and FreeBSD 12.2
Paul Floyd [Sat, 11 Dec 2021 15:08:08 +0000 (16:08 +0100)]
FreeBSD syswrap and scalar corrections for i386 and FreeBSD 12.2

There are still size/offset diffs on i386 for fexecve and realpathat.

3 years agoBug 446823 FreeBSD - missing syscalls when using libzm4
Paul Floyd [Sat, 11 Dec 2021 11:32:08 +0000 (12:32 +0100)]
Bug 446823 FreeBSD - missing syscalls when using libzm4

Adds syscall wrappers for __specialfd and __realpathat.
Also remove kernel dependency on COMPAT_FREEBSD10.

This change also reorganizes somewhat the scalar test
and adds configure time checks for the FreeBSD version,
allowing regression tests to be compiled depending on the
FreeBSD release.

From now on, scalar.c will contain syscalls for FreeBSD 11 and 12
and subsequent releases will get their own scalar, starting with
scalar_13_plus.c.

3 years agoOne more FreeBSD scalar fix
Paul Floyd [Fri, 10 Dec 2021 21:11:16 +0000 (22:11 +0100)]
One more FreeBSD scalar fix

Using a 64 bit mask for an int argument was causing an
extra Conditional jump error

3 years agoFreeBSD scalar - filter didn't account for padding
Paul Floyd [Fri, 10 Dec 2021 20:34:02 +0000 (21:34 +0100)]
FreeBSD scalar - filter didn't account for padding

Also forgot to remove deleted expected from EXTRA_DIST

3 years agoCorrect some FreeBSD syswrap typos and simplify scalar
Paul Floyd [Fri, 10 Dec 2021 20:18:05 +0000 (21:18 +0100)]
Correct some FreeBSD syswrap typos and simplify scalar

One typo affected scalar. Also add some more filtering
so that an extra expected is not needed for FreeBSD 13

3 years agoUpdate FreeBSD 12 scalar
Paul Floyd [Fri, 10 Dec 2021 20:04:25 +0000 (21:04 +0100)]
Update FreeBSD 12 scalar

3 years agoFreeBSD sigreturn arg names again
Paul Floyd [Thu, 9 Dec 2021 21:54:23 +0000 (22:54 +0100)]
FreeBSD sigreturn arg names again

Also make drd/tests/shared_timed_mutex more robust
Already not great using time delays, but the test seems
to fail intermittently due to spurious wakeups. So instead
of railing straight away, make it "three strikes and you're out".

3 years agoMinor sigreturn code cleaning for sigreturn / FreeBSD
Paul Floyd [Thu, 9 Dec 2021 21:11:04 +0000 (22:11 +0100)]
Minor sigreturn code cleaning for sigreturn / FreeBSD

More comments + wrapper arg names matching man page
(even if the syscall should never get called directly
from client code).

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