Release 3.27.0 (20 Apr 2026)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, RISCV64/Linux, ARM/Android, ARM64/Android, MIPS32/Android,
X86/Android, X86/Solaris, AMD64/Solaris, X86/macOS, AMD64/macOS. 
X86/FreeBSD, AMD64/FreeBSD and ARM64/FreeBSD. There is preliminary support
for nanoMIPS/Linux. macOS is supported up to version 13 Ventura (amd64 only).

* ==================== CORE CHANGES ===================

* There are two new client requests

  - VALGRIND_REPLACES_MALLOC Returns 1 if the tool replaces malloc
    (e.g., memcheck).  Returns 0 if the tool does not replace malloc
    (e.g., cachegrind and callgrind) or if the executable is not
    running under VALGRIND.

  - VALGRIND_GET_TOOLNAME Get the running tool name as a string. Takes
    two arguments, an input buffer pointer and the length of that
    buffer. Returns the required length (including terminating nul)
    for the tool name. Returns 0 and the contents supplied buffer are
    not modified if not running under Valgrind.

  See also the full description in the valgrind.h header file or the
  in The Client Request mechanism section of the Valgrind User Manual.

* linux lightweight guard pages (madvise MADV_GUARD_INSTALL) supported

  glibc 2.42+ (with linux 6.13+) uses MADV_GUARD_INSTALL to setup
  stack guard pages. These lightweight guard pages are now supported
  under valgrind. By default, Valgrind can handle to up to 500 madvise
  guard pages. With thread heavy workloads the default value might not
  be sufficient. Use --max-guard-pages=N to provide a different limit.
  If --max-guard-pages is not set explicitly, then it will default to
  the --max-threads setting.

* --num-callers now has a minimum value of 2.

  This is a breaking change. See
  https://bugs.kde.org/show_bug.cgi?id=515183#c13
  for full details.

* ================== PLATFORM CHANGES =================

* x86: Support for SSE4.1 instructions has been ported from AMD64 to
  (32bit) x86. This is ongoing work. Currently the following SSE4.1
  instructions are supported BLENDPD BLENDPS BLENDVPD BLENDVPS
  MOVNTDQA MPSADBW PBLENDVB PBLENDW PCMPEQQ PINSRD PMAXSB PMAXSD
  PMAXUD PMAXUW PMINSB PMINSD PMINUD PMINUW PMULLD PTEST.
  Bug #518222 tracks further progress.

* s390x: Machine models older than z196 are no longer supported.

* s390x: Support new z/Architecture features from the 15th edition.  In
  particular this enables running binaries compiled with `-march=arch15'
  or `-march=z17' and exploiting the new MSA extensions 10-13.

* Support for the following macOS versions has been added
  10.13 High Sierra (bug fixes)
  10.14 Mojave
  10.15 Catalina
  11.0  Big Sur (Intel only)
  12.0  Monterey (Intel only)
  13.0  Ventura (Intel only, preliminary)

* The Linux Test Project (LTP) v20260130 was integrated. New linux
  syscall wrappers for file_getattr, file_setattr, lsm_get_self_attr,
  lsm_set_self_attr, lsm_list_modules were added.

* ==================== TOOL CHANGES ===================

* Helgrind:

  - New debug option --show-events=0|1|2. Controls tracing of internal
    Helgrind synchronization, threading and memory events. At level 1,
    Helgrind prints a trace of its synchronization, threading and memory
    events. At level 2, additional memory events are also traced. The
    default value of 0 disables tracing.

  - New option --track-destroy=no|yes|all. Checks for missing
    pthread_mutex_destroy and pthread_rwlock_destroy calls. With yes,
    Helgrind warns when pthread_mutex_init or pthread_rwlock_init is called
    on the address of a live (undestroyed) lock. With all, Helgrind also
    reports undestroyed locks at process exit. --track-destroy does not track
    locks that use static initializers.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

126256  (fnop) vex x86->IR: unhandled instruction bytes: 0xD9 0xD0 0x31 0xC0
228343  none/tests/darwin/bug228343 fails on OS X
233298  MEMPOOL_FREE not reflected in heap summary
253436  vex amd64->IR: unhandled instruction bytes: 0xF2 0xA6 (repne cmps)
258140  Valgrind on OS X always reports some memory "still reachable"
390754  unhandled amd64-darwin syscall: unix:216 (open_dprotected_np)
406674  False positive when reading bitfield value on code compiled with
        clang 7.0
413369  unhandled amd64-darwin syscall: unix:151 (getpgid)
413410  unhandled amd64-darwin syscall: mach:50 (on macOS 10.15)
487055  memcheck/tests/x86-linux/scalar fails running in Docker
503238  s390x: Support miscellaneous-instruction-extensions facility 4
503239  s390x: Support vector-enhancements facility 3
503240  s390x: Support MSA extensions 10, 11, and 12
509562  s390x: Define minimum required machine model
510416  Missing syswraps for file_getattr and file_setattr
510563  Add missing syswraps for lsm_get_self_attr and lsm_set_self_attr
510864  Add SSE4.1 PMAXSD and PMINSD instructions support for 32-bit x86
511329  Darwin and FreeBSD: Move setting of carry flag out of
        ML_(do_syscall_for_client_WRK)
511461  Darwin 17 (MacOS X 10.13) memcheck issues
511713  Refactor syscall argument handling
511717  gdbserver (valgrind_read_memory) the 'impossible' happened:
        Killed by fatal signal (SIGSEGV)
511972  valgrind-3.26.0 tests fail to build on upcomig gcc-16:
        unrecognized command-line option
        '-Wno-alloc-size-larger-than=18446744073709551615'
512030  s390x: bfp-convert testcase fails
512037  malloc trace does not print free size or alignment
512291  Valgrind on Solaris should drop support for long gone /dev/crypto
        framework
512571  regtest problems with darwin dsymutil
512873  Add SSE4.1 min/max instructions for x86 32 bit
513257  Add missing syswraps for lsm_list_modules
513522  m_libcassert.c: 'ordered comparison of pointer with integer zero'
        compiler warning
513475  Add SSE4.1 PMULLD instruction for x86 32 bit
513598  Helgrind should detect locks without pthread_{rwlock,mutex}_destroy
        being called - Assertion 'lk->kind == LK_rdwr' failed.
514094  readlink("/proc/self/exe") overwrites buffer beyond its return value
514206  Assertion '!sr_isError(sr)' failed - mmap fd points to an open
        descriptor to a PCI device
514297  Track madvise MADV_GUARD_INSTALL in address space manager
514343  Add a valgrind.h macro VALGRIND_REPLACES_MALLOC
514596  Add SSE4.1 BLENDPD instruction for x86 32 bit
514613  Unclosed leak_summary/still_reachable tag in xml output
514659  ltp 20250930 vs linux 6.18.3 doesn't build
514762  Many "Bad file descriptor" messages when using --track-fds=yes and
        -d on systems without /proc
515183  Error occurred while executing the command
        `valgrind --num-callers=1 ./hello_world`
515265  Add SSE4.1 BLENDPS and PBLENDW instructions for x86 32 bit
516223  Add SSE4.1 PBLENDVB, BLENDVPS and BLENDVPD
        instructions for x86 32 bit
515612  Sanity check VG_(realpath) and VG_(readlink) return values
515731  Distinguish between realloc functions in realloc size 0 error messages
515810  Update the LTP version in valgrind testsuite to 20260130
515992  Add FreeBSD /proc virtualisation for cmdline and file
516090  Regression : Linux FreeBSD and Darwin: refactor *at syscall dirfd checks
516225  Add MOVNTDQA SSE4.1 support for x86
516289  illumos lsframe2 regtest fails
516748  Incorrect use of SET_STATUS_Failure for syscall wrappers that return
        error codes rather than -1 on error
517455  Add PCMPEQQ SSE4.1 support for x86
517697  Implement CLRSSONSTACK and SETUJMPBUF handling on Solaris.
517748  Add ability to redirect global functions to Darwin
517840  Add PTEST SSE4.1 support for x86
518216  Add SSE4.1 MPSADBW instruction support for x86 32 bit
518076  FreeBSD: add syscall wrapper for renameat2
518078  Configure should accept names for GDB other than "gdb"
518159  pth_once issues on Darwin
518482  FreeBSD: assert in parse_procselfmaps when built with GNU binutils
518609  Setting double verbose interferes with symbol loading (FreeBSD 16)
518778  Valgrind LTP testsuite fails to compile on Fedora 44+
518951  LTP testcase fsconfig02 fails under Valgrind

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.27.0.RC1: 13 Apr 2026)
(3.27.0.RC2: 17 Apr 2026)


Release 3.26.0 (24 Oct 2025)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, RISCV64/Linux, ARM/Android, ARM64/Android, MIPS32/Android,
X86/Android, X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD,
AMD64/FreeBSD and ARM64/FreeBSD There is also preliminary support for
X86/macOS 10.13, AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* Upgrade to the GNU General Public License version 3.

* Control building documentation. When using make dist set the
  Makefile BUILD_DOCS to none, all or html. none, does not build any
  documentation.  all, builds all documentation. html, builds HTML
  docs but skips building PDFs. See also README_DEVELOPERS.

* Control generation of files that are only useful for post-processing
  with bunsen. make regtest BUNSEN=no inhibits generating those files.

* New VEX API function LibVEX_set_VexControl

* The deprecated IROps: Iop_Clz32/64 and Iop_Ctz32/64 have been removed

* The Linux Test Project (LTP) integration has been updated to
  v20250930. The test output has been made compatible with bunsen.
  Various issues with the linux syscall wrappers have been fixed.

  New Linux syscall wrappers for: cachestat, futex_waitv, listmount,
  mount_setattr, mseal, quotactl_fd, remap_file_pages, setdomainname,
  statmount, swapoff, swapon, sysfs and ustat.

* --modify-fds=yes has been added. It acts like --modify-fds=high (the
  highest available file descriptor is returned first) except when
  when the lowers stdin/stdout/stderr (file descriptors 0, 1, 2) are
  available. With --modify-fds=yes 0, 1 or 2 are always returned first
  when still available before higher file descriptor numbers are.

* With --xml=yes log output protocol 6 is now always used (unlike
  protocol 5 which was only used with--track-fds). The main difference
  is that the xml output now contains error summaries. See also
  xml-output-protocol6.txt.

* Add "bad" option for --track-fds. When --track-fds=bad is specified,
  do not produce errors about unclosed file descriptors at program
  exit. Only produce errors for bad file descriptor usage, either
  double close or use of file descriptor that is (no longer) valid.

* vgdb will now handle the qExecAndArgs packet.

* DWARF inlined subroutine handling has been rewritten to work cross
  compile units. This should get rid of backtraces with
  "UnknownInlinedFun".

* ================== PLATFORM CHANGES =================

FreeBSD 15 (which is expected to ship in December 2025, after
Valgrind 3.26 is released) contains a change to ptrace that affects
use of Valgrind with vgdb. This impacts the mechanism that vgdb
uses to interrupt Valgrind if all threads are blocked and you want
to get back to the gdb prompt by hitting ctrl-c. This mechanism
is no longer reliable. On arm64 Valgrind will crash with an assert.
On amd64 syscalls may give spurious and incorrect return codes.

There is a workaround. Run the following command (as root).

 sysctl debug.ptrace_attach_transparent=0

 See also
 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=290008

* ==================== TOOL CHANGES ===================

* There is a new utility script, "vgstack". It has two
  option, -h for minimal help, and -v for the version information.
  In normal use pass it the PID of a running Valgrind process
  and it will perform a vgdb attach and print the backtrace(s)
  of the guest executable.

* Memcheck handling of aligned allocation functions with a
  size of zero has changed.

  Firstly, 'free_aligned_sized' with a size of
  zero is no longer considered an error. This was intended so
  that deallocation had the same behaviour as allocation. In
  practice, platforms that allow aligned allocation with a
  size of zero will already generate an error at allocation.
  Other platforms will get an 'Invalid free' error. The case
  where the allocation and deallocation sizes are different
  with the deallocation size being zero is already covered by
  "Mismatched [alloc/dealloc] size" errors.

  Secondly, the three C aligned allocation functions memalign,
  aligned_alloc and posix_memalign have a different error
  message if used with a size of zero. Previously the error
  was "[function] invalid size value: [number]". This was an
  overstatement of the issue. The problem is that such usage
  is not portable across platforms. memalign and aligned_alloc
  are poorly documented, saying things like "Behavior is undefined
  if size is not an integral multiple of alignment.". Clearly
  this does not include negative integers though it does not say
  so explicitly. Does that include zero?  posix_memalign is well documented
  but says that using a size of 0 is implementation-defined. These
  functions now produce an error
  "Unsafe allocation with size of zero is implementation-defined".

  The associated suppression name has also changed from "BadSize" to
  "UnsafeZeroSize".

  Checks for C23 free_sized and free_aligned_sized have been added to
  Linux. Almost no libraries support these functions yet, with
  the exception being Google tcmalloc.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

286849  [PATCH] Interceptors for new/delete on Darwin were erroneously
        commented out in r12043
306098  s390x: Alternate opcode form for convert to/from fixed and friends
309100  s390x: Testcases for extended BFP
309554  Wrap syscall remap_file_pages (216)
331311  Valgrind shows open files in /proc/self/fd that don't work for the process
338803  Handling of dwz debug alt files or cross-CU is broken
368791  Handle swapon and swapoff syscalls as linux generic
369030  Wrap linux syscall: 171 (setdomainname)
388526  Inconsistent severity in message text: "WARNING: Serious error"
418756  MAP_FIXED_NOREPLACE mmap flag unsupported
454276  Some IPC syscalls is missing for x86 linux
476465  AArch64 ARMv8.3 LDAPR/LDAPRH/LDAPRB instructions not supported
493430  Review all syscalls that use or return (new) file descriptors
493434  Add --track-fds=bad mode (no "leak" tracking)
501741  syscall cachestat not wrapped
502359  Add --modify-fds=yes option
502968  Wrap linux specific syscalls 457 (listmount) and 458 (statmount)
503098  Incorrect NAN-boxing for float registers in RISC-V
503241  s390x: Support z17 changes to the NNPA instruction
503641  close_range syscalls started failing with 3.25.0
503677  duplicated-cond compiler warning in dis_RV64M
503817  s390x: fix 'ordered comparison of pointer with integer zero' compiler warnings
503914  mount syscall param filesystemtype may be NULL
503969  Make test results of make ltpchecks compatible with bunsen
504101  Add a "vgstack" script
504177  FILE DESCRIPTORS banner shows when closing some inherited fds
504265  FreeBSD: missing syscall wrappers for fchroot and setcred
504341  Valgrind killed by LTP syscall testcase setrlimit05
504466  Double close causes SEGV
504904  Hide "bad act handler address" warnings when -q (quiet) flag is set
504909  Hide "Bad oldset address" warnings when -q (quiet) flag is set
504919  Hide "client tried to modify addresses" warnings when -q (quiet) set
504936  Add FreeBSD amd64 sysarch subcommands AMD64_SET_TLSBASE and
        AMD64_GET_TLSBASE
505228  Wrap linux specific mseal syscall
505673  Valgrind crashes with an internal error and SIGBUS when
        the guest tries to open its own file with O_WRONLY|O_CREAT|O_TRUNC
506076  unimplemented fcntl command: 1028 (F_CREATED_QUERY)
506499  Unhandled syscall 592 (exterrctl - FreeBSD
506795  Better report which clone flags are problematic
506806  Fix execveat() with AT_FDCWD and relative path
506813  The execveat wrapper needs to do more checking
506816  futex2, futex_waitv WARNING: unhandled amd64-linux syscall: 449
506910  openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe
506928  Wrap (deprecated) linux specific ustat syscall
506929  Wrap (deprecated) linux sysfs syscall
506930  valgrind allows SIGKILL being reset to SIG_DFL
506967  Implement and override mallinfo2
506970  mmap needs an EBADF fd_allowed check
507033  Remove deprecated Iop_Clz32/64 and Iop_Ctz32/64
507173  s390x: Crash when constant folding is disabled
507188  memcheck with track-fds=yes on x86 with popen: Assertion
507720  Review syscalls returning file descriptors (other platforms)
507721  Wire up illumos and Solaris mallinfo
507853  faccessat and faccessat2 should handle AT_FDCWD and absolute paths
507866  fanotify_mark dirfd isn't checked
507867  perf_event_open group_fd isn't checked
507868  futimesat doesn't handle AT_FDCWD
507869  Various at syscalls don't check dirfd argument
507873  Make fchmodat and fchmodat2 syscall wrappers accept AT_FDCWD
507897  Allow for patching LTP sources
507970  -Wcalloc-transposed-args warnings in valgrind-di-server.c
508027  Fix mips32 FTBFS
508029  Review the vmsplice syscall wrapper
508030  Add several missing syscall hooks to ppc64-linux
508093  VALGRIND_CLO_CHANGE does not update vex_control
508145  ppc64le needs ld.so hardwire for strcmp
508328  Memory allegedly uninitialized after ioctl(PROCMAP_QUERY)
508154  PRE(sys_fchownat) not handling VKI_AT_FDCWD
508638  Self-hosting not working on FreeBSD
508777  amd64-linux: add minimal scalar test
508778  syscall-wrapper waitid warns about infop=null
508779  PRE(sys_prlimit64): reorder check for memory validity
508869  x86-linux: simplify scalar test output
508958  FreeBSD: add getgroups and setgroups wrappers
509103  Fix tests/arm64/bug484935.c build with "-O2 -flto -ffat-lto-objects"
509107  memcheck/tests/duplicate_align_size_errors.cpp fails
509139  Update BadSize error messages
509258  FreeBSD: add jail_attach_jd and jail_remove_jd syscall wrappers
509406  FreeBSD 15 issues
509517  s390x: Even/odd lane confusion in various vector insns
509566  Wrap amd64-linux syscall: 442 (mount_setattr)
509572  s390x: Overhaul BFP testsuite
509590  Run the LTP tests with LTP_QUIET
509567  unhandled amd64-linux syscall: 443 (quotactl_fd)
509634  Add ARG4 checks for quotactl and quotactl_fd syswraps
509642  Add missing ppc64-linux syswraps
509643  Add missing s390x-linux syswraps
510169  Update the LTP version in valgrind testsuite to 20250930
510292  Silence false positive failure of LTP munmap01
510436  Don't warn about fcntl F_GETFD with --track-fds
510694  Handle qExecAndArgs remote protocol packet

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.26.0.RC1: 17 Oct 2025)

Release 3.25.0 (25 Apr 2025)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, RISCV64/Linux, ARM/Android, ARM64/Android, MIPS32/Android,
X86/Android, X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD,
AMD64/FreeBSD and ARM64/FreeBSD There is also preliminary support for
X86/macOS 10.13, AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* The valgrind gdbserver now supports the GDB remote protocol packet
  'x addr,len' (available in GDB release >= 16).
  The x packet can reduce the time taken by GDB to read memory from valgrind.

* Valgrind now supports zstd compressed debug sections.

* The Linux Test Project (ltp) is integrated in the testsuite try
  'make ltpchecks' (this will take a while and will point out various
  missing syscalls and valgrind crashes!)

* ================== PLATFORM CHANGES =================

* Added RISCV64 support for Linux. Specifically for the RV64GC
  instruction set.

* Numerous bug fixes for Illumos, in particular fixed a Valgrind crash
  whenever a signal handler was called.

* On FreeBSD, a change to the libc code that runs atexit handlers was
  causing Helgrind to produce an extra error about exiting threads
  still holding locks for. This applied to every multithreaded application.
  The extra error is now filtered out. A syscall wrapper had been added
  for getrlimitusage.

* On Linux various new syscalls are supported (landlock*, io_pgetevents,
  open_tree, move_mount, fsopen, fsconfig, fsmount, fspick, userfaultfd).

* s390x has support for various new instructions (BPP, BPRP, PPA and NIAI).

* ==================== TOOL CHANGES ===================

* The --track-fds=yes and --track-fds=all options now treat all
  inherited file descriptors the same as 0, 1, 2 (stdin/out/err).
  And when the stdin/out/err descriptors are reassigned they are
  now treated as normal (non-inherited) file descriptors.

* A new option --modify-fds=high can be used together with
  --track-fds=yes to create new file descriptors with the highest
  possible number (and then decreasing) instead of always using the
  lowest possible number (which is required by POSIX). This will help
  catch issues where a file descriptor number might normally be reused
  between a close and another open call.

* Helgrind:
  There is a change to warnings about calls to pthread_cond_signal and
  pthread_cond_broadcast when the associated mutex is unlocked. Previously
  Helgrind would always warn about this. Now this error is controlled by
  a command line option, --check-cond-signal-mutex=yes|no. The default is
  no. This change has been made because some C and C++ standard libraries
  use pthread_cond_signal/pthread_cond_broadcast in this way. Users are
  obliged to use suppressions if they wish to avoid this noise.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

290061  pie elf always loaded at 0x108000
396415  Valgrind is not looking up $ORIGIN rpath of shebang programs
420682  io_pgetevents is not supported
468575  Add support for RISC-V
469782  Valgrind does not support zstd-compressed debug sections
487296  --track-fds=yes and --track-fds=all report erroneous information
        when fds 0, 1, or 2 are used as non-std
489913  WARNING: unhandled amd64-linux syscall: 444 (landlock_create_ruleset)
493433  Add --modify-fds=[no|high] option
494246  syscall fsopen not wrapped
494327  Crash when running Helgrind built with #define TRACE_PTH_FNS 1
494337  All threaded applications cause still holding lock errors
495488  Add FreeBSD getrlimitusage syscall wrapper
495816  s390x: Fix disassembler segfault for C[G]RT and CL[G]RT
495817  s390x: Disassembly to match objdump -d output
496370  Illumos: signal handling is broken
496571  False positive for null key passed to bpf_map_get_next_key syscall.
496950  s390x: Fix hardware capabilities and EmFail codes
497130  Recognize new DWARF5 DW_LANG constants
497455  Update drd/scripts/download-and-build-gcc
497723  Enabling Ada demangling breaks callgrind differentiation between
        overloaded functions and procedures
498037  s390x: Add disassembly checker
498143  False positive on EVIOCGRAB ioctl
498317  FdBadUse is not a valid CoreError type in a suppression
        even though it's generated by --gen-suppressions=yes
498421  s390x: support BPP, BPRP and NIAI insns
498422  s390x: Fix VLRL and VSTRL insns
498492  none/tests/amd64/lzcnt64 crashes on FreeBSD compiled with clang
498629  s390x: Fix S[L]HHHR and S[L]HHLR insns
498632  s390x: Fix LNGFR insn
498942  s390x: Rework s390_disasm interface
499183  FreeBSD: differences in avx-vmovq output
499212  mmap() with MAP_ALIGNED() returns unaligned pointer
501119  memcheck/tests/pointer-trace fails when run on NFS filesystem
501194  Fix ML_(check_macho_and_get_rw_loads) so that it is correct for
        any number of segment commands
501348  glibc built with -march=x86-64-v3 does not work due to ld.so memcmp
501479  Illumos DRD pthread_mutex_init wrapper errors
501365  syscall userfaultfd not wrapped
501846  Add x86 Linux shm wrappers
501850  FreeBSD syscall arguments 7 and 8 incorrect.
501893  Missing suppression for __wcscat_avx2 (strcat-strlen-avx2.h.S:68)?
502126  glibc 2.41 extra syscall_cancel frames
502288  s390x: Memcheck false positives with NNPA last tensor dimension
502324  s390x: Memcheck false positives with TMxx and TM/TMY
502679  Use LTP for testing valgrind
502871  Make Helgrind "pthread_cond_{signal,broadcast}: dubious: associated
        lock is not held by any thread" optional

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.25.0.RC1: 18 Apr 2025)
(3.25.0.RC2: 23 Apr 2025)

Release 3.24.0 (31 Oct 2024)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD, AMD64/FreeBSD
and ARM64/FreeBSD  There is also preliminary support for X86/macOS 10.13,
AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* Bad file descriptor usage now generates a real error with
  --track-fds=yes that is suppressible and shows up in the xml output
  with full execution backtrace. The warnings shown without using the
  option are deprecated and will be removed in a future valgrind
  version.

* Ada name demangling is now supported in error messages.

* ================== PLATFORM CHANGES =================

* S390X added support for the DFLTCC instruction provided by the
  deflate-conversion facility (z15/arch13).

* S390X added support for the instructions provided by the MSA facility
  and MSA extensions 1-9.

* ==================== TOOL CHANGES ===================

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

202770  open fd at exit --log-socket=127.0.0.1:1500 with --track-fds=yes
276780  An instruction in fftw (Fast Fourier Transform) is unhandled by
        valgrind: vex x86->IR: unhandled instruction bytes:
        0x66 0xF 0x3A 0x2
311655  --log-file=FILE leads to apparent fd leak
317127  Fedora18/x86_64 --sanity-level=3 : aspacem segment mismatch
337388  fcntl works on Valgrind's own file descriptors
377966  arm64 unhandled instruction dc zva392146  aarch64: unhandled
        instruction 0xD5380001 (MRS rT, midr_el1)
391148  Unhandled AVX instruction vmovq %xmm9,%xmm1
392146  aarch64: unhandled instruction 0xD5380001 (MRS rT, midr_el1)
412377  SIGILL on cache flushes on arm64
417572  vex amd64->IR: unhandled instruction bytes: 0xC5 0x79 0xD6 0xED 0xC5
440180  s390x: Failed assertion in disassembler
444781  MIPS: wrong syscall numbers used
447989  Support Armv8.2 SHA-512 instructions
445235  Java/Ada/D demangling is probably broken
453044  gbserver_tests failures in aarch64
479661  Valgrind leaks file descriptors
486180  [Valgrind][MIPS] 'VexGuestArchState' has no member named
        'guest_IP_AT_SYSCALL'
486293  memccpy false positives
486569  linux inotify_init syscall wrapper missing POST entry in syscall_table
487439  SIGILL in JDK11, JDK17
487993  Alignment error when using Eigen with Valgrind and -m32
488026  Use of `sizeof` instead of `strlen
488379  --track-fds=yes errors that cannot be suppressed with --xml-file=
488441  Add tests for --track-fds=yes --xml=yes and fd suppression tests
489040  massif trace change to show the location increasing the stack
489088  Valgrind throws unhandled instruction bytes: 0xC5 0x79 0xD6 0xE0 0xC5
489338  arm64: Instruction fcvtas should round 322.5 to 323, but result is 322.
489676  vgdb handle EINTR and EAGAIN more consistently
490651  Stop using -flto-partition=one
491394  (vgModuleLocal_addDiCfSI): Assertion 'di->fsm.have_rx_map &&
        di->fsm.rw_map_count' failed
492210  False positive on x86/amd64 with ZF taken directly from addition
492214  statx(fd, NULL, AT_EMPTY_PATH) is supported since Linux 6.11
        but not supported in valgrind
492422  Please support DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD
492663  Valgrind ignores debug info for some binaries
493418  Add bad fd usage errors for --track-fds in ML_(fd_allowed)
493454  Missing FUSE_COMPATIBLE_MAY_BLOCK markers
493507  direct readlink syscall from PRE handler is incompatible with
        FUSE_COMPATIBLE_MAY_BLOCK
493959  s390x: Fix regtest failure for none/tests/s390x/op00
493970  s390x: Store/restore FPC upon helper call causes slowdown
494218  Remove FREEBSD_VERS from configure and build
494252  s390x: incorrect disassembly for LOCHI and friends
494960  Fixes and tweaks for gsl19test
495278  PowerPC instruction dcbf should allow the L field values of 4, 6 on
        ISA 3.0 and earlier, just ignore the value
495469  aligned_alloc and posix_memalign missing MALLOC_TRACE with returned
        pointer
495470  s390x: 3.24.0.RC1 missing file and regtest failure
n-i-bz  Improve messages for sigaltstack errors, use specific
        stack_t member names

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.24.0.RC1: 27 Oct 2024)


Release 3.23.0 (26 Apr 2024)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD, AMD64/FreeBSD
and ARM64/FreeBSD  There is also preliminary support for X86/macOS 10.13,
AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* --track-fds=yes will now also warn about double closing of file
  descriptors. Printing the context where the file descriptor was
  originally opened and where it was previously closed.

* --track-fds=yes also produces "real" errors now which can be
  suppressed and work with --error-exitcode. When combined with
  --xml the xml-output now also includes FdBadClose and FdNotClosed
  error kinds (see docs/internals/xml-output-protocol5.txt).

* The option --show-error-list=no|yes now accepts a new value all.
  This indicates to also print the suppressed errors.
  This is useful to analyse which errors are suppressed by which
  suppression entries.
  The valgrind monitor command 'v.info all_errors' similarly now
  accepts a new optional argument 'also_suppressed' to show
  all errors including the suppressed errors.

* ================== PLATFORM CHANGES =================

* Added ARM64 support for FreeBSD.

* ARM64 now supports dotprod instructions (sdot/udot).

* AMD64 better supports code build with -march=x86-64-v3.
  fused-multiple-add instructions (fma) are now emulated more
  accurately. And memcheck now handles __builtin_strcmp using 128/256
  bit vectors with sse4.1, avx/avx2.

* S390X added support for NNPA (neural network processing assist)
  facility vector instructions VCNF, VCLFNH, VCFN, VCLFNL, VCRNF and
  NNPA (z16/arch14).

* X86 recognizes new binutils-2.42 nop patterns.

* ==================== TOOL CHANGES ===================

* The none tool now also supports xml output.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.


283429  ARM leak checking needs CLEAR_CALLER_SAVED_REGS
281059  Cannot connect to Oracle using valgrind
328563  make track-fds support xml output
362680  --error-exitcode not honored when file descriptor leaks are found
369723  __builtin_longjmp not supported in clang/llvm on Android arm64 target
390269  unhandled amd64-darwin syscall: unix:464 (openat_nocancel)
401284  False positive "Source and destination overlap in strncat"
428364  Signals inside io_uring_enter not handled
437790  valgrind reports "Conditional jump or move depends on uninitialised
        value" in memchr of macOS 10.12-10.15
460616  disInstr(arm64): unhandled instruction 0x4E819402 (dotprod/ASIMDDP)
463458  memcheck/tests/vcpu_fnfns fails when glibc is built for x86-64-v3
463463  none/tests/amd64/fma fails when executed on a x86-64-v3 system
466762  Add redirs for C23 free_sized() and free_aligned_sized()
466884  Missing writev uninit padding suppression for _XSend
471036  disInstr_AMD64: disInstr miscalculated next %rip on RORX imm8, m32/64, r32/6
471222  support tracking of file descriptors being double closed
474160  If errors-for-leak-kinds is specified, exit-on-first-error should only exit
        on one of the listed errors.
475498  Add reallocarray wrapper
476025  Vbit expected test results for Iop_CmpGT64Ux2 are wrong
476320  Build failure with GCC
476331  clean up generated/distributed filter scripts
476535  Difference in allocation size for massif/tests/overloaded-new between
        clang++/libc++ and g++/libstdc++
476548  valgrind 3.22.0 fails on assertion when loading debuginfo file
        produced by mold
476708  valgrind-monitor.py regular expressions should use raw strings
476780  Extend strlcat and strlcpy wrappers to GNU libc
476787  Build of Valgrind 3.21.0 fails when SOLARIS_PT_SUNDWTRACE_THRP is
        defined
476887  WARNING: unhandled amd64-freebsd syscall: 578
477198  Add fchmodat2 syscall on linux
477628  Add mremap support for Solaris
477630  Include ucontext.h rather than sys/ucontext.h in Solaris sources
477719  vgdb incorrectly replies to qRcmd packet
478211  Redundant code for vgdb.c and Valgrind core tools
478624  Valgrind incompatibility with binutils-2.42 on x86 with new nop patterns
        (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26
478837  valgrind fails to read debug info for rust binaries
479041  Executables without RW sections do not trigger debuginfo reading
480052  WARNING: unhandled amd64-freebsd syscall: 580
480126  Build failure on Raspberry Pi 5 / OS 6.1.0-rpi7-rpi-v8
480405  valgrind 3.22.0 "m_debuginfo/image.c:586 (set_CEnt):
        Assertion '!sr_isError(sr)' failed."
480488  Add support for FreeBSD 13.3
480706  Unhandled syscall 325 (mlock2)
481127  amd64: Implement VFMADD213 for Iop_MAddF32
481131  [PATCH] x86 regtest: fix clobber lists in generated asm statements
481676  Build failure on Raspberry Pi 5 Ubuntu 23.10 with clang
481874  Add arm64 support for FreeBSD
483786  Incorrect parameter indexing in FreeBSD clock_nanosleep syscall wrapper
484002  Add suppression for invalid read in glibc's __wcpncpy_avx2() via wcsxfrm()
484426  aarch64: 0.5 gets rounded to 0
484480  False positives when using sem_trywait
484935  [patch] Valgrind reports false "Conditional jump or move depends on
        uninitialised value" errors for aarch64 signal handlers
485148  vfmadd213ss instruction is instrumented incorrectly (the remaining
        part of the register is cleared instead of kept unmodified)
485487  glibc built with -march=x86-64-v3 does not work due to ld.so strcmp
485778  Crash with --track-fds=all and --gen-suppressions=all
n-i-bz  Add redirect for memccpy

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.23.0.RC1: 19 Apr 2024)
(3.23.0.RC2: 24 Apr 2024)

Release 3.22.0 (31 Oct 2023)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD and
AMD64/FreeBSD.  There is also preliminary support for X86/macOS 10.13,
AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* A new configure option --with-gdbscripts-dir lets you install
  the gdb valgrind python monitor scripts in a specific location.
  For example a distro could use it to install the scripts in a
  safe load location --with-gdbscripts-dir=%{_datadir}/gdb/auto-load
  It is also possible to configure --without-gdb-scripts-dir so no
  .debug_gdb_scripts section is added to the vgpreload library and
  no valgrind-monitor python scripts are installed at all.

* ================== PLATFORM CHANGES =================

* Support has been added for FreeBSD 14 and FreeBSD 15.
* Add support for the folllowing FreeBSD system calls:
  close_range, kqueuex, membarrier, timerfd_create,
  timerfd_settime and timerfd_gettime (all added in FreeBSD 15).

* ==================== TOOL CHANGES ===================

* Memcheck now tests and warns about the values used for
  alignment and size. These apply to various functions: memalign,
  posix_memalign and aligned_alloc in C and various overloads
  of operators new and delete in C++. The kinds of error that can
  be detected are
  - invalid alignment, for instance the alignment is usually required
    to be a power of 2
  - mismatched alignment between aligned allocation and aligned
    deallocation
  - mismatched size when sized delete is used
  - bad size for functions that have implementation defined behaviour
    when the requested size is zero

* Cachegrind:
  - You can now profile part of a program's execution using the new
    `CACHEGRIND_START_INSTRUMENTATION` and `CACHEGRIND_STOP_INSTRUMENTATION`
    client requests, along with the new `--instr-at-start` option. The
    behaviour is the same as Callgrind's equivalent functionality.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

390871  ELF debug info reader confused with multiple .rodata* sections
417993  vbit-test fail on s390x with Iop_Add32: spurious dependency on uninit
426751  Valgrind reports "still reachable" memory using musl
        (alpine running inside docker)
432801  Valgrind 3.16.1 reports a jump based on uninitialized memory somehow
        related to clang and signals
433857  Add validation to C++17 aligned new/delete alignment size
433859  Add mismatched detection to C++ 17 aligned new/delete
460192  Add epoll_pwait2
461074  DWARF2 CFI reader: unhandled DW_OP_ 0x11 (consts) DW_OP_ 0x92 (bregx)
465782  s390x: Valgrind doesn't compile with Clang on s390x
466105  aligned_alloc problems, part 2
467441  Add mismatched detection to C++ 14 sized delete
469049  link failure on ppc64 (big endian) valgrind 3.20
469146  massif --ignore-fn does not ignore inlined functions
469768  Make it possible to install gdb scripts in a different location
470121  Can't run callgrind_control with valgrind 3.21.0 because of perl errors
470132  s390x: Assertion failure on VGM instruction
470520  Multiple realloc zero errors crash in MC_(eq_Error)
470713  Failure on the Yosys project: valgrind: m_libcfile.c:1802
        (Bool vgPlain_realpath(const HChar *, HChar *)):
        Assertion 'resolved' failed
470830  Don't print actions vgdb me ... continue for vgdb --multi mode
470978  s390x: Valgrind cannot start qemu-kvm when "sysctl vm.allocate_pgste=0"
471311  gdb --multi mode stdout redirecting to stderr
471807  Add support for lazy reading and downloading of DWARF debuginfo
472219  Syscall param ppoll(ufds.events) points to uninitialised byte(s)
472875  none/tests/s390x/dfp-1 failure 
472963  Broken regular expression in configure.ac
473604  Fix bug472219.c compile failure with Clang 16
473677  make check compile failure with Clang 16 based on GCC 13.x
473745  must-be-redirected function - strlen
473870  FreeBSD 14 applications fail early at startup
473944  Handle mold linker split RW PT_LOAD segments correctly
474332  aligned_alloc under Valgrind returns nullptr when alignment is not a multiple of sizeof(void *)
475650  DRD does not work with C11 threads
475652  Missing suppression for __wcsncpy_avx2 (strncpy-avx2.S:308)?
476108  vg_replace_malloc DELETE checks size
n-i-bz  Allow arguments with spaces in .valgrindrc files
n-i-bz  FreeBSD fixed reading of Valgrind tools own debuginfo

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.22.0.RC1: 17 Oct 2023)
(3.22.0.RC2: 26 Oct 2023)

Release 3.21.0 (28 Apr 2023)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD and
AMD64/FreeBSD.  There is also preliminary support for X86/macOS 10.13,
AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* When GDB is used to debug a program running under valgrind using
  the valgrind gdbserver, GDB will automatically load some
  python code provided in valgrind defining GDB front end commands
  corresponding to the valgrind monitor commands.
  These GDB front end commands accept the same format as
  the monitor commands directly sent to the Valgrind gdbserver.
  These GDB front end commands provide a better integration
  in the GDB command line interface, so as to use for example
  GDB auto-completion, command specific help, searching for
  a command or command help matching a regexp, ...
  For relevant monitor commands, GDB will evaluate arguments
  to make the use of monitor commands easier.
  For example, instead of having to print the address of a variable
  to pass it to a subsequent monitor command, the GDB front end
  command will evaluate the address argument. It is for example
  possible to do:
    (gdb) memcheck who_points_at &some_struct sizeof(some_struct)
  instead of:
    (gdb) p &some_struct
    $2 = (some_struct_type *) 0x1130a0 <some_struct>
    (gdb) p sizeof(some_struct)
    $3 = 40
    (gdb) monitor who_point_at 0x1130a0 40

* The vgdb utility now supports extended-remote protocol when
  invoked with --multi. In this mode the GDB run command is
  supported. Which means you don't need to run gdb and valgrind
  from different terminals. So for example to start your program
  in gdb and run it under valgrind you can do:
  $ gdb prog
  (gdb) set remote exec-file prog
  (gdb) set sysroot /
  (gdb) target extended-remote | vgdb --multi
  (gdb) start

* The behaviour of realloc with a size of zero can now
  be changed for tools that intercept malloc. Those
  tools are memcheck, helgrind, drd, massif and dhat.
  Realloc implementations generally do one of two things
     - free the memory like free() and return NULL
       (GNU libc and ptmalloc).
     - either free the memory and then allocate a
       minimum sized block or just return the
       original pointer. Return NULL if the
       allocation of the minimum sized block fails
       (jemalloc, musl, snmalloc, Solaris, macOS).
  When Valgrind is configured and built it will
  try to match the OS and libc behaviour. However
  if you are using a non-default library to replace
  malloc and family (e.g., musl on a glibc Linux or
  tcmalloc on FreeBSD) then you can use a command line
  option to change the behaviour of Valgrind:
    --realloc-zero-bytes-frees=yes|no [yes on Linux glibc, no otherwise]

* ================== PLATFORM CHANGES =================

* Make the address space limit on FreeBSD amd64 128Gbytes
  (the same as Linux and Solaris, it was 32Gbytes)

* ==================== TOOL CHANGES ===================

* Memcheck:
  - When doing a delta leak_search, it is now possible to only
    output the new loss records compared to the previous leak search.
    This is available in the memcheck monitor command 'leak_search'
    by specifying the "new" keyword or in your program by using
    the client request VALGRIND_DO_NEW_LEAK_CHECK.
    Whenever a "delta" leak search is done (i.e. when specifying
    "new" or "increased" or "changed" in the monitor command),
    the new loss records have a "new" marker.
  - Valgrind now contains python code that defines GDB memcheck
    front end monitor commands. See CORE CHANGES.
  - Performs checks for the use of realloc with a size of zero.
    This is non-portable and a source of errors. If memcheck
    detects such a usage it will generate an error
      realloc() with size 0
    followed by the usual callstacks.
    A switch has been added to allow this to be turned off:
      --show-realloc-size-zero=yes|no [yes]

* Helgrind:
  - The option ---history-backtrace-size=<number> allows to configure
    the number of entries to record in the stack traces of "old"
    accesses. Previously, this number was hardcoded to 8.
  - Valgrind now contains python code that defines GDB helgrind
    front end monitor commands. See CORE CHANGES.

* Cachegrind:
  - `--cache-sim=no` is now the default. The cache simulation is old and
    unlikely to match any real modern machine. This means only the `Ir`
    event are gathered by default, but that is by far the most useful
    event.
  - `cg_annotate`, `cg_diff`, and `cg_merge` have been rewritten in
    Python. As a result, they all have more flexible command line
    argument handling, e.g. supporting `--show-percs` and
    `--no-show-percs` forms as well as the existing `--show-percs=yes`
    and `--show-percs=no`.
  - `cg_annotate` has some functional changes.
    - It's much faster, e.g. 3-4x on common cases.
    - It now supports diffing (with `--diff`, `--mod-filename`, and
      `--mod-funcname`) and merging (by passing multiple data files).
    - It now provides more information at the file and function level.
      There are now "File:function" and "Function:file" sections. These
      are very useful for programs that use inlining a lot.
    - Support for user-annotated files and the `-I`/`--include` option
      has been removed, because it was of little use and blocked other
      improvements.
    - The `--auto` option is renamed `--annotate`, though the old
      `--auto=yes`/`--auto=no` forms are still supported.
  - `cg_diff` and `cg_merge` are now deprecated, because `cg_annotate`
    now does a better job of diffing and merging.
  - The Cachegrind output file format has changed very slightly, but in
    ways nobody is likely to notice.

* Callgrind:
  - Valgrind now contains python code that defines GDB callgrind
    front end monitor commands. See CORE CHANGES.

* Massif:
  - Valgrind now contains python code that defines GDB massif
    front end monitor commands. See CORE CHANGES.

* DHAT:
  - A new kind of user request has been added which allows you to
    override the 1024 byte limit on access count histograms for blocks
    of memory. The client request is DHAT_HISTOGRAM_MEMORY.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

170510  Don't warn about ioctl of size 0 without direction hint
241072  List tools in --help output
327548  false positive while destroying mutex
382034  Testcases build fixes for musl
351857  confusing error message about valid command line option
374596  inconsistent RDTSCP support on x86_64
392331  Spurious lock not held error from inside pthread_cond_timedwait
397083  Likely false positive "uninitialised value(s)" for __wmemchr_avx2 and __wmemcmp_avx2_movbe
400793  pthread_rwlock_timedwrlock false positive
419054  Unhandled syscall getcpu on arm32
433873  openat2 syscall unimplemented on Linux
434057  Add stdio mode to valgrind's gdbserver
435441  valgrind fails to interpose malloc on musl 1.2.2 due to weak symbol name and no libc soname
436413  Warn about realloc of size zero
439685  compiler warning in callgrind/main.c
444110  priv/guest_ppc_toIR.c:36198:31: warning: duplicated 'if' condition.
444487  hginfo test detects an extra lock inside data symbol "_rtld_local"
444488  Use glibc.pthread.stack_cache_size tunable
444568  drd/tests/pth_barrier_thr_cr fails on Fedora 38
445743  "The impossible happened: mutex is locked simultaneously by two threads"
        while using mutexes with priority inheritance and signals
449309  Missing loopback device ioctl(s) 
459476  vgdb: allow address reuse to avoid "address already in use" errorsuse" errors
460356  s390: Sqrt32Fx4 -- cannot reduce tree
462830  WARNING: unhandled amd64-freebsd syscall: 474
463027  broken check for MPX instruction support in assembler
464103  Enhancement: add a client request to DHAT to mark memory to be histogrammed
464476  Firefox fails to start under Valgrind
464609  Valgrind memcheck should support Linux pidfd_open
464680  Show issues caused by memory policies like selinux deny_execmem
464859  Build failures with GCC-13 (drd tsan_unittest)
464969  D language demangling
465435  m_libcfile.c:66 (vgPlain_safe_fd): Assertion 'newfd >= VG_(fd_hard_limit)' failed.
466104  aligned_alloc problems, part 1
467036  Add time cost statistics for Regtest
467482  Build failure on aarch64 Alpine
467714  fdleak_* and rlimit tests fail when parent process has more than
        64 descriptors opened
467839  Gdbserver: Improve compatibility of library directory name
468401  [PATCH] Add a style file for clang-format
468556  Build failure for vgdb
468606  build: remove "Valgrind relies on GCC" check/output
469097  ppc64(be) doesn't support SCV syscall instruction
n-i-bz  FreeBSD rfork syscall fail with EINVAL or ENOSYS rather than VG_(unimplemented)

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

* ==================== KNOWN ISSUES ===================

* configure --enable-lto=yes is know to not work in all setups.
  See bug 469049. Workaround: Build without LTO.

(3.21.0.RC1: 14 Apr 2023)
(3.21.0.RC2: 21 Apr 2023)

Release 3.20.0 (24 Oct 2022)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD and
AMD64/FreeBSD.  There is also preliminary support for X86/macOS 10.13,
AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* The option "--vgdb-stop-at=event1,event2,..." accepts the new value abexit.
  This indicates to invoke gdbserver when your program exits abnormally
  (i.e. with a non zero exit code).
* Fix Rust v0 name demangling.
* The Linux rseq syscall is now implemented as (silently) returning ENOSYS.
* Add FreeBSD syscall wrappers for __specialfd and __realpathat.
* Remove FreeBSD dependencies on COMPAT10, which fixes compatibility with
  HardenedBSD
* The option --enable-debuginfod=<no|yes> [default: yes] has been added on
  Linux.
* More DWARF5 support as generated by clang14.

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

131186  writev reports error in (vector[...])
434764  iconv_open causes ld.so v2.28+ to use optimised strncmp
446754  Improve error codes from alloc functions under memcheck
452274  memcheck crashes with Assertion 'sci->status.what == SsIdle' failed
452779  Valgrind fails to build on FreeBSD 13.0 with llvm-devel (15.0.0)
453055  shared_timed_mutex drd test fails with "Lock shared failed" message
453602  Missing command line option to enable/disable debuginfod
452802  Handle lld 9+ split RW PT_LOAD segments correctly
454040  s390x: False-positive memcheck:cond in memmem on arch13 systems 
456171  [PATCH] FreeBSD: Don't record address errors when accessing the 'kern.ps_strings' sysctl struct
n-i-bz  Implement vgdb invoker on FreeBSD
458845  PowerPC: The L field for the dcbf and sync instruction should be
        3 bits in ISA 3.1.
458915  Remove register cache to fix 458915 gdbserver causes wrong syscall return
459031  Documentation on --error-exitcode incomplete
459477  XERROR messages lacks ending '\n' in vgdb
462007  Implicit int in none/tests/faultstatus.c

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.20.0.RC1: 20 Oct 2022)


Release 3.19.0 (11 Apr 2022)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux,
PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux,
MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android,
X86/Solaris, AMD64/Solaris, AMD64/MacOSX 10.12, X86/FreeBSD and
AMD64/FreeBSD.  There is also preliminary support for X86/macOS 10.13,
AMD64/macOS 10.13 and nanoMIPS/Linux.

* ==================== CORE CHANGES ===================

* Fix Rust v0 name demangling.
* The Linux rseq syscall is now implemented as (silently) returning ENOSYS.
* Add FreeBSD syscall wrappers for __specialfd and __realpathat.
* Remove FreeBSD dependencies on COMPAT10, which fixes compatibility with HardenedBSD

* ================== PLATFORM CHANGES =================

* arm64:
  - ignore the "v8.x" architecture levels, only look at actual CPU features
    present. Fixes mismatch detected between RDMA and atomics features
    preventing startup on some QEMU configurations.
  - Implement LD{,A}XP and ST{,L}XP
  - Fix incorrect code emitted for doubleword CAS.

* s390:
  - Fix sys_ipc semtimedop syscall
  - Fix VFLRX and WFLRX instructions
  - Fix EXRL instruction with negative offset

* ppc64:
  - Reimplement the vbpermq instruction support to generate less Iops and
    avoid overflowing internal buffers.
  - Fix checking for scv support to avoid "Facility 'SCV' unavailable (12),
    exception" messages in dmsg.
  - Fix setting condition code for Vector Compare quad word instructions.
  - Fix fix lxsibzx, lxsihzx and lxsihzx instructions so they only load
    their respective sized data.
  - Fix the prefixed stq instruction in PC relative mode.

* ==================== TOOL CHANGES ===================

* Memcheck:
  - Speed up --track-origins=yes for large (in the range of hundreds to
    thousands of megabytes) mmap/munmaps.
* DRD/Helgrind:
  - Several fixes for new versions of libstd++ using new posix try_lock
    functions

* ==================== FIXED BUGS ====================

The following bugs have been fixed or resolved.  Note that "n-i-bz"
stands for "not in bugzilla" -- that is, a bug that was reported to us
but never got a bugzilla entry.  We encourage you to file bugs in
bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.

403802  leak_cpp_interior fails with some reachable blocks different than expected
435732  memcheck/tests/leak_cpp_interior fails with gcc11
444242  s390x: Valgrind crashes on EXRL with negative offset
444399  arm64: unhandled instruction 0xC87F2D89 (LD{,A}XP and ST{,L}XP).
        == 434283
444481  gdb_server test failures on s390x
444495  dhat/tests/copy fails on s390x
444552  memcheck/tests/sem fails on s390x with glibc 2.34
444571  PPC, fix the lxsibzx and lxsihzx so they only load their respective
        sized data.
444836  PPC, pstq instruction for R=1 is not storing to the correct address.
444925  fexecve syscall wrapper not properly implemented
445032  valgrind/memcheck crash with SIGSEGV when SIGVTALRM timer used and
        libthr.so associated
445211  Fix out of tree builds
445300  [PATCH] Fix building tests with Musl
445011  SIGCHLD is sent when valgrind uses debuginfod-find
445354  arm64 backend: incorrect code emitted for doubleword CAS
445415  arm64 front end: alignment checks missing for atomic instructions
445504  Using C++ condition_variable results in bogus "mutex is locked simultaneously by two threads" warning
445607  Unhandled amd64-freebsd syscall: 247
445668  Inline stack frame generation is broken for Rust binaries
445916  Demangle Rust v0 symbols with .llvm suffix
446139  DRD/Helgrind with std::shared_timed_mutex::try_lock_until and try_lock_shared_until false positives
446138  DRD/Helgrind with std::timed_mutex::try_lock_until false positives
446281  Add a DRD suppression for fwrite
446103  Memcheck: `--track-origins=yes` causes extreme slowdowns for large mmap/munmap
446139  DRD/Helgrind with std::shared_timed_mutex::try_lock_until and try_lock_shared_until false
446251  TARGET_SIGNAL_THR added to enum target_signal
446823  FreeBSD - missing syscalls when using libzm4
447991  s390x: Valgrind indicates illegal instruction on wflrx
447995  Valgrind segfault on power10 due to hwcap checking code
449483  Powerpc: vcmpgtsq., vcmpgtuq,, vcmpequq. instructions not setting the
        condition code correctly.
449672  ppc64 --track-origins=yes failures because of bad cmov addHRegUse
449838  sigsegv liburing the 'impossible' happened for io_uring_setup
450025  Powerc: ACC file not implemented as a logical overlay of the VSR
        registers.
450437  Warn for execve syscall with argv or argv[0] being NULL
450536  Powerpc: valgrind throws 'facility scv unavailable exception'
451626  Syscall param bpf(attr->raw_tracepoint.name) points to unaddressable byte(s)
451827  [ppc64le] VEX temporary storage exhausted with several vbpermq instructions
451843  valgrind fails to start on a FreeBSD system which enforces W^X
495483  Control building documentation via BUILD_DOCS
506211  Constant folding improvements
506453  Unexpected behaviour with IR injection and vex-guest-chase=yes
509157  riscv64: Shift instructions can behave wrong
510840  Use objdump for disassembly in VEX (s390x only)
517596  VEX/priv/guest_ppc_toIR.c: Two possible cut'n'paste errors

To see details of a given bug, visit
  https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed above.

(3.19.0.RC1: 02 Apr 2022)
(3.19.0.RC2: 08 Apr 2022)
