Release 3.8.0 (????)
~~~~~~~~~~~~~~~~~~~~

xxx Don't forget to update VALGRIND_MAJOR/MINOR before release

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

* Support for intel AES instructions (AESKEYGENASSIST, AESENC, AESENCLAST,
  AESDEC, AESDECLAST, AESIMC). Only supported for 64 bit architecture.

* Support for Intel AVX instructions.

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

* Massif
  - Using the new option --soname-synonyms, Massif can now understand
    a program using statically linked malloc or using alternative
    malloc libraries (such as tcmalloc).

* Memcheck:

  - The leak_check GDB server monitor command now can
    control the maximum nr of loss records to output.

  - Reduction of memory use for applications allocating
    many blocks and/or having many partially defined bytes.

  - Addition of GDB server monitor command 'block_list' that lists
    the addresses/sizes of the blocks of a leak search loss record.

  - Addition of GDB server monitor command 'who_points_at' that lists
    the locations pointing at a block.

  - If a redzone size > 0 is given, VALGRIND_MALLOCLIKE_BLOCK now
    will detect an invalid access of these redzones, by marking them
    noaccess.
    Similarly, if a redzone size is given for a memory pool,
    VALGRIND_MEMPOOL_ALLOC will mark the redzones no access.
    This still allows to find some bugs if the user has forgotten
    to mark the pool superblock noaccess.

  - Using the new option --soname-synonyms, Memcheck can now understand
    a program using statically linked malloc or using alternative
    malloc libraries (such as tcmalloc).

* DRD:

  - Fixed a subtle bug that could cause false positive data race reports.

  - Added even more facilities that can help finding the cause of a data
    race, namely the command-line option --ptrace-addr and the macro
    DRD_STOP_TRACING_VAR(x). More information can be found in the manual.

* ==================== OTHER CHANGES ====================

* The C++ demangler has been updated so as to work well with C++ 
  compiled by up to at least g++ 4.6.

* Replacement/wrapping can be made more flexible thanks to the new option
  --soname-synonyms.

* The new option --fair-sched allows to control the locking mechanism
  used by Valgrind. The locking mechanism influences the performance
  and scheduling of multithreaded applications (in particular
  on multiprocessor/multicore systems).

* Support to run Valgrind on Valgrind has been improved.

* gdbserver now shows the float shadow registers as integer
  rather than float values, as the shadow values are mostly
  used as bit patterns.

* Increased limit for the --num-callers command line flag to 500.

* Improved DWARF4 support (284124)

* ==================== 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.

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 below.

284864  vex amd64->IR: 0xC5 0xF9 0x57 0xC0 0xC5 0xFA 0x10 0x15
285725  vex amd64->IR: 0xC5 0xF9 0x28 0xD0 0xC5 0xFB
286497  amd64 + vex: unhandled vcvtsi2ss instruction
286596  Lack of support for several SSE instructions
287307  vex amd64->IR: 0xC5 0xF9 0x57 0xC0 0x48 0x89 0xC7 0xE8
288995  vex amd64->IR: 0xC5 0xF8 0x57 0xC0 0xC5 0xFA 0x11
289656  vex amd64->IR: 0xC5 0xF0 0x57 0xC9 0x66 0xF 0x2F 0xC8
292300  unhandled instruction, vmovd in 32bit
292493  Invalid Instruction in optimized glibc __mpn_construct_double
292841  vex amd64->IR: unhandled instruction bytes: 0xC5 0xFB 0x10 0x5 0xD0 0x7B
298227  vex amd64->IR: 0xC5 0xF8 0x57 0xC0 0x48 0xC7 0x43 0x58)
298335  vex amd64->IR: 0xC5 0xF9 0x57 0xC0 0x48 0x8B 0x35 0x3"
303466  vex amd64->IR: 0xC5 0x7A 0x10 0x35 0x61 0x2D 0x20 0x0
  == 273475 (canonical avx)

285662  Memcheck needs to replace memcpy/memmove (and most certainly others)
        in VG_Z_LIBC_SONAME on Darwin
        == OSX memcpy/memmove intercept problems (Gary Kwong), Moz #710438

715750 (moz)
  OSX: Large numbers of incorrect invalid-address errors near 0xFFFFxxxx

286384  configure fails "checking for a supported version of gcc"
        when compiler is called x86_64-pc-linux-gnu-gcc

-- sorted (ish) after this point

197914  Building valgrind from svn now requires automake-1.10
203877  increase to 16Mb maximum allowed alignment for memalign() and posix_memalign
219156  Valgrind does not handle statically linked malloc or other malloc lib (e.g. tcmalloc) 
247386  make perf does not run all performance tests
270006  Valgrind scheduler unfair 
270777  Adding MIPS/Linux port to Valgrind
270796  s390x: Removed broken support for the TS insn
271438  Fix configure for proper SSE4.2 detection
273114  s390x: Support TR, TRE, TROO, TROT, TRTO, and TRTT instructions
274078  improved configure logic for mpicc
276993  fix mremap 'no thrash checks' 
281482  valgrind's memcheck incorrect byte allocation count in realloc() for silly argument
282230  group allocator for small fixed size, use it for MC_Chunk/SEc vbit
283413  Fix wrong sanity check
283671  Robustize alignment computation in LibVEX_Alloc
283961  Adding support for some HCI IOCTLs
284124  parse_type_DIE: confused by: DWARF 4
285219  Too-restrictive constraints for Thumb2 "SP plus/minus register"
286261  [patch] add wrapper for linux I2C_RDWR ioctl
286270  vgpreload is not friendly to 64->32 bit execs, gives ld.so warnings
286374  Running cachegrind with --branch-sim=yes on 64-bit PowerPC program fails
286917  disInstr(arm): unhandled instruction: QADD (also QSUB)
287260  Incorrect conditional jump or move depends on uninitialised value(s)
287301  vex amd64->IR: 0x66 0xF 0x38 0x41 0xC0 0xB8 0x0 0x0 (PHMINPOSUW)
287858  VG_(strerror): unknown error 
289470  Loading of large Mach-O thin binaries fails.
289699  vgdb connection in relay mode erroneously closed due to buffer overrun 
289823  (duplicate of 293754) vex amd64->IR: 0x66 0xF 0x3A 0x60 0xCA 0x45 0x66 0xF
289939  wish: complete monitor cmd 'leak_check' with details about leaked or reachable blocks
290006  memcheck doesn't mark %xmm as initialized after "pcmpeqw %xmm %xmm"
290655  Add support for AESKEYGENASSIST instruction 
290719  valgrind-3.7.0 fails with automake-1.11.2 due to"pkglibdir" usage
290974  vgdb must align pages to VKI_SHMLBA (16KB) on ARM 
291253  ES register not initialised in valgrind simulation
291568  Fix 3DNOW-related crashes with baseline x86_64 CPU (w patch)
291865  s390x: Support the "Compare Double and Swap" family of instructions
292430  3.8.0svn build encounters unrecognized instruction in __intel_get_new_mem_ops_cpuid
292626  Missing fcntl F_SETOWN_EX and F_GETOWN_EX support
292627  Missing support for some SCSI ioctls
292628  none/tests/x86/bug125959-x86.c triggers undefined behavior
292993  implement the getcpu syscall on amd64-linux
292995  Implement the “cross memory attach” syscalls introduced in Linux 3.2
293088  Add some VEX sanity checks for ppc64 unhandled instructions
293751  duplicate of 290655
293754  PCMPxSTRx not implemented for 16-bit characters
293755  (duplicate of 293754) No tests for PCMPxSTRx on 16-bit characters
293808  CLFLUSH not supported by latest VEX for amd64
294047  valgrind does not correctly emulate prlimit64(..., RLIMIT_NOFILE, ...)
294048  MPSADBW instruction not implemented
294055  regtest none/tests/shell fails when locale is not set to C
294185  INT 0x44 (and others) not supported on x86 guest, but used by Jikes RVM
294190  --vgdb-error=xxx can be out of sync with errors shown to the user
294191  Guest amd64 lacks fnsave/frstor and 0x66 size prefixes on FP instructions
294260  vex: the 'impossible' happened:  disInstr_AMD64: disInstr miscalculated next %rip
294523  --partial-loads-ok=yes causes false negatives
294617  vex amd64->IR: unhandled instruction bytes: 0x66 0xF 0x3A 0xDF 0xD1 0x1 0xE8 0x6A
294736  Valgrind crashes with Unrecognised instruction 0x48 0xF 0xD7 0xD6 0x48 0x83
294812  patch allowing to run (on x86 at least) helgrind/drd on tool.
295089  can not annotate source for both helgrind and drd
295221  POWER Processor decimal floating point instruction support missing
295428  coregrind/m_main.c has incorrect x86 assembly for darwin
295590  Helgrind: Assertion 'cvi->nWaiters > 0' failed when cond var being waited upon destroyed
295617  ARM - Add some missing syscalls
295799  Missing \n with get_vbits in gdbserver when line is % 80 and there are some unaddressable bytes 
296229  Linux user input device ioctls missing wrappers
296318  ELF Debug info improvements (more than one rx/rw mapping)
296422  Add translation chaining support
296457  vex amd64->IR: 0x66 0xF 0x3A 0xDF 0xD1 0x1 0xE8 0x6A (dup of AES)
296792  [PATCH] valgrind 3.7.0: add SIOCSHWTSTAMP (0x89B0) ioctl wrapper
296983  Fix build issues on x86_64/ppc64 without 32-bit toolchains
n-i-bz  s390x: Shadow registers can now be examined using vgdb
297078  gdbserver signal handling problems caused by diff vki nr/gdb nr
        and non reset of "C-ontinued" signal
297147  drd false positives on newly allocated memory
297329  VEX should disallow decoding of IBM Power Decimal Floating Point 
        instructions on machines that do not support it
297497  POWER Processor decimal floating point instruction support missing
297701  Another alias for strncasecmp_l in libc-2.13.so
297976  s390x: revisit EX implementation
297911  valgrind does not report 'invalid write' when using APIs for custom memory allocators.
297991  Valgrind interferes with mmap()+ftell() 
297992  Support systems missing WIFCONTINUED (e.g. pre-2.6.10 Linux) 
297993  Fix compilation of valgrind with gcc -g3.
298080  POWER Processor decimal floating point instruction support missing, part 3
298354  Unhandled ARM Thumb instruction 0xEB0D 0x0585 (streq)
298394  s390x: Don't bail out on an unknown machine model. Assume it's a new model.
298421  accept4() syscall (366) support is missing for ARM
298718  vex amd64->IR: unhandled instruction bytes: 0xF 0xB1 0xCB 0x9C 0x8F 0x45
298732  valgrind installation problem in ubuntu with kernel version 3.x
298862  POWER Processor decimal floating point instruction support missing, part 4
298864  DWARF reader mis-parses DW_FORM_ref_addr
298943  massif asserts with --pages-as-heap=yes when brk is changing by value different of page size
299053  Support DWARF4 DW_AT_high_pc constant form
299104  vex amd64->IR: unhandled instruction bytes: 0xC5 0xF8 0x57 0xC0 0x48 0x89 0xE5 0x41
        == 273475 (canonical avx)
299629  dup3() syscall (358) support is missing for ARM
299316  Helgrind: hg_main.c:628 (map_threads_lookup): Assertion 'thr' failed.
299694  POWER Processor decimal floating point instruction support missing, part 5
299756  For symmetry, --free-fill must be ignored for MEMPOOL_FREE and FREELIKE client requests
299803  vex amd64->IR: unhandled instruction bytes: 0xC5 0xF1 0x57 0xC9 0xC5 0xF9 0x2E 0xC8
        == 273475 (canonical avx)
299804  vex amd64->IR: unhandled instruction bytes: 0xC5 0xFB 0x2A 0xC2 0xC5 0xFB 0x59 0x5
        == 273475 (canonical avx)
299805  vex amd64->IR: unhandled instruction bytes: 0xC5 0xFA 0x10 0x5 0x6D 0xDD 0x0 0x0
        == 273475 (canonical avx)
n-i-bz  Bypass gcc4.4/4.5 wrong code generation causing out of memory or asserts
n-i-bz  Add missing gdbserver xml files for shadow registers for ppc32
n-i-bz  Fix false positive in sys_clone on amd64 when optional args are not given (e.g. child_tidptr)
n-i-bz  Fix assert in gdbserver for watchpoints watching the same address
300140  ARM - Missing (T1) SMMUL
300195  read_elf_debug_info() should accept 'executable' .got sections
        == 296318
300389  AMD Bulldozer system: vex: priv/main_main.c:315 (LibVEX_Translate):
        Assertion `are_valid_hwcaps(VexArchAMD64, vta->archinfo_host.hwcaps)' failed.
300414  FCOM and FCOMP unimplemented for amd64 guest
301204  infinite loop in canonicaliseSymtab with ifunc symbol
301229  dup of 203877, see above.
301984  configure script doesn't detect certain versions of clang
302205  Fix compiler warnings for POWER VEX code and POWER test cases
302370  The nmadd, fnmsub, fnmadds, fnmsubs instructions always negate
        the result even when the result is QNAN or SNAN.
302536  Fix for the POWER Valgrind regression test: memcheck-ISA2.0.
302656  Unhandled instruction (vcvtsi2ssq)
        == 273475 (canonical avx)
302709  valgrind for ARM needs extra tls support for android emulator under Linux
302827  add wrapper for CDROM_GET_CAPABILITY
302901  Valgrind crashes with dwz optimized debuginfo
302918  Enable testing of the vmaddfp and vnsubfp instructions in the testsuite
303116  Add support for the POWER instruction popcntb
303127  Power test suite fixes for frsqrte, vrefp, and vrsqrtefp instructions.
303250  "Assertion `instrs_in->arr_used <= 10000' failed" on
        OpenSSL with --track-origins=yes


Release 3.7.0 (5 November 2011)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.7.0 is a feature release with many significant improvements and the
usual collection of bug fixes.

This release supports X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux,
PPC64/Linux, S390X/Linux, ARM/Android, X86/Darwin and AMD64/Darwin.
Support for recent distros and toolchain components (glibc 2.14, gcc
4.6, MacOSX 10.7) has been added.

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

* Support for IBM z/Architecture (s390x) running Linux.  Valgrind can
  analyse 64-bit programs running on z/Architecture.  Most user space
  instructions up to and including z10 are supported.  Valgrind has
  been tested extensively on z9, z10, and z196 machines running SLES
  10/11, RedHat 5/6m, and Fedora. The Memcheck and Massif tools are
  known to work well. Callgrind, Helgrind, and DRD work reasonably
  well on z9 and later models. See README.s390 for more details.

* Preliminary support for MacOSX 10.7 and XCode 4.  Both 32- and
  64-bit processes are supported.  Some complex threaded applications
  (Firefox) are observed to hang when run as 32 bit applications,
  whereas 64-bit versions run OK.  The cause is unknown.  Memcheck
  will likely report some false errors.  In general, expect some rough
  spots.  This release also supports MacOSX 10.6, but drops support
  for 10.5.

* Preliminary support for Android (on ARM).  Valgrind can now run
  large applications (eg, Firefox) on (eg) a Samsung Nexus S.  See
  README.android for more details, plus instructions on how to get
  started.

* Support for the IBM Power ISA 2.06 (Power7 instructions)

* General correctness and performance improvements for ARM/Linux, and,
  by extension, ARM/Android.

* Further solidification of support for SSE 4.2 in 64-bit mode.  AVX
  instruction set support is under development but is not available in
  this release.

* Support for AIX5 has been removed.

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

* Memcheck: some incremental changes:

  - reduction of memory use in some circumstances

  - improved handling of freed memory, which in some circumstances 
    can cause detection of use-after-free that would previously have
    been missed

  - fix of a longstanding bug that could cause false negatives (missed
    errors) in programs doing vector saturated narrowing instructions.

* Helgrind: performance improvements and major memory use reductions,
  particularly for large, long running applications which perform many
  synchronisation (lock, unlock, etc) events.  Plus many smaller
  changes:

  - display of locksets for both threads involved in a race

  - general improvements in formatting/clarity of error messages

  - addition of facilities and documentation regarding annotation
    of thread safe reference counted C++ classes

  - new flag --check-stack-refs=no|yes [yes], to disable race checking
    on thread stacks (a performance hack)

  - new flag --free-is-write=no|yes [no], to enable detection of races
    where one thread accesses heap memory but another one frees it,
    without any coordinating synchronisation event

* DRD: enabled XML output; added support for delayed thread deletion
  in order to detect races that occur close to the end of a thread
  (--join-list-vol); fixed a memory leak triggered by repeated client
  memory allocatation and deallocation; improved Darwin support.

* exp-ptrcheck: this tool has been renamed to exp-sgcheck

* exp-sgcheck: this tool has been reduced in scope so as to improve
  performance and remove checking that Memcheck does better.
  Specifically, the ability to check for overruns for stack and global
  arrays is unchanged, but the ability to check for overruns of heap
  blocks has been removed.  The tool has accordingly been renamed to
  exp-sgcheck ("Stack and Global Array Checking").

* ==================== OTHER CHANGES ====================

* GDB server: Valgrind now has an embedded GDB server.  That means it
  is possible to control a Valgrind run from GDB, doing all the usual
  things that GDB can do (single stepping, breakpoints, examining
  data, etc).  Tool-specific functionality is also available.  For
  example, it is possible to query the definedness state of variables
  or memory from within GDB when running Memcheck; arbitrarily large
  memory watchpoints are supported, etc.  To use the GDB server, start
  Valgrind with the flag --vgdb-error=0 and follow the on-screen
  instructions.

* Improved support for unfriendly self-modifying code: a new option
  --smc-check=all-non-file is available.  This adds the relevant
  consistency checks only to code that originates in non-file-backed
  mappings.  In effect this confines the consistency checking only to
  code that is or might be JIT generated, and avoids checks on code
  that must have been compiled ahead of time.  This significantly
  improves performance on applications that generate code at run time.

* It is now possible to build a working Valgrind using Clang-2.9 on
  Linux.

* new client requests VALGRIND_{DISABLE,ENABLE}_ERROR_REPORTING.
  These enable and disable error reporting on a per-thread, and
  nestable, basis.  This is useful for hiding errors in particularly
  troublesome pieces of code.  The MPI wrapper library (libmpiwrap.c)
  now uses this facility.

* Added the --mod-funcname option to cg_diff.

* ==================== 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 (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
mailing the developers (or mailing lists) directly -- bugs that are
not entered into bugzilla tend to get forgotten about or ignored.

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 below.

210935  port valgrind.h (not valgrind) to win32 to support client requests
214223  valgrind SIGSEGV on startup gcc 4.4.1 ppc32 (G4) Ubuntu 9.10
243404  Port to zSeries
243935  Helgrind: incorrect handling of ANNOTATE_HAPPENS_BEFORE()/AFTER()
247223  non-x86: Suppress warning: 'regparm' attribute directive ignored
250101  huge "free" memory usage due to m_mallocfree.c fragmentation
253206  Some fixes for the faultstatus testcase
255223  capget testcase fails when running as root
256703  xlc_dbl_u32.c testcase broken
256726  Helgrind tests have broken inline asm 
259977  == 214223 (Valgrind segfaults doing __builtin_longjmp)
264800  testcase compile failure on zseries
265762  make public VEX headers compilable by G++ 3.x
265771  assertion in jumps.c (r11523) fails with glibc-2.3
266753  configure script does not give the user the option to not use QtCore
266931  gen_insn_test.pl is broken
266961  ld-linux.so.2 i?86-linux strlen issues
266990  setns instruction causes false positive
267020  Make directory for temporary files configurable at run-time.
267342  == 267997 (segmentation fault on Mac OS 10.6)
267383  Assertion 'vgPlain_strlen(dir) + vgPlain_strlen(file) + 1 < 256' failed
267413  Assertion 'DRD_(g_threadinfo)[tid].synchr_nesting >= 1' failed.
267488  regtest: darwin support for 64-bit build
267552  SIGSEGV (misaligned_stack_error) with DRD, but not with other tools
267630  Add support for IBM Power ISA 2.06 -- stage 1
267769  == 267997 (Darwin: memcheck triggers segmentation fault)
267819  Add client request for informing the core about reallocation
267925  laog data structure quadratic for a single sequence of lock
267968  drd: (vgDrd_thread_set_joinable): Assertion '0 <= (int)tid ..' failed
267997  MacOSX: 64-bit V segfaults on launch when built with Xcode 4.0.1
268513  missed optimizations in fold_Expr
268619  s390x: fpr - gpr transfer facility 
268620  s390x: reconsider "long displacement" requirement 
268621  s390x: improve IR generation for XC
268715  s390x: FLOGR is not universally available
268792  == 267997 (valgrind seg faults on startup when compiled with Xcode 4)
268930  s390x: MHY is not universally available
269078  arm->IR: unhandled instruction SUB (SP minus immediate/register) 
269079  Support ptrace system call on ARM
269144  missing "Bad option" error message
269209  conditional load and store facility (z196)
269354  Shift by zero on x86 can incorrectly clobber CC_NDEP
269641  == 267997 (valgrind segfaults immediately (segmentation fault))
269736  s390x: minor code generation tweaks
269778  == 272986 (valgrind.h: swap roles of VALGRIND_DO_CLIENT_REQUEST() ..)
269863  s390x: remove unused function parameters
269864  s390x: tweak s390_emit_load_cc 
269884  == 250101 (overhead for huge blocks exhausts space too soon)
270082  s390x: Make sure to point the PSW address to the next address on SIGILL
270115  s390x: rewrite some testcases
270309  == 267997 (valgrind crash on startup)
270320  add support for Linux FIOQSIZE ioctl() call
270326  segfault while trying to sanitize the environment passed to execle
270794  IBM POWER7 support patch causes regression in none/tests
270851  IBM POWER7 fcfidus instruction causes memcheck to fail
270856  IBM POWER7 xsnmaddadp instruction causes memcheck to fail on 32bit app 
270925  hyper-optimized strspn() in /lib64/libc-2.13.so needs fix
270959  s390x: invalid use of R0 as base register
271042  VSX configure check fails when it should not 
271043  Valgrind build fails with assembler error on ppc64 with binutils 2.21 
271259  s390x: fix code confusion 
271337  == 267997 (Valgrind segfaults on MacOS X)
271385  s390x: Implement Ist_MBE 
271501  s390x: misc cleanups 
271504  s390x: promote likely and unlikely 
271579  ppc: using wrong enum type 
271615  unhandled instruction "popcnt" (arch=amd10h) 
271730  Fix bug when checking ioctls: duplicate check 
271776  s390x: provide STFLE instruction support 
271779  s390x: provide clock instructions like STCK 
271799  Darwin: ioctls without an arg report a memory error 
271820  arm: fix type confusion 
271917  pthread_cond_timedwait failure leads to not-locked false positive 
272067  s390x: fix DISP20 macro 
272615  A typo in debug output in mc_leakcheck.c
272661  callgrind_annotate chokes when run from paths containing regex chars
272893  amd64->IR: 0x66 0xF 0x38 0x2B 0xC1 0x66 0xF 0x7F == (closed as dup)
272955  Unhandled syscall error for pwrite64 on ppc64 arch 
272967  make documentation build-system more robust 
272986  Fix gcc-4.6 warnings with valgrind.h
273318  amd64->IR: 0x66 0xF 0x3A 0x61 0xC1 0x38 (missing PCMPxSTRx case)
273318  unhandled PCMPxSTRx case: vex amd64->IR: 0x66 0xF 0x3A 0x61 0xC1 0x38 
273431  valgrind segfaults in evalCfiExpr (debuginfo.c:2039)
273465  Callgrind: jumps.c:164 (new_jcc): Assertion '(0 <= jmp) && ...'
273536  Build error: multiple definition of `vgDrd_pthread_cond_initializer'
273640  ppc64-linux: unhandled syscalls setresuid(164) and setresgid(169)
273729  == 283000 (Illegal opcode for SSE2 "roundsd" instruction)
273778  exp-ptrcheck: unhandled sysno == 259
274089  exp-ptrcheck: unhandled sysno == 208
274378  s390x: Various dispatcher tweaks
274447  WARNING: unhandled syscall: 340
274776  amd64->IR: 0x66 0xF 0x38 0x2B 0xC5 0x66
274784  == 267997 (valgrind ls -l results in Segmentation Fault)
274926  valgrind does not build against linux-3
275148  configure FAIL with glibc-2.14
275151  Fedora 15 / glibc-2.14 'make regtest' FAIL
275168  Make Valgrind work for MacOSX 10.7 Lion
275212  == 275284 (lots of false positives from __memcpy_ssse3_back et al)
275278  valgrind does not build on Linux kernel 3.0.* due to silly
275284  Valgrind memcpy/memmove redirection stopped working in glibc 2.14/x86_64
275308  Fix implementation for ppc64 fres instruc
275339  s390x: fix testcase compile warnings
275517  s390x: Provide support for CKSM instruction
275710  s390x: get rid of redundant address mode calculation
275815  == 247894 (Valgrind doesn't know about Linux readahead(2) syscall)
275852  == 250101 (valgrind uses all swap space and is killed)
276784  Add support for IBM Power ISA 2.06 -- stage 3
276987  gdbsrv: fix tests following recent commits
277045  Valgrind crashes with  unhandled DW_OP_ opcode 0x2a
277199  The test_isa_2_06_part1.c in none/tests/ppc64 should be a symlink
277471  Unhandled syscall: 340
277610  valgrind crashes in VG_(lseek)(core_fd, phdrs[idx].p_offset, ...)
277653  ARM: support Thumb2 PLD instruction
277663  ARM: NEON float VMUL by scalar incorrect
277689  ARM: tests for VSTn with register post-index are broken
277694  ARM: BLX LR instruction broken in ARM mode
277780  ARM: VMOV.F32 (immediate) instruction is broken
278057  fuse filesystem syscall deadlocks
278078  Unimplemented syscall 280 on ppc32
278349  F_GETPIPE_SZ and  F_SETPIPE_SZ Linux fcntl commands
278454  VALGRIND_STACK_DEREGISTER has wrong output type
278502  == 275284 (Valgrind confuses memcpy() and memmove())
278892  gdbsrv: factorize gdb version handling, fix doc and typos
279027  Support for MVCL and CLCL instruction
279027  s390x: Provide support for CLCL and MVCL instructions
279062  Remove a redundant check in the insn selector for ppc.
279071  JDK creates PTEST with redundant REX.W prefix
279212  gdbsrv: add monitor cmd v.info scheduler.
279378  exp-ptrcheck: the 'impossible' happened on mkfifo call
279698  memcheck discards valid-bits for packuswb
279795  memcheck reports uninitialised values for mincore on amd64
279994  Add support for IBM Power ISA 2.06 -- stage 3
280083  mempolicy syscall check errors
280290  vex amd64->IR: 0x66 0xF 0x38 0x28 0xC1 0x66 0xF 0x6F
280710  s390x: config files for nightly builds
280757  /tmp dir still used by valgrind even if TMPDIR is specified
280965  Valgrind breaks fcntl locks when program does mmap
281138  WARNING: unhandled syscall: 340
281241  == 275168 (valgrind useless on Macos 10.7.1 Lion)
281304  == 275168 (Darwin: dyld "cannot load inserted library")
281305  == 275168 (unhandled syscall: unix:357 on Darwin 11.1)
281468  s390x: handle do_clone and gcc clones in call traces
281488  ARM: VFP register corruption
281828  == 275284 (false memmove warning: "Source and destination overlap")
281883  s390x: Fix system call wrapper for "clone".
282105  generalise 'reclaimSuperBlock' to also reclaim splittable superblock
282112  Unhandled instruction bytes: 0xDE 0xD9 0x9B 0xDF (fcompp)
282238  SLES10: make check fails
282979  strcasestr needs replacement with recent(>=2.12) glibc
283000  vex amd64->IR: 0x66 0xF 0x3A 0xA 0xC0 0x9 0xF3 0xF
283243  Regression in ppc64 memcheck tests
283325  == 267997 (Darwin: V segfaults on startup when built with Xcode 4.0)
283427  re-connect epoll_pwait syscall on ARM linux
283600  gdbsrv: android: port vgdb.c
283709  none/tests/faultstatus needs to account for page size
284305  filter_gdb needs enhancement to work on ppc64
284384  clang 3.1 -Wunused-value warnings in valgrind.h, memcheck.h
284472  Thumb2 ROR.W encoding T2 not implemented
284621  XML-escape process command line in XML output
n-i-bz  cachegrind/callgrind: handle CPUID information for Core iX Intel CPUs
        that have non-power-of-2 sizes (also AMDs)
n-i-bz  don't be spooked by libraries mashed by elfhack
n-i-bz  don't be spooked by libxul.so linked with gold
n-i-bz  improved checking for VALGRIND_CHECK_MEM_IS_DEFINED

(3.7.0-TEST1: 27  October 2011, vex r2228, valgrind r12245)
(3.7.0.RC1:    1 November 2011, vex r2231, valgrind r12257)
(3.7.0:        5 November 2011, vex r2231, valgrind r12258)



Release 3.6.1 (16 February 2011)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.6.1 is a bug fix release.  It adds support for some SSE4
instructions that were omitted in 3.6.0 due to lack of time.  Initial
support for glibc-2.13 has been added.  A number of bugs causing
crashing or assertion failures have been fixed.

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 (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
mailing the developers (or mailing lists) directly -- bugs that are
not entered into bugzilla tend to get forgotten about or ignored.

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 below.

188572  Valgrind on Mac should suppress setenv() mem leak
194402  vex amd64->IR: 0x48 0xF 0xAE 0x4 (proper FX{SAVE,RSTOR} support)
210481  vex amd64->IR: Assertion `sz == 2 || sz == 4' failed (REX.W POPQ)
246152  callgrind internal error after pthread_cancel on 32 Bit Linux
250038  ppc64: Altivec LVSR and LVSL instructions fail their regtest
254420  memory pool tracking broken 
254957  Test code failing to compile due to changes in memcheck.h
255009  helgrind/drd: crash on chmod with invalid parameter
255130  readdwarf3.c parse_type_DIE confused by GNAT Ada types
255355  helgrind/drd: crash on threaded programs doing fork
255358  == 255355
255418  (SSE4.x) rint call compiled with ICC
255822  --gen-suppressions can create invalid files: "too many callers [...]"
255888  closing valgrindoutput tag outputted to log-stream on error
255963  (SSE4.x) vex amd64->IR: 0x66 0xF 0x3A 0x9 0xDB 0x0 (ROUNDPD)
255966  Slowness when using mempool annotations
256387  vex x86->IR: 0xD4 0xA 0x2 0x7 (AAD and AAM)
256600  super-optimized strcasecmp() false positive
256669  vex amd64->IR: Unhandled LOOPNEL insn on amd64
256968  (SSE4.x) vex amd64->IR: 0x66 0xF 0x38 0x10 0xD3 0x66 (BLENDVPx)
257011  (SSE4.x) vex amd64->IR: 0x66 0xF 0x3A 0xE 0xFD 0xA0 (PBLENDW)
257063  (SSE4.x) vex amd64->IR: 0x66 0xF 0x3A 0x8 0xC0 0x0 (ROUNDPS)
257276  Missing case in memcheck --track-origins=yes
258870  (SSE4.x) Add support for EXTRACTPS SSE 4.1 instruction
261966  (SSE4.x) support for CRC32B and CRC32Q is lacking (also CRC32{W,L})
262985  VEX regression in valgrind 3.6.0 in handling PowerPC VMX
262995  (SSE4.x) crash when trying to valgrind gcc-snapshot (PCMPxSTRx $0)
263099  callgrind_annotate counts Ir improperly [...]
263877  undefined coprocessor instruction on ARMv7
265964  configure FAIL with glibc-2.13
n-i-bz  Fix compile error w/ icc-12.x in guest_arm_toIR.c
n-i-bz  Docs: fix bogus descriptions for VALGRIND_CREATE_BLOCK et al
n-i-bz  Massif: don't assert on shmat() with --pages-as-heap=yes
n-i-bz  Bug fixes and major speedups for the exp-DHAT space profiler
n-i-bz  DRD: disable --free-is-write due to implementation difficulties

(3.6.1: 16 February 2011, vex r2103, valgrind r11561).



Release 3.6.0 (21 October 2010)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.6.0 is a feature release with many significant improvements and the
usual collection of bug fixes.

This release supports X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux,
PPC64/Linux, X86/Darwin and AMD64/Darwin.  Support for recent distros
and toolchain components (glibc 2.12, gcc 4.5, OSX 10.6) has been added.

                    -------------------------

Here are some highlights.  Details are shown further down:

* Support for ARM/Linux.

* Support for recent Linux distros: Ubuntu 10.10 and Fedora 14.

* Support for Mac OS X 10.6, both 32- and 64-bit executables.

* Support for the SSE4.2 instruction set.

* Enhancements to the Callgrind profiler, including the ability to
  handle CPUs with three levels of cache.

* A new experimental heap profiler, DHAT.

* A huge number of bug fixes and small enhancements.

                    -------------------------

Here are details of the above changes, together with descriptions of
many other changes, and a list of fixed bugs.

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

* Support for ARM/Linux.  Valgrind now runs on ARMv7 capable CPUs
  running Linux.  It is known to work on Ubuntu 10.04, Ubuntu 10.10,
  and Maemo 5, so you can run Valgrind on your Nokia N900 if you want.

  This requires a CPU capable of running the ARMv7-A instruction set
  (Cortex A5, A8 and A9).  Valgrind provides fairly complete coverage
  of the user space instruction set, including ARM and Thumb integer
  code, VFPv3, NEON and V6 media instructions.  The Memcheck,
  Cachegrind and Massif tools work properly; other tools work to
  varying degrees.

* Support for recent Linux distros (Ubuntu 10.10 and Fedora 14), along
  with support for recent releases of the underlying toolchain
  components, notably gcc-4.5 and glibc-2.12.

* Support for Mac OS X 10.6, both 32- and 64-bit executables.  64-bit
  support also works much better on OS X 10.5, and is as solid as
  32-bit support now.

* Support for the SSE4.2 instruction set.  SSE4.2 is supported in
  64-bit mode.  In 32-bit mode, support is only available up to and
  including SSSE3.  Some exceptions: SSE4.2 AES instructions are not
  supported in 64-bit mode, and 32-bit mode does in fact support the
  bare minimum SSE4 instructions to needed to run programs on Mac OS X
  10.6 on 32-bit targets.

* Support for IBM POWER6 cpus has been improved.  The Power ISA up to
  and including version 2.05 is supported.

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

* Cachegrind has a new processing script, cg_diff, which finds the
  difference between two profiles.  It's very useful for evaluating
  the performance effects of a change in a program.
  
  Related to this change, the meaning of cg_annotate's (rarely-used)
  --threshold option has changed; this is unlikely to affect many
  people, if you do use it please see the user manual for details.

* Callgrind now can do branch prediction simulation, similar to
  Cachegrind.  In addition, it optionally can count the number of
  executed global bus events.  Both can be used for a better
  approximation of a "Cycle Estimation" as derived event (you need to
  update the event formula in KCachegrind yourself).

* Cachegrind and Callgrind now refer to the LL (last-level) cache
  rather than the L2 cache.  This is to accommodate machines with
  three levels of caches -- if Cachegrind/Callgrind auto-detects the
  cache configuration of such a machine it will run the simulation as
  if the L2 cache isn't present.  This means the results are less
  likely to match the true result for the machine, but
  Cachegrind/Callgrind's results are already only approximate, and
  should not be considered authoritative.  The results are still
  useful for giving a general idea about a program's locality.

* Massif has a new option, --pages-as-heap, which is disabled by
  default.  When enabled, instead of tracking allocations at the level
  of heap blocks (as allocated with malloc/new/new[]), it instead
  tracks memory allocations at the level of memory pages (as mapped by
  mmap, brk, etc).  Each mapped page is treated as its own block.
  Interpreting the page-level output is harder than the heap-level
  output, but this option is useful if you want to account for every
  byte of memory used by a program.

* DRD has two new command-line options: --free-is-write and
  --trace-alloc.  The former allows to detect reading from already freed
  memory, and the latter allows tracing of all memory allocations and
  deallocations.

* DRD has several new annotations.  Custom barrier implementations can
  now be annotated, as well as benign races on static variables.

* DRD's happens before / happens after annotations have been made more
  powerful, so that they can now also be used to annotate e.g. a smart
  pointer implementation.

* Helgrind's annotation set has also been drastically improved, so as
  to provide to users a general set of annotations to describe locks,
  semaphores, barriers and condition variables.  Annotations to
  describe thread-safe reference counted heap objects have also been
  added.

* Memcheck has a new command-line option, --show-possibly-lost, which
  is enabled by default.  When disabled, the leak detector will not
  show possibly-lost blocks.

* A new experimental heap profiler, DHAT (Dynamic Heap Analysis Tool),
  has been added.  DHAT keeps track of allocated heap blocks, and also
  inspects every memory reference to see which block (if any) is being
  accessed.  This gives a lot of insight into block lifetimes,
  utilisation, turnover, liveness, and the location of hot and cold
  fields.  You can use DHAT to do hot-field profiling.

* ==================== OTHER CHANGES ====================

* Improved support for unfriendly self-modifying code: the extra
  overhead incurred by --smc-check=all has been reduced by
  approximately a factor of 5 as compared with 3.5.0.

* Ability to show directory names for source files in error messages.
  This is combined with a flexible mechanism for specifying which
  parts of the paths should be shown.  This is enabled by the new flag
  --fullpath-after.

* A new flag, --require-text-symbol, which will stop the run if a
  specified symbol is not found it a given shared object when it is
  loaded into the process.  This makes advanced working with function
  intercepting and wrapping safer and more reliable.

* Improved support for the Valkyrie GUI, version 2.0.0.  GUI output
  and control of Valgrind is now available for the tools Memcheck and
  Helgrind.  XML output from Valgrind is available for Memcheck,
  Helgrind and exp-Ptrcheck.

* More reliable stack unwinding on amd64-linux, particularly in the
  presence of function wrappers, and with gcc-4.5 compiled code.

* Modest scalability (performance improvements) for massive
  long-running applications, particularly for those with huge amounts
  of code.

* Support for analyzing programs running under Wine with has been
  improved.  The header files <valgrind/valgrind.h>,
  <valgrind/memcheck.h> and <valgrind/drd.h> can now be used in
  Windows-programs compiled with MinGW or one of the Microsoft Visual
  Studio compilers.

* A rare but serious error in the 64-bit x86 CPU simulation was fixed.
  The 32-bit simulator was not affected.  This did not occur often,
  but when it did would usually crash the program under test.
  Bug 245925.

* A large number of bugs were fixed.  These are shown below.

* A number of bugs were investigated, and were candidates for fixing,
  but are not fixed in 3.6.0, due to lack of developer time.  They may
  get fixed in later releases.  They are:

  194402  vex amd64->IR: 0x48 0xF 0xAE 0x4 0x24 0x49  (FXSAVE64)
  212419  false positive "lock order violated" (A+B vs A) 
  213685  Undefined value propagates past dependency breaking instruction
  216837  Incorrect instrumentation of NSOperationQueue on Darwin 
  237920  valgrind segfault on fork failure 
  242137  support for code compiled by LLVM-2.8
  242423  Another unknown Intel cache config value 
  243232  Inconsistent Lock Orderings report with trylock 
  243483  ppc: callgrind triggers VEX assertion failure 
  243935  Helgrind: implementation of ANNOTATE_HAPPENS_BEFORE() is wrong
  244677  Helgrind crash hg_main.c:616 (map_threads_lookup): Assertion
          'thr' failed. 
  246152  callgrind internal error after pthread_cancel on 32 Bit Linux 
  249435  Analyzing wine programs with callgrind triggers a crash 
  250038  ppc64: Altivec lvsr and lvsl instructions fail their regtest
  250065  Handling large allocations 
  250101  huge "free" memory usage due to m_mallocfree.c
          "superblocks fragmentation"
  251569  vex amd64->IR: 0xF 0x1 0xF9 0x8B 0x4C 0x24 (RDTSCP)
  252091  Callgrind on ARM does not detect function returns correctly
  252600  [PATCH] Allow lhs to be a pointer for shl/shr
  254420  memory pool tracking broken
  n-i-bz  support for adding symbols for JIT generated code


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 (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
mailing the developers (or mailing lists) directly -- bugs that are
not entered into bugzilla tend to get forgotten about or ignored.

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 below.

135264  dcbzl instruction missing
142688  == 250799
153699  Valgrind should report unaligned reads with movdqa
180217  == 212335
190429  Valgrind reports lost of errors in ld.so
        with x86_64 2.9.90 glibc 
197266  valgrind appears to choke on the xmms instruction
        "roundsd" on x86_64 
197988  Crash when demangling very large symbol names
202315  unhandled syscall: 332 (inotify_init1)
203256  Add page-level profiling to Massif
205093  dsymutil=yes needs quotes, locking (partial fix)
205241  Snow Leopard 10.6 support (partial fix)
206600  Leak checker fails to upgrade indirect blocks when their
        parent becomes reachable 
210935  port valgrind.h (not valgrind) to win32 so apps run under
        wine can make client requests
211410  vex amd64->IR: 0x15 0xFF 0xFF 0x0 0x0 0x89
        within Linux ip-stack checksum functions 
212335  unhandled instruction bytes: 0xF3 0xF 0xBD 0xC0
        (lzcnt %eax,%eax) 
213685  Undefined value propagates past dependency breaking instruction
        (partial fix)
215914  Valgrind inserts bogus empty environment variable 
217863  == 197988
219538  adjtimex syscall wrapper wrong in readonly adjtime mode 
222545  shmat fails under valgind on some arm targets 
222560  ARM NEON support 
230407  == 202315
231076  == 202315
232509  Docs build fails with formatting inside <title></title> elements 
232793  == 202315
235642  [PATCH] syswrap-linux.c: support evdev EVIOCG* ioctls 
236546  vex x86->IR: 0x66 0xF 0x3A 0xA
237202  vex amd64->IR: 0xF3 0xF 0xB8 0xC0 0x49 0x3B 
237371  better support for VALGRIND_MALLOCLIKE_BLOCK 
237485  symlink (syscall 57) is not supported on Mac OS 
237723  sysno == 101 exp-ptrcheck: the 'impossible' happened:
        unhandled syscall 
238208  is_just_below_ESP doesn't take into account red-zone 
238345  valgrind passes wrong $0 when executing a shell script 
238679  mq_timedreceive syscall doesn't flag the reception buffer
        as "defined"
238696  fcntl command F_DUPFD_CLOEXEC not supported 
238713  unhandled instruction bytes: 0x66 0xF 0x29 0xC6 
238713  unhandled instruction bytes: 0x66 0xF 0x29 0xC6 
238745  3.5.0 Make fails on PPC Altivec opcodes, though configure
        says "Altivec off"
239992  vex amd64->IR: 0x48 0xF 0xC4 0xC1 0x0 0x48 
240488  == 197988
240639  == 212335
241377  == 236546
241903  == 202315
241920  == 212335
242606  unhandled syscall: setegid (in Ptrcheck)
242814  Helgrind "Impossible has happened" during
        QApplication::initInstance(); 
243064  Valgrind attempting to read debug information from iso 
243270  Make stack unwinding in Valgrind wrappers more reliable
243884  exp-ptrcheck: the 'impossible happened: unhandled syscall 
        sysno = 277 (mq_open)
244009  exp-ptrcheck unknown syscalls in analyzing lighttpd
244493  ARM VFP d16-d31 registers support 
244670  add support for audit_session_self syscall on Mac OS 10.6
244921  The xml report of helgrind tool is not well format
244923  In the xml report file, the <preamble> not escape the 
        xml char, eg '<','&','>'
245535  print full path names in plain text reports 
245925  x86-64 red zone handling problem 
246258  Valgrind not catching integer underruns + new [] s
246311  reg/reg cmpxchg doesn't work on amd64
246549  unhandled syscall unix:277 while testing 32-bit Darwin app 
246888  Improve Makefile.vex.am 
247510  [OS X 10.6] Memcheck reports unaddressable bytes passed 
        to [f]chmod_extended
247526  IBM POWER6 (ISA 2.05) support is incomplete
247561  Some leak testcases fails due to reachable addresses in
        caller save regs
247875  sizeofIRType to handle Ity_I128 
247894  [PATCH] unhandled syscall sys_readahead 
247980  Doesn't honor CFLAGS passed to configure 
248373  darwin10.supp is empty in the trunk 
248822  Linux FIBMAP ioctl has int parameter instead of long
248893  [PATCH] make readdwarf.c big endianess safe to enable
        unwinding on big endian systems
249224  Syscall 336 not supported (SYS_proc_info) 
249359  == 245535
249775  Incorrect scheme for detecting NEON capabilities of host CPU
249943  jni JVM init fails when using valgrind
249991  Valgrind incorrectly declares AESKEYGENASSIST support
        since VEX r2011
249996  linux/arm: unhandled syscall: 181 (__NR_pwrite64)
250799  frexp$fenv_access_off function generates SIGILL 
250998  vex x86->IR: unhandled instruction bytes: 0x66 0x66 0x66 0x2E 
251251  support pclmulqdq insn 
251362  valgrind: ARM: attach to debugger either fails or provokes
        kernel oops 
251674  Unhandled syscall 294
251818  == 254550

254257  Add support for debugfiles found by build-id
254550  [PATCH] Implement DW_ATE_UTF (DWARF4)
254646  Wrapped functions cause stack misalignment on OS X
        (and possibly Linux)
254556  ARM: valgrinding anything fails with SIGSEGV for 0xFFFF0FA0

(3.6.0: 21 October 2010, vex r2068, valgrind r11471).



Release 3.5.0 (19 August 2009)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.5.0 is a feature release with many significant improvements and the
usual collection of bug fixes.  The main improvement is that Valgrind
now works on Mac OS X.

This release supports X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux
and X86/Darwin.  Support for recent distros and toolchain components
(glibc 2.10, gcc 4.5) has been added.

                    -------------------------

Here is a short summary of the changes.  Details are shown further
down:

* Support for Mac OS X (10.5.x).

* Improvements and simplifications to Memcheck's leak checker.

* Clarification and simplifications in various aspects of Valgrind's
  text output.

* XML output for Helgrind and Ptrcheck.

* Performance and stability improvements for Helgrind and DRD.

* Genuinely atomic support for x86/amd64/ppc atomic instructions.

* A new experimental tool, BBV, useful for computer architecture
  research.

* Improved Wine support, including ability to read Windows PDB
  debuginfo.

                    -------------------------

Here are details of the above changes, followed by descriptions of
many other minor changes, and a list of fixed bugs.


* Valgrind now runs on Mac OS X.  (Note that Mac OS X is sometimes
  called "Darwin" because that is the name of the OS core, which is the
  level that Valgrind works at.)

  Supported systems:

  - It requires OS 10.5.x (Leopard).  Porting to 10.4.x is not planned
    because it would require work and 10.4 is only becoming less common.

  - 32-bit programs on x86 and AMD64 (a.k.a x86-64) machines are supported
    fairly well.  For 10.5.x, 32-bit programs are the default even on
    64-bit machines, so it handles most current programs.
    
  - 64-bit programs on x86 and AMD64 (a.k.a x86-64) machines are not
    officially supported, but simple programs at least will probably work.
    However, start-up is slow.

  - PowerPC machines are not supported.

  Things that don't work:

  - The Ptrcheck tool.

  - Objective-C garbage collection.

  - --db-attach=yes.

  - If you have Rogue Amoeba's "Instant Hijack" program installed,
    Valgrind will fail with a SIGTRAP at start-up.  See
    https://bugs.kde.org/show_bug.cgi?id=193917 for details and a
    simple work-around.

  Usage notes:

  - You will likely find --dsymutil=yes a useful option, as error
    messages may be imprecise without it.

  - Mac OS X support is new and therefore will be less robust than the
    Linux support.  Please report any bugs you find.

  - Threaded programs may run more slowly than on Linux.

  Many thanks to Greg Parker for developing this port over several years.


* Memcheck's leak checker has been improved.  

  - The results for --leak-check=summary now match the summary results
    for --leak-check=full.  Previously they could differ because
    --leak-check=summary counted "indirectly lost" blocks and
    "suppressed" blocks as "definitely lost".

  - Blocks that are only reachable via at least one interior-pointer,
    but are directly pointed to by a start-pointer, were previously
    marked as "still reachable".  They are now correctly marked as
    "possibly lost".

  - The default value for the --leak-resolution option has been
    changed from "low" to "high".  In general, this means that more
    leak reports will be produced, but each leak report will describe
    fewer leaked blocks.

  - With --leak-check=full, "definitely lost" and "possibly lost"
    leaks are now considered as proper errors, ie. they are counted
    for the "ERROR SUMMARY" and affect the behaviour of
    --error-exitcode.  These leaks are not counted as errors if
    --leak-check=summary is specified, however.

  - Documentation for the leak checker has been improved.


* Various aspects of Valgrind's text output have changed.

  - Valgrind's start-up message has changed.  It is shorter but also
    includes the command being run, which makes it easier to use
    --trace-children=yes.  An example:

  - Valgrind's shut-down messages have also changed.  This is most
    noticeable with Memcheck, where the leak summary now occurs before
    the error summary.  This change was necessary to allow leaks to be
    counted as proper errors (see the description of the leak checker
    changes above for more details).  This was also necessary to fix a
    longstanding bug in which uses of suppressions against leaks were
    not "counted", leading to difficulties in maintaining suppression
    files (see https://bugs.kde.org/show_bug.cgi?id=186790).

  - Behavior of -v has changed.  In previous versions, -v printed out
    a mixture of marginally-user-useful information, and tool/core
    statistics.  The statistics printing has now been moved to its own
    flag, --stats=yes.  This means -v is less verbose and more likely
    to convey useful end-user information.

  - The format of some (non-XML) stack trace entries has changed a
    little.  Previously there were six possible forms:

      0x80483BF: really (a.c:20)
      0x80483BF: really (in /foo/a.out)
      0x80483BF: really
      0x80483BF: (within /foo/a.out)
      0x80483BF: ??? (a.c:20)
      0x80483BF: ???

    The third and fourth of these forms have been made more consistent
    with the others.  The six possible forms are now:
  
      0x80483BF: really (a.c:20)
      0x80483BF: really (in /foo/a.out)
      0x80483BF: really (in ???)
      0x80483BF: ??? (in /foo/a.out)
      0x80483BF: ??? (a.c:20)
      0x80483BF: ???

    Stack traces produced when --xml=yes is specified are different
    and unchanged.


* Helgrind and Ptrcheck now support XML output, so they can be used
  from GUI tools.  Also, the XML output mechanism has been
  overhauled.

  - The XML format has been overhauled and generalised, so it is more
    suitable for error reporting tools in general.  The Memcheck
    specific aspects of it have been removed.  The new format, which
    is an evolution of the old format, is described in
    docs/internals/xml-output-protocol4.txt.

  - Memcheck has been updated to use the new format.

  - Helgrind and Ptrcheck are now able to emit output in this format.

  - The XML output mechanism has been overhauled.  XML is now output
    to its own file descriptor, which means that:

    * Valgrind can output text and XML independently.

    * The longstanding problem of XML output being corrupted by 
      unexpected un-tagged text messages  is solved.

    As before, the destination for text output is specified using
    --log-file=, --log-fd= or --log-socket=.

    As before, XML output for a tool is enabled using --xml=yes.

    Because there's a new XML output channel, the XML output
    destination is now specified by --xml-file=, --xml-fd= or
    --xml-socket=.

    Initial feedback has shown this causes some confusion.  To
    clarify, the two envisaged usage scenarios are:

    (1) Normal text output.  In this case, do not specify --xml=yes
        nor any of --xml-file=, --xml-fd= or --xml-socket=.

    (2) XML output.  In this case, specify --xml=yes, and one of
        --xml-file=, --xml-fd= or --xml-socket= to select the XML
        destination, one of --log-file=, --log-fd= or --log-socket=
        to select the destination for any remaining text messages,
        and, importantly, -q.

        -q makes Valgrind completely silent on the text channel,
        except in the case of critical failures, such as Valgrind
        itself segfaulting, or failing to read debugging information.
        Hence, in this scenario, it suffices to check whether or not
        any output appeared on the text channel.  If yes, then it is
        likely to be a critical error which should be brought to the
        attention of the user.  If no (the text channel produced no
        output) then it can be assumed that the run was successful.

        This allows GUIs to make the critical distinction they need to
        make (did the run fail or not?) without having to search or
        filter the text output channel in any way.

    It is also recommended to use --child-silent-after-fork=yes in
    scenario (2).


* Improvements and changes in Helgrind:

  - XML output, as described above

  - Checks for consistent association between pthread condition
    variables and their associated mutexes are now performed.

  - pthread_spinlock functions are supported.

  - Modest performance improvements.

  - Initial (skeletal) support for describing the behaviour of
    non-POSIX synchronisation objects through ThreadSanitizer
    compatible ANNOTATE_* macros.

  - More controllable tradeoffs between performance and the level of
    detail of "previous" accesses in a race.  There are now three
    settings:

    * --history-level=full.  This is the default, and was also the
      default in 3.4.x.  It shows both stacks involved in a race, but
      requires a lot of memory and can be very slow in programs that
      do many inter-thread synchronisation events.

    * --history-level=none.  This only shows the later stack involved
      in a race.  This can be much faster than --history-level=full,
      but makes it much more difficult to find the other access
      involved in the race.

    The new intermediate setting is

    * --history-level=approx

      For the earlier (other) access, two stacks are presented.  The
      earlier access is guaranteed to be somewhere in between the two
      program points denoted by those stacks.  This is not as useful
      as showing the exact stack for the previous access (as per
      --history-level=full), but it is better than nothing, and it's
      almost as fast as --history-level=none.


* New features and improvements in DRD:

  - The error messages printed by DRD are now easier to interpret.
    Instead of using two different numbers to identify each thread
    (Valgrind thread ID and DRD thread ID), DRD does now identify
    threads via a single number (the DRD thread ID).  Furthermore
    "first observed at" information is now printed for all error
    messages related to synchronization objects.

  - Added support for named semaphores (sem_open() and sem_close()).

  - Race conditions between pthread_barrier_wait() and
    pthread_barrier_destroy() calls are now reported.

  - Added support for custom allocators through the macros
    VALGRIND_MALLOCLIKE_BLOCK() VALGRIND_FREELIKE_BLOCK() (defined in
    in <valgrind/valgrind.h>). An alternative for these two macros is
    the new client request VG_USERREQ__DRD_CLEAN_MEMORY (defined in
    <valgrind/drd.h>).

  - Added support for annotating non-POSIX synchronization objects
    through several new ANNOTATE_*() macros.

  - OpenMP: added support for the OpenMP runtime (libgomp) included
    with gcc versions 4.3.0 and 4.4.0.

  - Faster operation.

  - Added two new command-line options (--first-race-only and
    --segment-merging-interval).


* Genuinely atomic support for x86/amd64/ppc atomic instructions

  Valgrind will now preserve (memory-access) atomicity of LOCK-
  prefixed x86/amd64 instructions, and any others implying a global
  bus lock.  Ditto for PowerPC l{w,d}arx/st{w,d}cx. instructions.

  This means that Valgrinded processes will "play nicely" in
  situations where communication with other processes, or the kernel,
  is done through shared memory and coordinated with such atomic
  instructions.  Prior to this change, such arrangements usually
  resulted in hangs, races or other synchronisation failures, because
  Valgrind did not honour atomicity of such instructions.


* A new experimental tool, BBV, has been added.  BBV generates basic
  block vectors for use with the SimPoint analysis tool, which allows
  a program's overall behaviour to be approximated by running only a
  fraction of it.  This is useful for computer architecture
  researchers.  You can run BBV by specifying --tool=exp-bbv (the
  "exp-" prefix is short for "experimental").  BBV was written by
  Vince Weaver.


* Modestly improved support for running Windows applications under
  Wine.  In particular, initial support for reading Windows .PDB debug
  information has been added.


* A new Memcheck client request VALGRIND_COUNT_LEAK_BLOCKS has been
  added.  It is similar to VALGRIND_COUNT_LEAKS but counts blocks
  instead of bytes.


* The Valgrind client requests VALGRIND_PRINTF and
  VALGRIND_PRINTF_BACKTRACE have been changed slightly.  Previously,
  the string was always printed immediately on its own line.  Now, the
  string will be added to a buffer but not printed until a newline is
  encountered, or other Valgrind output is printed (note that for
  VALGRIND_PRINTF_BACKTRACE, the back-trace itself is considered
  "other Valgrind output").  This allows you to use multiple
  VALGRIND_PRINTF calls to build up a single output line, and also to
  print multiple output lines with a single request (by embedding
  multiple newlines in the string).


* The graphs drawn by Massif's ms_print program have changed slightly:

  - The half-height chars '.' and ',' are no longer drawn, because
    they are confusing.  The --y option can be used if the default
    y-resolution is not high enough.

  - Horizontal lines are now drawn after the top of a snapshot if
    there is a gap until the next snapshot.  This makes it clear that
    the memory usage has not dropped to zero between snapshots.


* Something that happened in 3.4.0, but wasn't clearly announced: the
  option --read-var-info=yes can be used by some tools (Memcheck,
  Helgrind and DRD).  When enabled, it causes Valgrind to read DWARF3
  variable type and location information.  This makes those tools
  start up more slowly and increases memory consumption, but
  descriptions of data addresses in error messages become more
  detailed.


* exp-Omega, an experimental instantaneous leak-detecting tool, was
  disabled in 3.4.0 due to a lack of interest and maintenance,
  although the source code was still in the distribution.  The source
  code has now been removed from the distribution.  For anyone
  interested, the removal occurred in SVN revision r10247.


* Some changes have been made to the build system.

  - VEX/ is now integrated properly into the build system.  This means
    that dependency tracking within VEX/ now works properly, "make
    install" will work without requiring "make" before it, and
    parallel builds (ie. 'make -j') now work (previously a
    .NOTPARALLEL directive was used to serialize builds, ie. 'make -j'
    was effectively ignored).

  - The --with-vex configure option has been removed.  It was of
    little use and removing it simplified the build system.

  - The location of some install files has changed.  This should not
    affect most users.  Those who might be affected:

    * For people who use Valgrind with MPI programs, the installed
      libmpiwrap.so library has moved from
      $(INSTALL)/<platform>/libmpiwrap.so to
      $(INSTALL)/libmpiwrap-<platform>.so.

    * For people who distribute standalone Valgrind tools, the
      installed libraries such as $(INSTALL)/<platform>/libcoregrind.a
      have moved to $(INSTALL)/libcoregrind-<platform>.a.

    These changes simplify the build system.

  - Previously, all the distributed suppression (*.supp) files were
    installed.  Now, only default.supp is installed.  This should not
    affect users as the other installed suppression files were not
    read; the fact that they were installed was a mistake.


* KNOWN LIMITATIONS:

  - Memcheck is unusable with the Intel compiler suite version 11.1,
    when it generates code for SSE2-and-above capable targets.  This
    is because of icc's use of highly optimised inlined strlen
    implementations.  It causes Memcheck to report huge numbers of
    false errors even in simple programs.  Helgrind and DRD may also
    have problems.

    Versions 11.0 and earlier may be OK, but this has not been
    properly tested.


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 (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
mailing the developers (or mailing lists) directly -- bugs that are
not entered into bugzilla tend to get forgotten about or ignored.

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 below.

84303   How about a LockCheck tool? 
91633   dereference of null ptr in vgPlain_st_basetype 
97452   Valgrind doesn't report any pthreads problems 
100628  leak-check gets assertion failure when using 
        VALGRIND_MALLOCLIKE_BLOCK on malloc()ed memory 
108528  NPTL pthread cleanup handlers not called 
110126  Valgrind 2.4.1 configure.in tramples CFLAGS 
110128  mallinfo is not implemented... 
110770  VEX: Generated files not always updated when making valgrind
111102  Memcheck: problems with large (memory footprint) applications 
115673  Vex's decoder should never assert 
117564  False positive: Syscall param clone(child_tidptr) contains
        uninitialised byte(s) 
119404  executing ssh from inside valgrind fails 
133679  Callgrind does not write path names to sources with dwarf debug
        info
135847  configure.in problem with non gnu compilers (and possible fix) 
136154  threads.c:273 (vgCallgrind_post_signal): Assertion
        '*(vgCallgrind_current_fn_stack.top) == 0' failed. 
136230  memcheck reports "possibly lost", should be "still reachable" 
137073  NULL arg to MALLOCLIKE_BLOCK causes crash 
137904  Valgrind reports a memory leak when using POSIX threads,
        while it shouldn't 
139076  valgrind VT_GETSTATE error 
142228  complaint of elf_dynamic_do_rela in trivial usage 
145347  spurious warning with USBDEVFS_REAPURB 
148441  (wine) can't find memory leak in Wine, win32 binary 
        executable file.
148742  Leak-check fails assert on exit 
149878  add (proper) check for calloc integer overflow 
150606  Call graph is broken when using callgrind control 
152393  leak errors produce an exit code of 0. I need some way to 
        cause leak errors to result in a nonzero exit code. 
157154  documentation (leak-resolution doc speaks about num-callers
        def=4) + what is a loss record
159501  incorrect handling of ALSA ioctls 
162020  Valgrinding an empty/zero-byte file crashes valgrind 
162482  ppc: Valgrind crashes while reading stabs information 
162718  x86: avoid segment selector 0 in sys_set_thread_area() 
163253  (wine) canonicaliseSymtab forgot some fields in DiSym 
163560  VEX/test_main.c is missing from valgrind-3.3.1 
164353  malloc_usable_size() doesn't return a usable size 
165468  Inconsistent formatting in memcheck manual -- please fix 
169505  main.c:286 (endOfInstr):
        Assertion 'ii->cost_offset == *cost_offset' failed 
177206  Generate default.supp during compile instead of configure
177209  Configure valt_load_address based on arch+os 
177305  eventfd / syscall 323 patch lost
179731  Tests fail to build because of inlining of non-local asm labels
181394  helgrind: libhb_core.c:3762 (msm_write): Assertion 
        'ordxx == POrd_EQ || ordxx == POrd_LT' failed. 
181594  Bogus warning for empty text segment 
181707  dwarf doesn't require enumerations to have name 
185038  exp-ptrcheck: "unhandled syscall: 285" (fallocate) on x86_64 
185050  exp-ptrcheck: sg_main.c:727 (add_block_to_GlobalTree):
        Assertion '!already_present' failed.
185359  exp-ptrcheck: unhandled syscall getresuid()
185794  "WARNING: unhandled syscall: 285" (fallocate) on x86_64
185816  Valgrind is unable to handle debug info for files with split
        debug info that are prelinked afterwards 
185980  [darwin] unhandled syscall: sem_open 
186238  bbToIR_AMD64: disInstr miscalculated next %rip
186507  exp-ptrcheck unhandled syscalls prctl, etc. 
186790  Suppression pattern used for leaks are not reported 
186796  Symbols with length>200 in suppression files are ignored 
187048  drd: mutex PTHREAD_PROCESS_SHARED attribute missinterpretation
187416  exp-ptrcheck: support for __NR_{setregid,setreuid,setresuid}
188038  helgrind: hg_main.c:926: mk_SHVAL_fail: the 'impossible' happened
188046  bashisms in the configure script
188127  amd64->IR: unhandled instruction bytes: 0xF0 0xF 0xB0 0xA
188161  memcheck: --track-origins=yes asserts "mc_machine.c:672
        (get_otrack_shadow_offset_wrk): the 'impossible' happened."
188248  helgrind: pthread_cleanup_push, pthread_rwlock_unlock, 
        assertion fail "!lock->heldBy" 
188427  Add support for epoll_create1 (with patch) 
188530  Support for SIOCGSTAMPNS
188560  Include valgrind.spec in the tarball
188572  Valgrind on Mac should suppress setenv() mem leak 
189054  Valgrind fails to build because of duplicate non-local asm labels 
189737  vex amd64->IR: unhandled instruction bytes: 0xAC
189762  epoll_create syscall not handled (--tool=exp-ptrcheck)
189763  drd assertion failure: s_threadinfo[tid].is_recording 
190219  unhandled syscall: 328 (x86-linux)
190391  dup of 181394; see above
190429  Valgrind reports lots of errors in ld.so with x86_64 2.9.90 glibc 
190820  No debug information on powerpc-linux
191095  PATCH: Improve usbdevfs ioctl handling 
191182  memcheck: VALGRIND_LEAK_CHECK quadratic when big nr of chunks
        or big nr of errors
191189  --xml=yes should obey --gen-suppressions=all 
191192  syslog() needs a suppression on macosx 
191271  DARWIN: WARNING: unhandled syscall: 33554697 a.k.a.: 265 
191761  getrlimit on MacOSX 
191992  multiple --fn-skip only works sometimes; dependent on order 
192634  V. reports "aspacem sync_check_mapping_callback: 
        segment mismatch" on Darwin
192954  __extension__ missing on 2 client requests 
194429  Crash at start-up with glibc-2.10.1 and linux-2.6.29 
194474  "INSTALL" file has different build instructions than "README"
194671  Unhandled syscall (sem_wait?) from mac valgrind 
195069  memcheck: reports leak (memory still reachable) for 
        printf("%d', x) 
195169  drd: (vgDrd_barrier_post_wait):
        Assertion 'r->sg[p->post_iteration]' failed. 
195268  valgrind --log-file doesn't accept ~/...
195838  VEX abort: LibVEX_N_SPILL_BYTES too small for CPUID boilerplate 
195860  WARNING: unhandled syscall: unix:223 
196528  need a error suppression for pthread_rwlock_init under os x? 
197227  Support aio_* syscalls on Darwin
197456  valgrind should reject --suppressions=(directory) 
197512  DWARF2 CFI reader: unhandled CFI instruction 0:10 
197591  unhandled syscall 27 (mincore) 
197793  Merge DCAS branch to the trunk == 85756, 142103
197794  Avoid duplicate filenames in Vex 
197898  make check fails on current SVN 
197901  make check fails also under exp-ptrcheck in current SVN 
197929  Make --leak-resolution=high the default 
197930  Reduce spacing between leak reports 
197933  Print command line of client at start-up, and shorten preamble 
197966  unhandled syscall 205 (x86-linux, --tool=exp-ptrcheck)
198395  add BBV to the distribution as an experimental tool 
198624  Missing syscalls on Darwin: 82, 167, 281, 347 
198649  callgrind_annotate doesn't cumulate counters 
199338  callgrind_annotate sorting/thresholds are broken for all but Ir 
199977  Valgrind complains about an unrecognized instruction in the
        atomic_incs test program
200029  valgrind isn't able to read Fedora 12 debuginfo 
200760  darwin unhandled syscall: unix:284 
200827  DRD doesn't work on Mac OS X 
200990  VG_(read_millisecond_timer)() does not work correctly 
201016  Valgrind does not support pthread_kill() on Mac OS 
201169  Document --read-var-info
201323  Pre-3.5.0 performance sanity checking 
201384  Review user manual for the 3.5.0 release 
201585  mfpvr not implemented on ppc 
201708  tests failing because x86 direction flag is left set 
201757  Valgrind doesn't handle any recent sys_futex additions 
204377  64-bit valgrind can not start a shell script
        (with #!/path/to/shell) if the shell is a 32-bit executable
n-i-bz  drd: fixed assertion failure triggered by mutex reinitialization.
n-i-bz  drd: fixed a bug that caused incorrect messages to be printed
        about memory allocation events with memory access tracing enabled
n-i-bz  drd: fixed a memory leak triggered by vector clock deallocation

(3.5.0: 19 Aug 2009, vex r1913, valgrind r10846).



Release 3.4.1 (28 February 2009)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.4.1 is a bug-fix release that fixes some regressions and assertion
failures in debug info reading in 3.4.0, most notably incorrect stack
traces on amd64-linux on older (glibc-2.3 based) systems. Various
other debug info problems are also fixed.  A number of bugs in the
exp-ptrcheck tool introduced in 3.4.0 have been fixed.

In view of the fact that 3.4.0 contains user-visible regressions
relative to 3.3.x, upgrading to 3.4.1 is recommended.  Packagers are
encouraged to ship 3.4.1 in preference to 3.4.0.

The fixed bugs are as follows.  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
(http://bugs.kde.org/enter_valgrind_bug.cgi) rather than mailing the
developers (or mailing lists) directly -- bugs that are not entered
into bugzilla tend to get forgotten about or ignored.

n-i-bz  Fix various bugs reading icc-11 generated debug info
n-i-bz  Fix various bugs reading gcc-4.4 generated debug info
n-i-bz  Preliminary support for glibc-2.10 / Fedora 11
n-i-bz  Cachegrind and Callgrind: handle non-power-of-two cache sizes,
        so as to support (eg) 24k Atom D1 and Core2 with 3/6/12MB L2.
179618  exp-ptrcheck crashed / exit prematurely
179624  helgrind: false positive races with pthread_create and
        recv/open/close/read
134207  pkg-config output contains @VG_PLATFORM@
176926  floating point exception at valgrind startup with PPC 440EPX
181594  Bogus warning for empty text segment
173751  amd64->IR: 0x48 0xF 0x6F 0x45 (even more redundant rex prefixes)
181707  Dwarf3 doesn't require enumerations to have name
185038  exp-ptrcheck: "unhandled syscall: 285" (fallocate) on x86_64
185050  exp-ptrcheck: sg_main.c:727 (add_block_to_GlobalTree):
        Assertion '!already_present' failed.
185359  exp-ptrcheck unhandled syscall getresuid()

(3.4.1.RC1:  24 Feb 2008, vex r1884, valgrind r9253).
(3.4.1:      28 Feb 2008, vex r1884, valgrind r9293).



Release 3.4.0 (2 January 2009)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.4.0 is a feature release with many significant improvements and the
usual collection of bug fixes.  This release supports X86/Linux,
AMD64/Linux, PPC32/Linux and PPC64/Linux.  Support for recent distros
(using gcc 4.4, glibc 2.8 and 2.9) has been added.

3.4.0 brings some significant tool improvements.  Memcheck can now
report the origin of uninitialised values, the thread checkers
Helgrind and DRD are much improved, and we have a new experimental
tool, exp-Ptrcheck, which is able to detect overruns of stack and
global arrays.  In detail:

* Memcheck is now able to track the origin of uninitialised values.
  When it reports an uninitialised value error, it will try to show
  the origin of the value, as either a heap or stack allocation.
  Origin tracking is expensive and so is not enabled by default.  To
  use it, specify --track-origins=yes.  Memcheck's speed will be
  essentially halved, and memory usage will be significantly
  increased.  Nevertheless it can drastically reduce the effort
  required to identify the root cause of uninitialised value errors,
  and so is often a programmer productivity win, despite running more
  slowly.

* A version (1.4.0) of the Valkyrie GUI, that works with Memcheck in
  3.4.0, will be released shortly.

* Helgrind's race detection algorithm has been completely redesigned
  and reimplemented, to address usability and scalability concerns:

  - The new algorithm has a lower false-error rate: it is much less
    likely to report races that do not really exist.

  - Helgrind will display full call stacks for both accesses involved
    in a race.  This makes it easier to identify the root causes of
    races.

  - Limitations on the size of program that can run have been removed.

  - Performance has been modestly improved, although that is very
    workload-dependent.

  - Direct support for Qt4 threading has been added.

  - pthread_barriers are now directly supported.

  - Helgrind works well on all supported Linux targets.

* The DRD thread debugging tool has seen major improvements:

  - Greatly improved performance and significantly reduced memory
    usage.

  - Support for several major threading libraries (Boost.Thread, Qt4,
    glib, OpenMP) has been added.

  - Support for atomic instructions, POSIX semaphores, barriers and
    reader-writer locks has been added.

  - Works now on PowerPC CPUs too.

  - Added support for printing thread stack usage at thread exit time.

  - Added support for debugging lock contention.

  - Added a manual for Drd.

* A new experimental tool, exp-Ptrcheck, has been added.  Ptrcheck
  checks for misuses of pointers.  In that sense it is a bit like
  Memcheck.  However, Ptrcheck can do things Memcheck can't: it can
  detect overruns of stack and global arrays, it can detect
  arbitrarily far out-of-bounds accesses to heap blocks, and it can
  detect accesses heap blocks that have been freed a very long time
  ago (millions of blocks in the past).

  Ptrcheck currently works only on x86-linux and amd64-linux.  To use
  it, use --tool=exp-ptrcheck.  A simple manual is provided, as part
  of the main Valgrind documentation.  As this is an experimental
  tool, we would be particularly interested in hearing about your
  experiences with it.

* exp-Omega, an experimental instantaneous leak-detecting tool, is no
  longer built by default, although the code remains in the repository
  and the tarball.  This is due to three factors: a perceived lack of
  users, a lack of maintenance, and concerns that it may not be
  possible to achieve reliable operation using the existing design.

* As usual, support for the latest Linux distros and toolchain
  components has been added.  It should work well on Fedora Core 10,
  OpenSUSE 11.1 and Ubuntu 8.10.  gcc-4.4 (in its current pre-release
  state) is supported, as is glibc-2.9.  The C++ demangler has been
  updated so as to work well with C++ compiled by even the most recent
  g++'s.

* You can now use frame-level wildcards in suppressions.  This was a
  frequently-requested enhancement.  A line "..." in a suppression now
  matches zero or more frames.  This makes it easier to write
  suppressions which are precise yet insensitive to changes in
  inlining behaviour.

* 3.4.0 adds support on x86/amd64 for the SSSE3 instruction set.

* Very basic support for IBM Power6 has been added (64-bit processes only).

* Valgrind is now cross-compilable.  For example, it is possible to
  cross compile Valgrind on an x86/amd64-linux host, so that it runs
  on a ppc32/64-linux target.

* You can set the main thread's stack size at startup using the
  new --main-stacksize= flag (subject of course to ulimit settings).
  This is useful for running apps that need a lot of stack space.

* The limitation that you can't use --trace-children=yes together
  with --db-attach=yes has been removed.

* The following bugs have been fixed.  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 (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
  mailing the developers (or mailing lists) directly.

  n-i-bz  Make return types for some client requests 64-bit clean
  n-i-bz  glibc 2.9 support
  n-i-bz  ignore unsafe .valgrindrc's (CVE-2008-4865)
  n-i-bz  MPI_Init(0,0) is valid but libmpiwrap.c segfaults
  n-i-bz  Building in an env without gdb gives bogus gdb attach
  92456   Tracing the origin of uninitialised memory
  106497  Valgrind does not demangle some C++ template symbols
  162222  ==106497
  151612  Suppression with "..." (frame-level wildcards in .supp files)
  156404  Unable to start oocalc under memcheck on openSUSE 10.3 (64-bit)
  159285  unhandled syscall:25 (stime, on x86-linux)
  159452  unhandled ioctl 0x8B01 on "valgrind iwconfig"
  160954  ppc build of valgrind crashes with illegal instruction (isel)
  160956  mallinfo implementation, w/ patch
  162092  Valgrind fails to start gnome-system-monitor
  162819  malloc_free_fill test doesn't pass on glibc2.8 x86
  163794  assertion failure with "--track-origins=yes"
  163933  sigcontext.err and .trapno must be set together
  163955  remove constraint !(--db-attach=yes && --trace-children=yes)
  164476  Missing kernel module loading system calls
  164669  SVN regression: mmap() drops posix file locks
  166581  Callgrind output corruption when program forks
  167288  Patch file for missing system calls on Cell BE
  168943  unsupported scas instruction pentium
  171645  Unrecognised instruction (MOVSD, non-binutils encoding)
  172417  x86->IR: 0x82 ...
  172563  amd64->IR: 0xD9 0xF5  -  fprem1
  173099  .lds linker script generation error
  173177  [x86_64] syscalls: 125/126/179 (capget/capset/quotactl)
  173751  amd64->IR: 0x48 0xF 0x6F 0x45 (even more redundant prefixes)
  174532  == 173751
  174908  --log-file value not expanded correctly for core file
  175044  Add lookup_dcookie for amd64
  175150  x86->IR: 0xF2 0xF 0x11 0xC1 (movss non-binutils encoding)

Developer-visible changes:

* Valgrind's debug-info reading machinery has been majorly overhauled.
  It can now correctly establish the addresses for ELF data symbols,
  which is something that has never worked properly before now.

  Also, Valgrind can now read DWARF3 type and location information for
  stack and global variables.  This makes it possible to use the
  framework to build tools that rely on knowing the type and locations
  of stack and global variables, for example exp-Ptrcheck.

  Reading of such information is disabled by default, because most
  tools don't need it, and because it is expensive in space and time.
  However, you can force Valgrind to read it, using the
  --read-var-info=yes flag.  Memcheck, Helgrind and DRD are able to
  make use of such information, if present, to provide source-level
  descriptions of data addresses in the error messages they create.

(3.4.0.RC1:  24 Dec 2008, vex r1878, valgrind r8882).
(3.4.0:       3 Jan 2009, vex r1878, valgrind r8899).



Release 3.3.1 (4 June 2008)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.3.1 fixes a bunch of bugs in 3.3.0, adds support for glibc-2.8 based
systems (openSUSE 11, Fedora Core 9), improves the existing glibc-2.7
support, and adds support for the SSSE3 (Core 2) instruction set.

3.3.1 will likely be the last release that supports some very old
systems.  In particular, the next major release, 3.4.0, will drop
support for the old LinuxThreads threading library, and for gcc
versions prior to 3.0.

The fixed bugs are as follows.  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
(http://bugs.kde.org/enter_valgrind_bug.cgi) rather than mailing the
developers (or mailing lists) directly -- bugs that are not entered
into bugzilla tend to get forgotten about or ignored.

n-i-bz  Massif segfaults at exit
n-i-bz  Memcheck asserts on Altivec code
n-i-bz  fix sizeof bug in Helgrind
n-i-bz  check fd on sys_llseek
n-i-bz  update syscall lists to kernel 2.6.23.1
n-i-bz  support sys_sync_file_range
n-i-bz  handle sys_sysinfo, sys_getresuid, sys_getresgid on ppc64-linux
n-i-bz  intercept memcpy in 64-bit ld.so's
n-i-bz  Fix wrappers for sys_{futimesat,utimensat}
n-i-bz  Minor false-error avoidance fixes for Memcheck
n-i-bz  libmpiwrap.c: add a wrapper for MPI_Waitany
n-i-bz  helgrind support for glibc-2.8
n-i-bz  partial fix for mc_leakcheck.c:698 assert:
        'lc_shadows[i]->data + lc_shadows[i] ...
n-i-bz  Massif/Cachegrind output corruption when programs fork
n-i-bz  register allocator fix: handle spill stores correctly
n-i-bz  add support for PA6T PowerPC CPUs
126389  vex x86->IR: 0xF 0xAE (FXRSTOR)
158525  ==126389
152818  vex x86->IR: 0xF3 0xAC (repz lodsb) 
153196  vex x86->IR: 0xF2 0xA6 (repnz cmpsb) 
155011  vex x86->IR: 0xCF (iret)
155091  Warning [...] unhandled DW_OP_ opcode 0x23
156960  ==155901
155528  support Core2/SSSE3 insns on x86/amd64
155929  ms_print fails on massif outputs containing long lines
157665  valgrind fails on shmdt(0) after shmat to 0
157748  support x86 PUSHFW/POPFW
158212  helgrind: handle pthread_rwlock_try{rd,wr}lock.
158425  sys_poll incorrectly emulated when RES==0
158744  vex amd64->IR: 0xF0 0x41 0xF 0xC0 (xaddb)
160907  Support for a couple of recent Linux syscalls
161285  Patch -- support for eventfd() syscall
161378  illegal opcode in debug libm (FUCOMPP)
160136  ==161378
161487  number of suppressions files is limited to 10
162386  ms_print typo in milliseconds time unit for massif
161036  exp-drd: client allocated memory was never freed
162663  signalfd_wrapper fails on 64bit linux

(3.3.1.RC1:  2 June 2008, vex r1854, valgrind r8169).
(3.3.1:      4 June 2008, vex r1854, valgrind r8180).



Release 3.3.0 (7 December 2007)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.3.0 is a feature release with many significant improvements and the
usual collection of bug fixes.  This release supports X86/Linux,
AMD64/Linux, PPC32/Linux and PPC64/Linux.  Support for recent distros
(using gcc 4.3, glibc 2.6 and 2.7) has been added.

The main excitement in 3.3.0 is new and improved tools.  Helgrind
works again, Massif has been completely overhauled and much improved,
Cachegrind now does branch-misprediction profiling, and a new category
of experimental tools has been created, containing two new tools:
Omega and DRD.  There are many other smaller improvements.  In detail:

- Helgrind has been completely overhauled and works for the first time
  since Valgrind 2.2.0.  Supported functionality is: detection of
  misuses of the POSIX PThreads API, detection of potential deadlocks
  resulting from cyclic lock dependencies, and detection of data
  races.  Compared to the 2.2.0 Helgrind, the race detection algorithm
  has some significant improvements aimed at reducing the false error
  rate.  Handling of various kinds of corner cases has been improved.
  Efforts have been made to make the error messages easier to
  understand.  Extensive documentation is provided.

- Massif has been completely overhauled.  Instead of measuring
  space-time usage -- which wasn't always useful and many people found
  confusing -- it now measures space usage at various points in the
  execution, including the point of peak memory allocation.  Its
  output format has also changed: instead of producing PostScript
  graphs and HTML text, it produces a single text output (via the new
  'ms_print' script) that contains both a graph and the old textual
  information, but in a more compact and readable form.  Finally, the
  new version should be more reliable than the old one, as it has been
  tested more thoroughly.

- Cachegrind has been extended to do branch-misprediction profiling.
  Both conditional and indirect branches are profiled.  The default
  behaviour of Cachegrind is unchanged.  To use the new functionality,
  give the option --branch-sim=yes.

- A new category of "experimental tools" has been created.  Such tools
  may not work as well as the standard tools, but are included because
  some people will find them useful, and because exposure to a wider
  user group provides tool authors with more end-user feedback.  These
  tools have a "exp-" prefix attached to their names to indicate their
  experimental nature.  Currently there are two experimental tools:

  * exp-Omega: an instantaneous leak detector.  See
    exp-omega/docs/omega_introduction.txt.

  * exp-DRD: a data race detector based on the happens-before
    relation.  See exp-drd/docs/README.txt.

- Scalability improvements for very large programs, particularly those
  which have a million or more malloc'd blocks in use at once.  These
  improvements mostly affect Memcheck.  Memcheck is also up to 10%
  faster for all programs, with x86-linux seeing the largest
  improvement.

- Works well on the latest Linux distros.  Has been tested on Fedora
  Core 8 (x86, amd64, ppc32, ppc64) and openSUSE 10.3.  glibc 2.6 and
  2.7 are supported.  gcc-4.3 (in its current pre-release state) is
  supported.  At the same time, 3.3.0 retains support for older
  distros.

- The documentation has been modestly reorganised with the aim of
  making it easier to find information on common-usage scenarios.
  Some advanced material has been moved into a new chapter in the main
  manual, so as to unclutter the main flow, and other tidying up has
  been done.

- There is experimental support for AIX 5.3, both 32-bit and 64-bit
  processes.  You need to be running a 64-bit kernel to use Valgrind
  on a 64-bit executable.

- There have been some changes to command line options, which may
  affect you:

  * --log-file-exactly and 
    --log-file-qualifier options have been removed.

    To make up for this --log-file option has been made more powerful.
    It now accepts a %p format specifier, which is replaced with the
    process ID, and a %q{FOO} format specifier, which is replaced with
    the contents of the environment variable FOO.

  * --child-silent-after-fork=yes|no [no]

    Causes Valgrind to not show any debugging or logging output for
    the child process resulting from a fork() call.  This can make the
    output less confusing (although more misleading) when dealing with
    processes that create children.

  * --cachegrind-out-file, --callgrind-out-file and --massif-out-file

    These control the names of the output files produced by
    Cachegrind, Callgrind and Massif.  They accept the same %p and %q
    format specifiers that --log-file accepts.  --callgrind-out-file
    replaces Callgrind's old --base option.

  * Cachegrind's 'cg_annotate' script no longer uses the --<pid>
    option to specify the output file.  Instead, the first non-option
    argument is taken to be the name of the output file, and any
    subsequent non-option arguments are taken to be the names of
    source files to be annotated.

  * Cachegrind and Callgrind now use directory names where possible in
    their output files.  This means that the -I option to
    'cg_annotate' and 'callgrind_annotate' should not be needed in
    most cases.  It also means they can correctly handle the case
    where two source files in different directories have the same
    name.

- Memcheck offers a new suppression kind: "Jump".  This is for
  suppressing jump-to-invalid-address errors.  Previously you had to
  use an "Addr1" suppression, which didn't make much sense.

- Memcheck has new flags --malloc-fill=<hexnum> and
  --free-fill=<hexnum> which free malloc'd / free'd areas with the
  specified byte.  This can help shake out obscure memory corruption
  problems.  The definedness and addressability of these areas is
  unchanged -- only the contents are affected.

- The behaviour of Memcheck's client requests VALGRIND_GET_VBITS and
  VALGRIND_SET_VBITS have changed slightly.  They no longer issue
  addressability errors -- if either array is partially unaddressable,
  they just return 3 (as before).  Also, SET_VBITS doesn't report
  definedness errors if any of the V bits are undefined.

- The following Memcheck client requests have been removed:
    VALGRIND_MAKE_NOACCESS
    VALGRIND_MAKE_WRITABLE
    VALGRIND_MAKE_READABLE
    VALGRIND_CHECK_WRITABLE
    VALGRIND_CHECK_READABLE
    VALGRIND_CHECK_DEFINED
  They were deprecated in 3.2.0, when equivalent but better-named client
  requests were added.  See the 3.2.0 release notes for more details.

- The behaviour of the tool Lackey has changed slightly.  First, the output
  from --trace-mem has been made more compact, to reduce the size of the
  traces.  Second, a new option --trace-superblocks has been added, which
  shows the addresses of superblocks (code blocks) as they are executed.

- The following bugs have been fixed.  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 (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
  mailing the developers (or mailing lists) directly.

  n-i-bz  x86_linux_REDIR_FOR_index() broken
  n-i-bz  guest-amd64/toIR.c:2512 (dis_op2_E_G): Assertion `0' failed.
  n-i-bz  Support x86 INT insn (INT (0xCD) 0x40 - 0x43)
  n-i-bz  Add sys_utimensat system call for Linux x86 platform
   79844  Helgrind complains about race condition which does not exist
   82871  Massif output function names too short
   89061  Massif: ms_main.c:485 (get_XCon): Assertion `xpt->max_chi...'
   92615  Write output from Massif at crash
   95483  massif feature request: include peak allocation in report
  112163  MASSIF crashed with signal 7 (SIGBUS) after running 2 days
  119404  problems running setuid executables (partial fix)
  121629  add instruction-counting mode for timing
  127371  java vm giving unhandled instruction bytes: 0x26 0x2E 0x64 0x65
  129937  ==150380
  129576  Massif loses track of memory, incorrect graphs
  132132  massif --format=html output does not do html entity escaping
  132950  Heap alloc/usage summary
  133962  unhandled instruction bytes: 0xF2 0x4C 0xF 0x10
  134990  use -fno-stack-protector if possible
  136382  ==134990
  137396  I would really like helgrind to work again...
  137714  x86/amd64->IR: 0x66 0xF 0xF7 0xC6 (maskmovq, maskmovdq)
  141631  Massif: percentages don't add up correctly
  142706  massif numbers don't seem to add up
  143062  massif crashes on app exit with signal 8 SIGFPE
  144453  (get_XCon): Assertion 'xpt->max_children != 0' failed.
  145559  valgrind aborts when malloc_stats is called
  145609  valgrind aborts all runs with 'repeated section!'
  145622  --db-attach broken again on x86-64
  145837  ==149519
  145887  PPC32: getitimer() system call is not supported
  146252  ==150678
  146456  (update_XCon): Assertion 'xpt->curr_space >= -space_delta'...
  146701  ==134990
  146781  Adding support for private futexes
  147325  valgrind internal error on syscall (SYS_io_destroy, 0)
  147498  amd64->IR: 0xF0 0xF 0xB0 0xF (lock cmpxchg %cl,(%rdi))
  147545  Memcheck: mc_main.c:817 (get_sec_vbits8): Assertion 'n' failed.
  147628  SALC opcode 0xd6 unimplemented
  147825  crash on amd64-linux with gcc 4.2 and glibc 2.6 (CFI)
  148174  Incorrect type of freed_list_volume causes assertion [...]
  148447  x86_64 : new NOP codes: 66 66 66 66 2e 0f 1f
  149182  PPC Trap instructions not implemented in valgrind
  149504  Assertion hit on alloc_xpt->curr_space >= -space_delta
  149519  ppc32: V aborts with SIGSEGV on execution of a signal handler
  149892  ==137714
  150044  SEGV during stack deregister
  150380  dwarf/gcc interoperation (dwarf3 read problems)
  150408  ==148447
  150678  guest-amd64/toIR.c:3741 (dis_Grp5): Assertion `sz == 4' failed
  151209  V unable to execute programs for users with UID > 2^16
  151938  help on --db-command= misleading
  152022  subw $0x28, %%sp causes assertion failure in memcheck
  152357  inb and outb not recognized in 64-bit mode
  152501  vex x86->IR: 0x27 0x66 0x89 0x45 (daa) 
  152818  vex x86->IR: 0xF3 0xAC 0xFC 0x9C (rep lodsb)

Developer-visible changes:

- The names of some functions and types within the Vex IR have
  changed.  Run 'svn log -r1689 VEX/pub/libvex_ir.h' for full details.
  Any existing standalone tools will have to be updated to reflect
  these changes.  The new names should be clearer.  The file
  VEX/pub/libvex_ir.h is also much better commented.

- A number of new debugging command line options have been added.
  These are mostly of use for debugging the symbol table and line
  number readers:

  --trace-symtab-patt=<patt> limit debuginfo tracing to obj name <patt>
  --trace-cfi=no|yes        show call-frame-info details? [no]
  --debug-dump=syms         mimic /usr/bin/readelf --syms
  --debug-dump=line         mimic /usr/bin/readelf --debug-dump=line
  --debug-dump=frames       mimic /usr/bin/readelf --debug-dump=frames
  --sym-offsets=yes|no      show syms in form 'name+offset' ? [no]

- Internally, the code base has been further factorised and
  abstractified, particularly with respect to support for non-Linux
  OSs.

(3.3.0.RC1:  2 Dec 2007, vex r1803, valgrind r7268).
(3.3.0.RC2:  5 Dec 2007, vex r1804, valgrind r7282).
(3.3.0.RC3:  9 Dec 2007, vex r1804, valgrind r7288).
(3.3.0:     10 Dec 2007, vex r1804, valgrind r7290).



Release 3.2.3 (29 Jan 2007)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unfortunately 3.2.2 introduced a regression which can cause an
assertion failure ("vex: the `impossible' happened: eqIRConst") when
running obscure pieces of SSE code.  3.2.3 fixes this and adds one
more glibc-2.5 intercept.  In all other respects it is identical to
3.2.2.  Please do not use (or package) 3.2.2; instead use 3.2.3.

n-i-bz   vex: the `impossible' happened: eqIRConst
n-i-bz   Add an intercept for glibc-2.5 __stpcpy_chk

(3.2.3: 29 Jan 2007, vex r1732, valgrind r6560).


Release 3.2.2 (22 Jan 2007)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.2.2 fixes a bunch of bugs in 3.2.1, adds support for glibc-2.5 based
systems (openSUSE 10.2, Fedora Core 6), improves support for icc-9.X
compiled code, and brings modest performance improvements in some
areas, including amd64 floating point, powerpc support, and startup
responsiveness on all targets.

The fixed bugs are as follows.  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
(http://bugs.kde.org/enter_valgrind_bug.cgi) rather than mailing the
developers (or mailing lists) directly.

129390   ppc?->IR: some kind of VMX prefetch (dstt)
129968   amd64->IR: 0xF 0xAE 0x0 (fxsave)
134319   ==129968
133054   'make install' fails with syntax errors
118903   ==133054
132998   startup fails in when running on UML
134207   pkg-config output contains @VG_PLATFORM@
134727   valgrind exits with "Value too large for defined data type"
n-i-bz   ppc32/64: support mcrfs
n-i-bz   Cachegrind/Callgrind: Update cache parameter detection
135012   x86->IR: 0xD7 0x8A 0xE0 0xD0 (xlat)
125959   ==135012
126147   x86->IR: 0xF2 0xA5 0xF 0x77 (repne movsw)
136650   amd64->IR: 0xC2 0x8 0x0
135421   x86->IR: unhandled Grp5(R) case 6
n-i-bz   Improved documentation of the IR intermediate representation
n-i-bz   jcxz (x86) (users list, 8 Nov)
n-i-bz   ExeContext hashing fix
n-i-bz   fix CFI reading failures ("Dwarf CFI 0:24 0:32 0:48 0:7")
n-i-bz   fix Cachegrind/Callgrind simulation bug
n-i-bz   libmpiwrap.c: fix handling of MPI_LONG_DOUBLE
n-i-bz   make User errors suppressible
136844   corrupted malloc line when using --gen-suppressions=yes
138507   ==136844
n-i-bz   Speed up the JIT's register allocator
n-i-bz   Fix confusing leak-checker flag hints
n-i-bz   Support recent autoswamp versions
n-i-bz   ppc32/64 dispatcher speedups
n-i-bz   ppc64 front end rld/rlw improvements
n-i-bz   ppc64 back end imm64 improvements
136300   support 64K pages on ppc64-linux
139124   == 136300
n-i-bz   fix ppc insn set tests for gcc >= 4.1
137493   x86->IR: recent binutils no-ops
137714   x86->IR: 0x66 0xF 0xF7 0xC6 (maskmovdqu)
138424   "failed in UME with error 22" (produce a better error msg)
138856   ==138424
138627   Enhancement support for prctl ioctls
138896   Add support for usb ioctls
136059   ==138896
139050   ppc32->IR: mfspr 268/269 instructions not handled
n-i-bz   ppc32->IR: lvxl/stvxl
n-i-bz   glibc-2.5 support
n-i-bz   memcheck: provide replacement for mempcpy
n-i-bz   memcheck: replace bcmp in ld.so
n-i-bz   Use 'ifndef' in VEX's Makefile correctly
n-i-bz   Suppressions for MVL 4.0.1 on ppc32-linux
n-i-bz   libmpiwrap.c: Fixes for MPICH
n-i-bz   More robust handling of hinted client mmaps
139776   Invalid read in unaligned memcpy with Intel compiler v9
n-i-bz   Generate valid XML even for very long fn names
n-i-bz   Don't prompt about suppressions for unshown reachable leaks
139910   amd64 rcl is not supported
n-i-bz   DWARF CFI reader: handle DW_CFA_undefined
n-i-bz   DWARF CFI reader: handle icc9 generated CFI info better
n-i-bz   fix false uninit-value errs in icc9 generated FP code
n-i-bz   reduce extraneous frames in libmpiwrap.c
n-i-bz   support pselect6 on amd64-linux

(3.2.2: 22 Jan 2007, vex r1729, valgrind r6545).


Release 3.2.1 (16 Sept 2006)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.2.1 adds x86/amd64 support for all SSE3 instructions except monitor
and mwait, further reduces memcheck's false error rate on all
platforms, adds support for recent binutils (in OpenSUSE 10.2 and
Fedora Rawhide) and fixes a bunch of bugs in 3.2.0.  Some of the fixed
bugs were causing large programs to segfault with --tool=callgrind and
--tool=cachegrind, so an upgrade is recommended.

In view of the fact that any 3.3.0 release is unlikely to happen until
well into 1Q07, we intend to keep the 3.2.X line alive for a while
yet, and so we tentatively plan a 3.2.2 release sometime in December
06.

The fixed bugs are as follows.  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.

n-i-bz   Expanding brk() into last available page asserts
n-i-bz   ppc64-linux stack RZ fast-case snafu
n-i-bz   'c' in --gen-supps=yes doesn't work
n-i-bz   VG_N_SEGMENTS too low (users, 28 June)
n-i-bz   VG_N_SEGNAMES too low (Stu Robinson)
106852   x86->IR: fisttp (SSE3)
117172   FUTEX_WAKE does not use uaddr2
124039   Lacks support for VKI_[GP]IO_UNIMAP*
127521   amd64->IR: 0xF0 0x48 0xF 0xC7 (cmpxchg8b)
128917   amd64->IR: 0x66 0xF 0xF6 0xC4 (psadbw,SSE2)
129246   JJ: ppc32/ppc64 syscalls, w/ patch
129358   x86->IR: fisttpl (SSE3)
129866   cachegrind/callgrind causes executable to die
130020   Can't stat .so/.exe error while reading symbols
130388   Valgrind aborts when process calls malloc_trim()
130638   PATCH: ppc32 missing system calls
130785   amd64->IR: unhandled instruction "pushfq"
131481:  (HINT_NOP) vex x86->IR: 0xF 0x1F 0x0 0xF
131298   ==131481
132146   Programs with long sequences of bswap[l,q]s
132918   vex amd64->IR: 0xD9 0xF8 (fprem)
132813   Assertion at priv/guest-x86/toIR.c:652 fails
133051   'cfsi->len > 0 && cfsi->len < 2000000' failed
132722   valgrind header files are not standard C
n-i-bz   Livelocks entire machine (users list, Timothy Terriberry)
n-i-bz   Alex Bennee mmap problem (9 Aug)
n-i-bz   BartV: Don't print more lines of a stack-trace than were obtained.
n-i-bz   ppc32 SuSE 10.1 redir
n-i-bz   amd64 padding suppressions
n-i-bz   amd64 insn printing fix.
n-i-bz   ppc cmp reg,reg fix
n-i-bz   x86/amd64 iropt e/rflag reduction rules
n-i-bz   SuSE 10.1 (ppc32) minor fixes
133678   amd64->IR: 0x48 0xF 0xC5 0xC0 (pextrw?)
133694   aspacem assertion: aspacem_minAddr <= holeStart
n-i-bz   callgrind: fix warning about malformed creator line 
n-i-bz   callgrind: fix annotate script for data produced with 
         --dump-instr=yes
n-i-bz   callgrind: fix failed assertion when toggling 
         instrumentation mode
n-i-bz   callgrind: fix annotate script fix warnings with
         --collect-jumps=yes
n-i-bz   docs path hardwired (Dennis Lubert)

The following bugs were not fixed, due primarily to lack of developer
time, and also because bug reporters did not answer requests for
feedback in time for the release:

129390   ppc?->IR: some kind of VMX prefetch (dstt)
129968   amd64->IR: 0xF 0xAE 0x0 (fxsave)
133054   'make install' fails with syntax errors
n-i-bz   Signal race condition (users list, 13 June, Johannes Berg)
n-i-bz   Unrecognised instruction at address 0x70198EC2 (users list,
         19 July, Bennee)
132998   startup fails in when running on UML

The following bug was tentatively fixed on the mainline but the fix
was considered too risky to push into 3.2.X:

133154   crash when using client requests to register/deregister stack

(3.2.1: 16 Sept 2006, vex r1658, valgrind r6070).


Release 3.2.0 (7 June 2006)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.2.0 is a feature release with many significant improvements and the
usual collection of bug fixes.  This release supports X86/Linux,
AMD64/Linux, PPC32/Linux and PPC64/Linux.

Performance, especially of Memcheck, is improved, Addrcheck has been
removed, Callgrind has been added, PPC64/Linux support has been added,
Lackey has been improved, and MPI support has been added.  In detail:

- Memcheck has improved speed and reduced memory use.  Run times are
  typically reduced by 15-30%, averaging about 24% for SPEC CPU2000.
  The other tools have smaller but noticeable speed improvments.  We
  are interested to hear what improvements users get.

  Memcheck uses less memory due to the introduction of a compressed
  representation for shadow memory.  The space overhead has been
  reduced by a factor of up to four, depending on program behaviour.
  This means you should be able to run programs that use more memory
  than before without hitting problems.

- Addrcheck has been removed.  It has not worked since version 2.4.0,
  and the speed and memory improvements to Memcheck make it redundant.
  If you liked using Addrcheck because it didn't give undefined value
  errors, you can use the new Memcheck option --undef-value-errors=no
  to get the same behaviour.

- The number of undefined-value errors incorrectly reported by
  Memcheck has been reduced (such false reports were already very
  rare).  In particular, efforts have been made to ensure Memcheck
  works really well with gcc 4.0/4.1-generated code on X86/Linux and
  AMD64/Linux.

- Josef Weidendorfer's popular Callgrind tool has been added.  Folding
  it in was a logical step given its popularity and usefulness, and
  makes it easier for us to ensure it works "out of the box" on all
  supported targets.  The associated KDE KCachegrind GUI remains a
  separate project.

- A new release of the Valkyrie GUI for Memcheck, version 1.2.0,
  accompanies this release.  Improvements over previous releases
  include improved robustness, many refinements to the user interface,
  and use of a standard autoconf/automake build system.  You can get
  it from http://www.valgrind.org/downloads/guis.html.

- Valgrind now works on PPC64/Linux.  As with the AMD64/Linux port,
  this supports programs using to 32G of address space.  On 64-bit
  capable PPC64/Linux setups, you get a dual architecture build so
  that both 32-bit and 64-bit executables can be run.  Linux on POWER5
  is supported, and POWER4 is also believed to work.  Both 32-bit and
  64-bit DWARF2 is supported.  This port is known to work well with
  both gcc-compiled and xlc/xlf-compiled code.

- Floating point accuracy has been improved for PPC32/Linux.
  Specifically, the floating point rounding mode is observed on all FP
  arithmetic operations, and multiply-accumulate instructions are
  preserved by the compilation pipeline.  This means you should get FP
  results which are bit-for-bit identical to a native run.  These
  improvements are also present in the PPC64/Linux port.

- Lackey, the example tool, has been improved:

  * It has a new option --detailed-counts (off by default) which
    causes it to print out a count of loads, stores and ALU operations
    done, and their sizes.

  * It has a new option --trace-mem (off by default) which causes it
    to print out a trace of all memory accesses performed by a
    program.  It's a good starting point for building Valgrind tools
    that need to track memory accesses.  Read the comments at the top
    of the file lackey/lk_main.c for details.

  * The original instrumentation (counting numbers of instructions,
    jumps, etc) is now controlled by a new option --basic-counts.  It
    is on by default.

- MPI support: partial support for debugging distributed applications
  using the MPI library specification has been added.  Valgrind is
  aware of the memory state changes caused by a subset of the MPI
  functions, and will carefully check data passed to the (P)MPI_
  interface.

- A new flag, --error-exitcode=, has been added.  This allows changing
  the exit code in runs where Valgrind reported errors, which is
  useful when using Valgrind as part of an automated test suite.

- Various segfaults when reading old-style "stabs" debug information
  have been fixed.

- A simple performance evaluation suite has been added.  See
  perf/README and README_DEVELOPERS for details.  There are
  various bells and whistles.

- New configuration flags:
    --enable-only32bit
    --enable-only64bit
  By default, on 64 bit platforms (ppc64-linux, amd64-linux) the build
  system will attempt to build a Valgrind which supports both 32-bit
  and 64-bit executables.  This may not be what you want, and you can
  override the default behaviour using these flags.

Please note that Helgrind is still not working.  We have made an
important step towards making it work again, however, with the
addition of function wrapping (see below).

Other user-visible changes:

- Valgrind now has the ability to intercept and wrap arbitrary
  functions.  This is a preliminary step towards making Helgrind work
  again, and was required for MPI support.

- There are some changes to Memcheck's client requests.  Some of them
  have changed names:

    MAKE_NOACCESS  --> MAKE_MEM_NOACCESS
    MAKE_WRITABLE  --> MAKE_MEM_UNDEFINED
    MAKE_READABLE  --> MAKE_MEM_DEFINED

    CHECK_WRITABLE --> CHECK_MEM_IS_ADDRESSABLE
    CHECK_READABLE --> CHECK_MEM_IS_DEFINED
    CHECK_DEFINED  --> CHECK_VALUE_IS_DEFINED

  The reason for the change is that the old names are subtly
  misleading.  The old names will still work, but they are deprecated
  and may be removed in a future release.

  We also added a new client request:
  
    MAKE_MEM_DEFINED_IF_ADDRESSABLE(a, len)
    
  which is like MAKE_MEM_DEFINED but only affects a byte if the byte is
  already addressable.

- The way client requests are encoded in the instruction stream has
  changed.  Unfortunately, this means 3.2.0 will not honour client
  requests compiled into binaries using headers from earlier versions
  of Valgrind.  We will try to keep the client request encodings more 
  stable in future.

BUGS FIXED:

108258   NPTL pthread cleanup handlers not called 
117290   valgrind is sigKILL'd on startup
117295   == 117290
118703   m_signals.c:1427 Assertion 'tst->status == VgTs_WaitSys'
118466   add %reg, %reg generates incorrect validity for bit 0
123210   New: strlen from ld-linux on amd64
123244   DWARF2 CFI reader: unhandled CFI instruction 0:18
123248   syscalls in glibc-2.4: openat, fstatat, symlinkat
123258   socketcall.recvmsg(msg.msg_iov[i] points to uninit
123535   mremap(new_addr) requires MREMAP_FIXED in 4th arg
123836   small typo in the doc
124029   ppc compile failed: `vor' gcc 3.3.5
124222   Segfault: @@don't know what type ':' is
124475   ppc32: crash (syscall?) timer_settime()
124499   amd64->IR: 0xF 0xE 0x48 0x85 (femms)
124528   FATAL: aspacem assertion failed: segment_is_sane
124697   vex x86->IR: 0xF 0x70 0xC9 0x0 (pshufw)
124892   vex x86->IR: 0xF3 0xAE (REPx SCASB)
126216   == 124892
124808   ppc32: sys_sched_getaffinity() not handled
n-i-bz   Very long stabs strings crash m_debuginfo
n-i-bz   amd64->IR: 0x66 0xF 0xF5 (pmaddwd)
125492   ppc32: support a bunch more syscalls
121617   ppc32/64: coredumping gives assertion failure
121814   Coregrind return error as exitcode patch
126517   == 121814
125607   amd64->IR: 0x66 0xF 0xA3 0x2 (btw etc)
125651   amd64->IR: 0xF8 0x49 0xFF 0xE3 (clc?)
126253   x86 movx is wrong
126451   3.2 SVN doesn't work on ppc32 CPU's without FPU
126217   increase # threads
126243   vex x86->IR: popw mem
126583   amd64->IR: 0x48 0xF 0xA4 0xC2 (shld $1,%rax,%rdx)
126668   amd64->IR: 0x1C 0xFF (sbb $0xff,%al)
126696   support for CDROMREADRAW ioctl and CDROMREADTOCENTRY fix
126722   assertion: segment_is_sane at m_aspacemgr/aspacemgr.c:1624
126938   bad checking for syscalls linkat, renameat, symlinkat

(3.2.0RC1: 27 May  2006, vex r1626, valgrind r5947).
(3.2.0:     7 June 2006, vex r1628, valgrind r5957).


Release 3.1.1 (15 March 2006)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.1.1 fixes a bunch of bugs reported in 3.1.0.  There is no new
functionality.  The fixed bugs are:

(note: "n-i-bz" means "not in bugzilla" -- this bug does not have
 a bugzilla entry).

n-i-bz   ppc32: fsub 3,3,3 in dispatcher doesn't clear NaNs
n-i-bz   ppc32: __NR_{set,get}priority
117332   x86: missing line info with icc 8.1
117366   amd64: 0xDD 0x7C fnstsw
118274   == 117366
117367   amd64: 0xD9 0xF4 fxtract
117369   amd64: __NR_getpriority (140)
117419   ppc32: lfsu f5, -4(r11)
117419   ppc32: fsqrt
117936   more stabs problems (segfaults while reading debug info)
119914   == 117936
120345   == 117936
118239   amd64: 0xF 0xAE 0x3F (clflush)
118939   vm86old system call
n-i-bz   memcheck/tests/mempool reads freed memory
n-i-bz   AshleyP's custom-allocator assertion
n-i-bz   Dirk strict-aliasing stuff
n-i-bz   More space for debugger cmd line (Dan Thaler)
n-i-bz   Clarified leak checker output message
n-i-bz   AshleyP's --gen-suppressions output fix
n-i-bz   cg_annotate's --sort option broken
n-i-bz   OSet 64-bit fastcmp bug
n-i-bz   VG_(getgroups) fix (Shinichi Noda)
n-i-bz   ppc32: allocate from callee-saved FP/VMX regs
n-i-bz   misaligned path word-size bug in mc_main.c
119297   Incorrect error message for sse code
120410   x86: prefetchw (0xF 0xD 0x48 0x4)
120728   TIOCSERGETLSR, TIOCGICOUNT, HDIO_GET_DMA ioctls
120658   Build fixes for gcc 2.96
120734   x86: Support for changing EIP in signal handler
n-i-bz   memcheck/tests/zeropage de-looping fix
n-i-bz   x86: fxtract doesn't work reliably
121662   x86: lock xadd (0xF0 0xF 0xC0 0x2)
121893   calloc does not always return zeroed memory
121901   no support for syscall tkill
n-i-bz   Suppression update for Debian unstable
122067   amd64: fcmovnu (0xDB 0xD9)
n-i-bz   ppc32: broken signal handling in cpu feature detection
n-i-bz   ppc32: rounding mode problems (improved, partial fix only)
119482   ppc32: mtfsb1
n-i-bz   ppc32: mtocrf/mfocrf

(3.1.1:  15 March 2006, vex r1597, valgrind r5771).


Release 3.1.0 (25 November 2005)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.1.0 is a feature release with a number of significant improvements:
AMD64 support is much improved, PPC32 support is good enough to be
usable, and the handling of memory management and address space is
much more robust.  In detail:

- AMD64 support is much improved.  The 64-bit vs. 32-bit issues in
  3.0.X have been resolved, and it should "just work" now in all
  cases.  On AMD64 machines both 64-bit and 32-bit versions of
  Valgrind are built.  The right version will be invoked
  automatically, even when using --trace-children and mixing execution
  between 64-bit and 32-bit executables.  Also, many more instructions
  are supported.

- PPC32 support is now good enough to be usable.  It should work with
  all tools, but please let us know if you have problems.  Three
  classes of CPUs are supported: integer only (no FP, no Altivec),
  which covers embedded PPC uses, integer and FP but no Altivec
  (G3-ish), and CPUs capable of Altivec too (G4, G5).

- Valgrind's address space management has been overhauled.  As a
  result, Valgrind should be much more robust with programs that use
  large amounts of memory.  There should be many fewer "memory
  exhausted" messages, and debug symbols should be read correctly on
  large (eg. 300MB+) executables.  On 32-bit machines the full address
  space available to user programs (usually 3GB or 4GB) can be fully
  utilised.  On 64-bit machines up to 32GB of space is usable; when
  using Memcheck that means your program can use up to about 14GB.

  A side effect of this change is that Valgrind is no longer protected
  against wild writes by the client.  This feature was nice but relied
  on the x86 segment registers and so wasn't portable.

- Most users should not notice, but as part of the address space
  manager change, the way Valgrind is built has been changed.  Each
  tool is now built as a statically linked stand-alone executable,
  rather than as a shared object that is dynamically linked with the
  core.  The "valgrind" program invokes the appropriate tool depending
  on the --tool option.  This slightly increases the amount of disk
  space used by Valgrind, but it greatly simplified many things and
  removed Valgrind's dependence on glibc.

Please note that Addrcheck and Helgrind are still not working.  Work
is underway to reinstate them (or equivalents).  We apologise for the
inconvenience.

Other user-visible changes:

- The --weird-hacks option has been renamed --sim-hints.

- The --time-stamp option no longer gives an absolute date and time.
  It now prints the time elapsed since the program began.

- It should build with gcc-2.96.

- Valgrind can now run itself (see README_DEVELOPERS for how).
  This is not much use to you, but it means the developers can now
  profile Valgrind using Cachegrind.  As a result a couple of
  performance bad cases have been fixed.

- The XML output format has changed slightly.  See
  docs/internals/xml-output.txt.

- Core dumping has been reinstated (it was disabled in 3.0.0 and 3.0.1).
  If your program crashes while running under Valgrind, a core file with
  the name "vgcore.<pid>" will be created (if your settings allow core
  file creation).  Note that the floating point information is not all
  there.  If Valgrind itself crashes, the OS will create a normal core
  file.

The following are some user-visible changes that occurred in earlier
versions that may not have been announced, or were announced but not
widely noticed.  So we're mentioning them now.

- The --tool flag is optional once again;  if you omit it, Memcheck
  is run by default.

- The --num-callers flag now has a default value of 12.  It was
  previously 4.

- The --xml=yes flag causes Valgrind's output to be produced in XML
  format.  This is designed to make it easy for other programs to
  consume Valgrind's output.  The format is described in the file
  docs/internals/xml-format.txt.

- The --gen-suppressions flag supports an "all" value that causes every
  suppression to be printed without asking.

- The --log-file option no longer puts "pid" in the filename, eg. the
  old name "foo.pid12345" is now "foo.12345".

- There are several graphical front-ends for Valgrind, such as Valkyrie,
  Alleyoop and Valgui.  See http://www.valgrind.org/downloads/guis.html
  for a list.

BUGS FIXED:

109861  amd64 hangs at startup
110301  ditto
111554  valgrind crashes with Cannot allocate memory
111809  Memcheck tool doesn't start java
111901  cross-platform run of cachegrind fails on opteron
113468  (vgPlain_mprotect_range): Assertion 'r != -1' failed.
 92071  Reading debugging info uses too much memory
109744  memcheck loses track of mmap from direct ld-linux.so.2
110183  tail of page with _end
 82301  FV memory layout too rigid
 98278  Infinite recursion possible when allocating memory
108994  Valgrind runs out of memory due to 133x overhead
115643  valgrind cannot allocate memory
105974  vg_hashtable.c static hash table
109323  ppc32: dispatch.S uses Altivec insn, which doesn't work on POWER. 
109345  ptrace_setregs not yet implemented for ppc
110831  Would like to be able to run against both 32 and 64 bit 
        binaries on AMD64
110829  == 110831
111781  compile of valgrind-3.0.0 fails on my linux (gcc 2.X prob)
112670  Cachegrind: cg_main.c:486 (handleOneStatement ...
112941  vex x86: 0xD9 0xF4 (fxtract)
110201  == 112941
113015  vex amd64->IR: 0xE3 0x14 0x48 0x83 (jrcxz)
113126  Crash with binaries built with -gstabs+/-ggdb
104065  == 113126
115741  == 113126
113403  Partial SSE3 support on x86
113541  vex: Grp5(x86) (alt encoding inc/dec) case 1
113642  valgrind crashes when trying to read debug information
113810  vex x86->IR: 66 0F F6 (66 + PSADBW == SSE PSADBW)
113796  read() and write() do not work if buffer is in shared memory
113851  vex x86->IR: (pmaddwd): 0x66 0xF 0xF5 0xC7
114366  vex amd64 cannnot handle __asm__( "fninit" )
114412  vex amd64->IR: 0xF 0xAD 0xC2 0xD3 (128-bit shift, shrdq?)
114455  vex amd64->IR: 0xF 0xAC 0xD0 0x1 (also shrdq)
115590: amd64->IR: 0x67 0xE3 0x9 0xEB (address size override)
115953  valgrind svn r5042 does not build with parallel make (-j3)
116057  maximum instruction size - VG_MAX_INSTR_SZB too small?
116483  shmat failes with invalid argument
102202  valgrind crashes when realloc'ing until out of memory
109487  == 102202
110536  == 102202
112687  == 102202
111724  vex amd64->IR: 0x41 0xF 0xAB (more BT{,S,R,C} fun n games)
111748  vex amd64->IR: 0xDD 0xE2 (fucom)
111785  make fails if CC contains spaces
111829  vex x86->IR: sbb AL, Ib
111851  vex x86->IR: 0x9F 0x89 (lahf/sahf)
112031  iopl on AMD64 and README_MISSING_SYSCALL_OR_IOCTL update
112152  code generation for Xin_MFence on x86 with SSE0 subarch
112167  == 112152
112789  == 112152
112199  naked ar tool is used in vex makefile
112501  vex x86->IR: movq (0xF 0x7F 0xC1 0xF) (mmx MOVQ)
113583  == 112501
112538  memalign crash
113190  Broken links in docs/html/
113230  Valgrind sys_pipe on x86-64 wrongly thinks file descriptors
        should be 64bit
113996  vex amd64->IR: fucomp (0xDD 0xE9)
114196  vex x86->IR: out %eax,(%dx) (0xEF 0xC9 0xC3 0x90)
114289  Memcheck fails to intercept malloc when used in an uclibc environment
114756  mbind syscall support
114757  Valgrind dies with assertion: Assertion 'noLargerThan > 0' failed
114563  stack tracking module not informed when valgrind switches threads
114564  clone() and stacks
114565  == 114564
115496  glibc crashes trying to use sysinfo page
116200  enable fsetxattr, fgetxattr, and fremovexattr for amd64

(3.1.0RC1: 20 November 2005, vex r1466, valgrind r5224).
(3.1.0:    26 November 2005, vex r1471, valgrind r5235).


Release 3.0.1 (29 August 2005)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.0.1 fixes a bunch of bugs reported in 3.0.0.  There is no new
functionality.  Some of the fixed bugs are critical, so if you
use/distribute 3.0.0, an upgrade to 3.0.1 is recommended.  The fixed
bugs are:

(note: "n-i-bz" means "not in bugzilla" -- this bug does not have
 a bugzilla entry).

109313  (== 110505) x86 cmpxchg8b
n-i-bz  x86: track but ignore changes to %eflags.AC (alignment check)
110102  dis_op2_E_G(amd64)
110202  x86 sys_waitpid(#286)
110203  clock_getres(,0)
110208  execve fail wrong retval
110274  SSE1 now mandatory for x86
110388  amd64 0xDD 0xD1
110464  amd64 0xDC 0x1D FCOMP
110478  amd64 0xF 0xD PREFETCH
n-i-bz  XML <unique> printing wrong
n-i-bz  Dirk r4359 (amd64 syscalls from trunk)
110591  amd64 and x86: rdtsc not implemented properly
n-i-bz  Nick r4384 (stub implementations of Addrcheck and Helgrind)
110652  AMD64 valgrind crashes on cwtd instruction
110653  AMD64 valgrind crashes on sarb $0x4,foo(%rip) instruction
110656  PATH=/usr/bin::/bin valgrind foobar stats ./fooba
110657  Small test fixes
110671  vex x86->IR: unhandled instruction bytes: 0xF3 0xC3 (rep ret)
n-i-bz  Nick (Cachegrind should not assert when it encounters a client
        request.)
110685  amd64->IR: unhandled instruction bytes: 0xE1 0x56 (loope Jb)
110830  configuring with --host fails to build 32 bit on 64 bit target
110875  Assertion when execve fails
n-i-bz  Updates to Memcheck manual
n-i-bz  Fixed broken malloc_usable_size()
110898  opteron instructions missing: btq btsq btrq bsfq
110954  x86->IR: unhandled instruction bytes: 0xE2 0xF6 (loop Jb)
n-i-bz  Make suppressions work for "???" lines in stacktraces.
111006  bogus warnings from linuxthreads
111092  x86: dis_Grp2(Reg): unhandled case(x86) 
111231  sctp_getladdrs() and sctp_getpaddrs() returns uninitialized
        memory
111102  (comment #4)   Fixed 64-bit unclean "silly arg" message
n-i-bz  vex x86->IR: unhandled instruction bytes: 0x14 0x0
n-i-bz  minor umount/fcntl wrapper fixes
111090  Internal Error running Massif
101204  noisy warning
111513  Illegal opcode for SSE instruction (x86 movups)
111555  VEX/Makefile: CC is set to gcc
n-i-bz  Fix XML bugs in FAQ

(3.0.1: 29 August 05,
        vex/branches/VEX_3_0_BRANCH r1367,
        valgrind/branches/VALGRIND_3_0_BRANCH r4574).



Release 3.0.0 (3 August 2005)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.0.0 is a major overhaul of Valgrind.  The most significant user
visible change is that Valgrind now supports architectures other than
x86.  The new architectures it supports are AMD64 and PPC32, and the
infrastructure is present for other architectures to be added later.

AMD64 support works well, but has some shortcomings:

- It generally won't be as solid as the x86 version.  For example,
  support for more obscure instructions and system calls may be missing.
  We will fix these as they arise.

- Address space may be limited; see the point about
  position-independent executables below.

- If Valgrind is built on an AMD64 machine, it will only run 64-bit
  executables.  If you want to run 32-bit x86 executables under Valgrind
  on an AMD64, you will need to build Valgrind on an x86 machine and
  copy it to the AMD64 machine.  And it probably won't work if you do
  something tricky like exec'ing a 32-bit program from a 64-bit program
  while using --trace-children=yes.  We hope to improve this situation
  in the future.

The PPC32 support is very basic.  It may not work reliably even for
small programs, but it's a start.  Many thanks to Paul Mackerras for
his great work that enabled this support.  We are working to make
PPC32 usable as soon as possible.

Other user-visible changes:

- Valgrind is no longer built by default as a position-independent
  executable (PIE), as this caused too many problems.

  Without PIE enabled, AMD64 programs will only be able to access 2GB of
  address space.  We will fix this eventually, but not for the moment.
  
  Use --enable-pie at configure-time to turn this on.

- Support for programs that use stack-switching has been improved.  Use
  the --max-stackframe flag for simple cases, and the
  VALGRIND_STACK_REGISTER, VALGRIND_STACK_DEREGISTER and
  VALGRIND_STACK_CHANGE client requests for trickier cases.

- Support for programs that use self-modifying code has been improved,
  in particular programs that put temporary code fragments on the stack.
  This helps for C programs compiled with GCC that use nested functions,
  and also Ada programs.  This is controlled with the --smc-check
  flag, although the default setting should work in most cases.

- Output can now be printed in XML format.  This should make it easier
  for tools such as GUI front-ends and automated error-processing
  schemes to use Valgrind output as input.  The --xml flag controls this.
  As part of this change, ELF directory information is read from executables,
  so absolute source file paths are available if needed.

- Programs that allocate many heap blocks may run faster, due to
  improvements in certain data structures.

- Addrcheck is currently not working.  We hope to get it working again
  soon.  Helgrind is still not working, as was the case for the 2.4.0
  release.

- The JITter has been completely rewritten, and is now in a separate
  library, called Vex.  This enabled a lot of the user-visible changes,
  such as new architecture support.  The new JIT unfortunately translates
  more slowly than the old one, so programs may take longer to start.
  We believe the code quality is produces is about the same, so once
  started, programs should run at about the same speed.  Feedback about
  this would be useful.

  On the plus side, Vex and hence Memcheck tracks value flow properly
  through floating point and vector registers, something the 2.X line
  could not do.  That means that Memcheck is much more likely to be
  usably accurate on vectorised code.

- There is a subtle change to the way exiting of threaded programs
  is handled.  In 3.0, Valgrind's final diagnostic output (leak check,
  etc) is not printed until the last thread exits.  If the last thread
  to exit was not the original thread which started the program, any
  other process wait()-ing on this one to exit may conclude it has
  finished before the diagnostic output is printed.  This may not be
  what you expect.  2.X had a different scheme which avoided this
  problem, but caused deadlocks under obscure circumstances, so we
  are trying something different for 3.0.

- Small changes in control log file naming which make it easier to
  use valgrind for debugging MPI-based programs.  The relevant
  new flags are --log-file-exactly= and --log-file-qualifier=.

- As part of adding AMD64 support, DWARF2 CFI-based stack unwinding
  support was added.  In principle this means Valgrind can produce
  meaningful backtraces on x86 code compiled with -fomit-frame-pointer
  providing you also compile your code with -fasynchronous-unwind-tables.

- The documentation build system has been completely redone.
  The documentation masters are now in XML format, and from that
  HTML, PostScript and PDF documentation is generated.  As a result
  the manual is now available in book form.  Note that the
  documentation in the source tarballs is pre-built, so you don't need
  any XML processing tools to build Valgrind from a tarball.

Changes that are not user-visible:

- The code has been massively overhauled in order to modularise it.
  As a result we hope it is easier to navigate and understand.

- Lots of code has been rewritten.

BUGS FIXED:

110046  sz == 4 assertion failed 
109810  vex amd64->IR: unhandled instruction bytes: 0xA3 0x4C 0x70 0xD7
109802  Add a plausible_stack_size command-line parameter ?
109783  unhandled ioctl TIOCMGET (running hw detection tool discover) 
109780  unhandled ioctl BLKSSZGET (running fdisk -l /dev/hda)
109718  vex x86->IR: unhandled instruction: ffreep 
109429  AMD64 unhandled syscall: 127 (sigpending)
109401  false positive uninit in strchr from ld-linux.so.2
109385  "stabs" parse failure 
109378  amd64: unhandled instruction REP NOP
109376  amd64: unhandled instruction LOOP Jb 
109363  AMD64 unhandled instruction bytes 
109362  AMD64 unhandled syscall: 24 (sched_yield)
109358  fork() won't work with valgrind-3.0 SVN
109332  amd64 unhandled instruction: ADC Ev, Gv
109314  Bogus memcheck report on amd64
108883  Crash; vg_memory.c:905 (vgPlain_init_shadow_range):
        Assertion `vgPlain_defined_init_shadow_page()' failed.
108349  mincore syscall parameter checked incorrectly 
108059  build infrastructure: small update
107524  epoll_ctl event parameter checked on EPOLL_CTL_DEL
107123  Vex dies with unhandled instructions: 0xD9 0x31 0xF 0xAE
106841  auxmap & openGL problems
106713  SDL_Init causes valgrind to exit
106352  setcontext and makecontext not handled correctly 
106293  addresses beyond initial client stack allocation 
        not checked in VALGRIND_DO_LEAK_CHECK
106283  PIE client programs are loaded at address 0
105831  Assertion `vgPlain_defined_init_shadow_page()' failed.
105039  long run-times probably due to memory manager 
104797  valgrind needs to be aware of BLKGETSIZE64
103594  unhandled instruction: FICOM
103320  Valgrind 2.4.0 fails to compile with gcc 3.4.3 and -O0
103168  potentially memory leak in coregrind/ume.c 
102039  bad permissions for mapped region at address 0xB7C73680
101881  weird assertion problem
101543  Support fadvise64 syscalls
75247   x86_64/amd64 support (the biggest "bug" we have ever fixed)

(3.0RC1: 27 July   05, vex r1303, valgrind r4283).
(3.0.0:   3 August 05, vex r1313, valgrind r4316).



Stable release 2.4.1 (1 August 2005)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(The notes for this release have been lost.  Sorry!  It would have
contained various bug fixes but no new features.)



Stable release 2.4.0 (March 2005) -- CHANGES RELATIVE TO 2.2.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.4.0 brings many significant changes and bug fixes.  The most
significant user-visible change is that we no longer supply our own
pthread implementation.  Instead, Valgrind is finally capable of
running the native thread library, either LinuxThreads or NPTL.

This means our libpthread has gone, along with the bugs associated
with it.  Valgrind now supports the kernel's threading syscalls, and
lets you use your standard system libpthread.  As a result:

* There are many fewer system dependencies and strange library-related
  bugs.  There is a small performance improvement, and a large
  stability improvement.

* On the downside, Valgrind can no longer report misuses of the POSIX
  PThreads API.  It also means that Helgrind currently does not work.
  We hope to fix these problems in a future release.

Note that running the native thread libraries does not mean Valgrind
is able to provide genuine concurrent execution on SMPs.  We still
impose the restriction that only one thread is running at any given
time.

There are many other significant changes too:

* Memcheck is (once again) the default tool.

* The default stack backtrace is now 12 call frames, rather than 4.

* Suppressions can have up to 25 call frame matches, rather than 4.

* Memcheck and Addrcheck use less memory.  Under some circumstances,
  they no longer allocate shadow memory if there are large regions of
  memory with the same A/V states - such as an mmaped file.

* The memory-leak detector in Memcheck and Addrcheck has been
  improved.  It now reports more types of memory leak, including
  leaked cycles.  When reporting leaked memory, it can distinguish
  between directly leaked memory (memory with no references), and
  indirectly leaked memory (memory only referred to by other leaked
  memory).

* Memcheck's confusion over the effect of mprotect() has been fixed:
  previously mprotect could erroneously mark undefined data as
  defined.

* Signal handling is much improved and should be very close to what
  you get when running natively.  

  One result of this is that Valgrind observes changes to sigcontexts
  passed to signal handlers.  Such modifications will take effect when
  the signal returns.  You will need to run with --single-step=yes to
  make this useful.

* Valgrind is built in Position Independent Executable (PIE) format if
  your toolchain supports it.  This allows it to take advantage of all
  the available address space on systems with 4Gbyte user address
  spaces.

* Valgrind can now run itself (requires PIE support).

* Syscall arguments are now checked for validity.  Previously all
  memory used by syscalls was checked, but now the actual values
  passed are also checked.

* Syscall wrappers are more robust against bad addresses being passed
  to syscalls: they will fail with EFAULT rather than killing Valgrind
  with SIGSEGV.

* Because clone() is directly supported, some non-pthread uses of it
  will work.  Partial sharing (where some resources are shared, and
  some are not) is not supported.

* open() and readlink() on /proc/self/exe are supported.

BUGS FIXED:

88520   pipe+fork+dup2 kills the main program
88604 	Valgrind Aborts when using $VALGRIND_OPTS and user progra...
88614 	valgrind: vg_libpthread.c:2323 (read): Assertion `read_pt...
88703 	Stabs parser fails to handle ";"
88886 	ioctl wrappers for TIOCMBIS and TIOCMBIC
89032 	valgrind pthread_cond_timedwait fails
89106 	the 'impossible' happened
89139 	Missing sched_setaffinity & sched_getaffinity
89198 	valgrind lacks support for SIOCSPGRP and SIOCGPGRP
89263 	Missing ioctl translations for scsi-generic and CD playing
89440 	tests/deadlock.c line endings
89481 	`impossible' happened: EXEC FAILED
89663 	valgrind 2.2.0 crash on Redhat 7.2
89792 	Report pthread_mutex_lock() deadlocks instead of returnin...
90111 	statvfs64 gives invalid error/warning
90128 	crash+memory fault with stabs generated by gnat for a run...
90778 	VALGRIND_CHECK_DEFINED() not as documented in memcheck.h
90834 	cachegrind crashes at end of program without reporting re...
91028 	valgrind: vg_memory.c:229 (vgPlain_unmap_range): Assertio...
91162 	valgrind crash while debugging drivel 1.2.1
91199 	Unimplemented function
91325 	Signal routing does not propagate the siginfo structure
91599 	Assertion `cv == ((void *)0)'
91604 	rw_lookup clears orig and sends the NULL value to rw_new
91821 	Small problems building valgrind with $top_builddir ne $t...
91844 	signal 11 (SIGSEGV) at get_tcb (libpthread.c:86) in corec...
92264 	UNIMPLEMENTED FUNCTION: pthread_condattr_setpshared
92331 	per-target flags necessitate AM_PROG_CC_C_O
92420 	valgrind doesn't compile with linux 2.6.8.1/9
92513 	Valgrind 2.2.0 generates some warning messages
92528 	vg_symtab2.c:170 (addLoc): Assertion `loc->size > 0' failed.
93096 	unhandled ioctl 0x4B3A and 0x5601
93117 	Tool and core interface versions do not match
93128 	Can't run valgrind --tool=memcheck because of unimplement...
93174 	Valgrind can crash if passed bad args to certain syscalls
93309 	Stack frame in new thread is badly aligned
93328 	Wrong types used with sys_sigprocmask()
93763 	/usr/include/asm/msr.h is missing
93776 	valgrind: vg_memory.c:508 (vgPlain_find_map_space): Asser...
93810 	fcntl() argument checking a bit too strict
94378 	Assertion `tst->sigqueue_head != tst->sigqueue_tail' failed.
94429 	valgrind 2.2.0 segfault with mmap64 in glibc 2.3.3
94645 	Impossible happened: PINSRW mem
94953 	valgrind: the `impossible' happened: SIGSEGV
95667 	Valgrind does not work with any KDE app
96243 	Assertion 'res==0' failed
96252 	stage2 loader of valgrind fails to allocate memory
96520 	All programs crashing at _dl_start (in /lib/ld-2.3.3.so) ...
96660 	ioctl CDROMREADTOCENTRY causes bogus warnings
96747 	After looping in a segfault handler, the impossible happens
96923 	Zero sized arrays crash valgrind trace back with SIGFPE
96948 	valgrind stops with assertion failure regarding mmap2
96966 	valgrind fails when application opens more than 16 sockets
97398 	valgrind: vg_libpthread.c:2667 Assertion failed
97407 	valgrind: vg_mylibc.c:1226 (vgPlain_safe_fd): Assertion `...
97427 	"Warning: invalid file descriptor -1 in syscall close()" ...
97785 	missing backtrace
97792 	build in obj dir fails - autoconf / makefile cleanup
97880 	pthread_mutex_lock fails from shared library (special ker...
97975 	program aborts without ang VG messages
98129 	Failed when open and close file 230000 times using stdio
98175 	Crashes when using valgrind-2.2.0 with a program using al...
98288 	Massif broken
98303 	UNIMPLEMENTED FUNCTION pthread_condattr_setpshared
98630 	failed--compilation missing warnings.pm, fails to make he...
98756 	Cannot valgrind signal-heavy kdrive X server
98966 	valgrinding the JVM fails with a sanity check assertion
99035 	Valgrind crashes while profiling
99142 	loops with message "Signal 11 being dropped from thread 0...
99195 	threaded apps crash on thread start (using QThread::start...
99348 	Assertion `vgPlain_lseek(core_fd, 0, 1) == phdrs[i].p_off...
99568 	False negative due to mishandling of mprotect
99738 	valgrind memcheck crashes on program that uses sigitimer
99923 	0-sized allocations are reported as leaks
99949 	program seg faults after exit()
100036 	"newSuperblock's request for 1048576 bytes failed"
100116 	valgrind: (pthread_cond_init): Assertion `sizeof(* cond) ...
100486 	memcheck reports "valgrind: the `impossible' happened: V...
100833 	second call to "mremap" fails with EINVAL
101156 	(vgPlain_find_map_space): Assertion `(addr & ((1 << 12)-1...
101173 	Assertion `recDepth >= 0 && recDepth < 500' failed
101291 	creating threads in a forked process fails
101313 	valgrind causes different behavior when resizing a window...
101423 	segfault for c++ array of floats
101562 	valgrind massif dies on SIGINT even with signal handler r...


Stable release 2.2.0 (31 August 2004) -- CHANGES RELATIVE TO 2.0.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.2.0 brings nine months worth of improvements and bug fixes.  We
believe it to be a worthy successor to 2.0.0.  There are literally
hundreds of bug fixes and minor improvements.  There are also some
fairly major user-visible changes:

* A complete overhaul of handling of system calls and signals, and 
  their interaction with threads.  In general, the accuracy of the 
  system call, thread and signal simulations is much improved:

  - Blocking system calls behave exactly as they do when running
    natively (not on valgrind).  That is, if a syscall blocks only the
    calling thread when running natively, than it behaves the same on
    valgrind.  No more mysterious hangs because V doesn't know that some
    syscall or other, should block only the calling thread.

  - Interrupted syscalls should now give more faithful results.

  - Signal contexts in signal handlers are supported.

* Improvements to NPTL support to the extent that V now works 
  properly on NPTL-only setups.

* Greater isolation between Valgrind and the program being run, so
  the program is less likely to inadvertently kill Valgrind by
  doing wild writes.

* Massif: a new space profiling tool.  Try it!  It's cool, and it'll
  tell you in detail where and when your C/C++ code is allocating heap.
  Draws pretty .ps pictures of memory use against time.  A potentially
  powerful tool for making sense of your program's space use.

* File descriptor leakage checks.  When enabled, Valgrind will print out
  a list of open file descriptors on exit.

* Improved SSE2/SSE3 support.

* Time-stamped output; use --time-stamp=yes



Stable release 2.2.0 (31 August 2004) -- CHANGES RELATIVE TO 2.1.2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.2.0 is not much different from 2.1.2, released seven weeks ago.
A number of bugs have been fixed, most notably #85658, which gave
problems for quite a few people.  There have been many internal
cleanups, but those are not user visible.

The following bugs have been fixed since 2.1.2:

85658   Assert in coregrind/vg_libpthread.c:2326 (open64) !=
        (void*)0 failed
        This bug was reported multiple times, and so the following
        duplicates of it are also fixed: 87620, 85796, 85935, 86065, 
        86919, 86988, 87917, 88156

80716   Semaphore mapping bug caused by unmap (sem_destroy)
        (Was fixed prior to 2.1.2)

86987   semctl and shmctl syscalls family is not handled properly

86696   valgrind 2.1.2 + RH AS2.1 + librt

86730   valgrind locks up at end of run with assertion failure 
        in __pthread_unwind

86641   memcheck doesn't work with Mesa OpenGL/ATI on Suse 9.1
        (also fixes 74298, a duplicate of this)

85947   MMX/SSE unhandled instruction 'sfence'

84978   Wrong error "Conditional jump or move depends on
        uninitialised value" resulting from "sbbl %reg, %reg"

86254   ssort() fails when signed int return type from comparison is 
        too small to handle result of unsigned int subtraction

87089   memalign( 4, xxx) makes valgrind assert

86407   Add support for low-level parallel port driver ioctls.

70587   Add timestamps to Valgrind output? (wishlist)

84937   vg_libpthread.c:2505 (se_remap): Assertion `res == 0'
        (fixed prior to 2.1.2)

86317   cannot load libSDL-1.2.so.0 using valgrind

86989   memcpy from mac_replace_strmem.c complains about
        uninitialized pointers passed when length to copy is zero

85811   gnu pascal symbol causes segmentation fault; ok in 2.0.0

79138   writing to sbrk()'d memory causes segfault

77369   sched deadlock while signal received during pthread_join
        and the joined thread exited

88115   In signal handler for SIGFPE,  siginfo->si_addr is wrong 
        under Valgrind

78765   Massif crashes on app exit if FP exceptions are enabled

Additionally there are the following changes, which are not 
connected to any bug report numbers, AFAICS:

* Fix scary bug causing mis-identification of SSE stores vs
  loads and so causing memcheck to sometimes give nonsense results
  on SSE code.

* Add support for the POSIX message queue system calls.

* Fix to allow 32-bit Valgrind to run on AMD64 boxes.  Note: this does
  NOT allow Valgrind to work with 64-bit executables - only with 32-bit
  executables on an AMD64 box.

* At configure time, only check whether linux/mii.h can be processed 
  so that we don't generate ugly warnings by trying to compile it.

* Add support for POSIX clocks and timers.



Developer (cvs head) release 2.1.2 (18 July 2004)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.1.2 contains four months worth of bug fixes and refinements.
Although officially a developer release, we believe it to be stable
enough for widespread day-to-day use.  2.1.2 is pretty good, so try it
first, although there is a chance it won't work.  If so then try 2.0.0
and tell us what went wrong."  2.1.2 fixes a lot of problems present
in 2.0.0 and is generally a much better product.

Relative to 2.1.1, a large number of minor problems with 2.1.1 have
been fixed, and so if you use 2.1.1 you should try 2.1.2.  Users of
the last stable release, 2.0.0, might also want to try this release.

The following bugs, and probably many more, have been fixed.  These
are listed at http://bugs.kde.org.  Reporting a bug for valgrind in
the http://bugs.kde.org is much more likely to get you a fix than
mailing developers directly, so please continue to keep sending bugs
there.

76869   Crashes when running any tool under Fedora Core 2 test1
        This fixes the problem with returning from a signal handler 
        when VDSOs are turned off in FC2.

69508   java 1.4.2 client fails with erroneous "stack size too small".
        This fix makes more of the pthread stack attribute related 
        functions work properly.  Java still doesn't work though.

71906   malloc alignment should be 8, not 4
        All memory returned by malloc/new etc is now at least
        8-byte aligned.

81970   vg_alloc_ThreadState: no free slots available
        (closed because the workaround is simple: increase
         VG_N_THREADS, rebuild and try again.)

78514   Conditional jump or move depends on uninitialized value(s)
        (a slight mishanding of FP code in memcheck)

77952   pThread Support (crash) (due to initialisation-ordering probs)
        (also 85118)

80942   Addrcheck wasn't doing overlap checking as it should.
78048   return NULL on malloc/new etc failure, instead of asserting
73655   operator new() override in user .so files often doesn't get picked up
83060   Valgrind does not handle native kernel AIO
69872   Create proper coredumps after fatal signals
82026   failure with new glibc versions: __libc_* functions are not exported
70344   UNIMPLEMENTED FUNCTION: tcdrain 
81297   Cancellation of pthread_cond_wait does not require mutex
82872   Using debug info from additional packages (wishlist)
83025   Support for ioctls FIGETBSZ and FIBMAP
83340   Support for ioctl HDIO_GET_IDENTITY
79714   Support for the semtimedop system call.
77022   Support for ioctls FBIOGET_VSCREENINFO and FBIOGET_FSCREENINFO
82098   hp2ps ansification (wishlist)
83573   Valgrind SIGSEGV on execve
82999   show which cmdline option was erroneous (wishlist)
83040   make valgrind VPATH and distcheck-clean (wishlist)
83998   Assertion `newfd > vgPlain_max_fd' failed (see below)
82722   Unchecked mmap in as_pad leads to mysterious failures later
78958   memcheck seg faults while running Mozilla 
85416   Arguments with colon (e.g. --logsocket) ignored


Additionally there are the following changes, which are not 
connected to any bug report numbers, AFAICS:

* Rearranged address space layout relative to 2.1.1, so that
  Valgrind/tools will run out of memory later than currently in many
  circumstances.  This is good news esp. for Calltree.  It should
  be possible for client programs to allocate over 800MB of
  memory when using memcheck now.

* Improved checking when laying out memory.  Should hopefully avoid
  the random segmentation faults that 2.1.1 sometimes caused.

* Support for Fedora Core 2 and SuSE 9.1.  Improvements to NPTL
  support to the extent that V now works properly on NPTL-only setups.

* Renamed the following options:
  --logfile-fd  -->  --log-fd
  --logfile     -->  --log-file
  --logsocket   -->  --log-socket
  to be consistent with each other and other options (esp. --input-fd).

* Add support for SIOCGMIIPHY, SIOCGMIIREG and SIOCSMIIREG ioctls and
  improve the checking of other interface related ioctls.

* Fix building with gcc-3.4.1.

* Remove limit on number of semaphores supported.

* Add support for syscalls: set_tid_address (258), acct (51).

* Support instruction "repne movs" -- not official but seems to occur.

* Implement an emulated soft limit for file descriptors in addition to
  the current reserved area, which effectively acts as a hard limit. The
  setrlimit system call now simply updates the emulated limits as best
  as possible - the hard limit is not allowed to move at all and just
  returns EPERM if you try and change it.  This should stop reductions
  in the soft limit causing assertions when valgrind tries to allocate
  descriptors from the reserved area.
  (This actually came from bug #83998).

* Major overhaul of Cachegrind implementation.  First user-visible change
  is that cachegrind.out files are now typically 90% smaller than they
  used to be;  code annotation times are correspondingly much smaller.
  Second user-visible change is that hit/miss counts for code that is
  unloaded at run-time is no longer dumped into a single "discard" pile,
  but accurately preserved.

* Client requests for telling valgrind about memory pools.



Developer (cvs head) release 2.1.1 (12 March 2004)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.1.1 contains some internal structural changes needed for V's
long-term future.  These don't affect end-users.  Most notable
user-visible changes are:

* Greater isolation between Valgrind and the program being run, so
  the program is less likely to inadvertently kill Valgrind by
  doing wild writes.

* Massif: a new space profiling tool.  Try it!  It's cool, and it'll
  tell you in detail where and when your C/C++ code is allocating heap.
  Draws pretty .ps pictures of memory use against time.  A potentially
  powerful tool for making sense of your program's space use.

* Fixes for many bugs, including support for more SSE2/SSE3 instructions,
  various signal/syscall things, and various problems with debug
  info readers.

* Support for glibc-2.3.3 based systems.

We are now doing automatic overnight build-and-test runs on a variety
of distros.  As a result, we believe 2.1.1 builds and runs on:
Red Hat 7.2, 7.3, 8.0, 9, Fedora Core 1, SuSE 8.2, SuSE 9.


The following bugs, and probably many more, have been fixed.  These
are listed at http://bugs.kde.org.  Reporting a bug for valgrind in
the http://bugs.kde.org is much more likely to get you a fix than
mailing developers directly, so please continue to keep sending bugs
there.

69616   glibc 2.3.2 w/NPTL is massively different than what valgrind expects 
69856   I don't know how to instrument MMXish stuff (Helgrind)
73892   valgrind segfaults starting with Objective-C debug info 
        (fix for S-type stabs)
73145   Valgrind complains too much about close(<reserved fd>) 
73902   Shadow memory allocation seems to fail on RedHat 8.0 
68633   VG_N_SEMAPHORES too low (V itself was leaking semaphores)
75099   impossible to trace multiprocess programs 
76839   the `impossible' happened: disInstr: INT but not 0x80 ! 
76762   vg_to_ucode.c:3748 (dis_push_segreg): Assertion `sz == 4' failed. 
76747   cannot include valgrind.h in c++ program 
76223   parsing B(3,10) gave NULL type => impossible happens 
75604   shmdt handling problem 
76416   Problems with gcc 3.4 snap 20040225 
75614   using -gstabs when building your programs the `impossible' happened
75787   Patch for some CDROM ioctls CDORM_GET_MCN, CDROM_SEND_PACKET,
75294   gcc 3.4 snapshot's libstdc++ have unsupported instructions. 
        (REP RET)
73326   vg_symtab2.c:272 (addScopeRange): Assertion `range->size > 0' failed. 
72596   not recognizing __libc_malloc 
69489   Would like to attach ddd to running program 
72781   Cachegrind crashes with kde programs 
73055   Illegal operand at DXTCV11CompressBlockSSE2 (more SSE opcodes)
73026   Descriptor leak check reports port numbers wrongly 
71705   README_MISSING_SYSCALL_OR_IOCTL out of date 
72643   Improve support for SSE/SSE2 instructions 
72484   valgrind leaves it's own signal mask in place when execing 
72650   Signal Handling always seems to restart system calls 
72006   The mmap system call turns all errors in ENOMEM 
71781   gdb attach is pretty useless 
71180   unhandled instruction bytes: 0xF 0xAE 0x85 0xE8 
69886   writes to zero page cause valgrind to assert on exit 
71791   crash when valgrinding gimp 1.3 (stabs reader problem)
69783   unhandled syscall: 218 
69782   unhandled instruction bytes: 0x66 0xF 0x2B 0x80 
70385   valgrind fails if the soft file descriptor limit is less 
        than about 828
69529   "rep; nop" should do a yield 
70827   programs with lots of shared libraries report "mmap failed" 
        for some of them when reading symbols 
71028   glibc's strnlen is optimised enough to confuse valgrind 




Unstable (cvs head) release 2.1.0 (15 December 2003)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For whatever it's worth, 2.1.0 actually seems pretty darn stable to me
(Julian).  It looks eminently usable, and given that it fixes some
significant bugs, may well be worth using on a day-to-day basis.
2.1.0 is known to build and pass regression tests on: SuSE 9, SuSE
8.2, RedHat 8.

2.1.0 most notably includes Jeremy Fitzhardinge's complete overhaul of
handling of system calls and signals, and their interaction with
threads.  In general, the accuracy of the system call, thread and
signal simulations is much improved.  Specifically:

- Blocking system calls behave exactly as they do when running
  natively (not on valgrind).  That is, if a syscall blocks only the
  calling thread when running natively, than it behaves the same on
  valgrind.  No more mysterious hangs because V doesn't know that some
  syscall or other, should block only the calling thread.

- Interrupted syscalls should now give more faithful results.

- Finally, signal contexts in signal handlers are supported.  As a
  result, konqueror on SuSE 9 no longer segfaults when notified of
  file changes in directories it is watching.

Other changes:

- Robert Walsh's file descriptor leakage checks.  When enabled,
  Valgrind will print out a list of open file descriptors on
  exit.  Along with each file descriptor, Valgrind prints out a stack
  backtrace of where the file was opened and any details relating to the
  file descriptor such as the file name or socket details.
  To use, give: --track-fds=yes

- Implemented a few more SSE/SSE2 instructions.

- Less crud on the stack when you do 'where' inside a GDB attach.

- Fixed the following bugs:
  68360: Valgrind does not compile against 2.6.0-testX kernels
  68525: CVS head doesn't compile on C90 compilers
  68566: pkgconfig support (wishlist)
  68588: Assertion `sz == 4' failed in vg_to_ucode.c (disInstr)
  69140: valgrind not able to explicitly specify a path to a binary. 
  69432: helgrind asserts encountering a MutexErr when there are 
         EraserErr suppressions

- Increase the max size of the translation cache from 200k average bbs
  to 300k average bbs.  Programs on the size of OOo (680m17) are
  thrashing the cache at the smaller size, creating large numbers of
  retranslations and wasting significant time as a result.



Stable release 2.0.0 (5 Nov 2003)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2.0.0 improves SSE/SSE2 support, fixes some minor bugs, and
improves support for SuSE 9 and the Red Hat "Severn" beta.

- Further improvements to SSE/SSE2 support.  The entire test suite of
  the GNU Scientific Library (gsl-1.4) compiled with Intel Icc 7.1
  20030307Z '-g -O -xW' now works.  I think this gives pretty good
  coverage of SSE/SSE2 floating point instructions, or at least the
  subset emitted by Icc.

- Also added support for the following instructions:
    MOVNTDQ UCOMISD UNPCKLPS UNPCKHPS SQRTSS
    PUSH/POP %{FS,GS}, and PUSH %CS (Nb: there is no POP %CS).

- CFI support for GDB version 6.  Needed to enable newer GDBs
  to figure out where they are when using --gdb-attach=yes.

- Fix this:
      mc_translate.c:1091 (memcheck_instrument): Assertion
      `u_in->size == 4 || u_in->size == 16' failed.

- Return an error rather than panicing when given a bad socketcall.

- Fix checking of syscall rt_sigtimedwait().

- Implement __NR_clock_gettime (syscall 265).  Needed on Red Hat Severn.

- Fixed bug in overlap check in strncpy() -- it was assuming the src was 'n'
  bytes long, when it could be shorter, which could cause false
  positives.

- Support use of select() for very large numbers of file descriptors.

- Don't fail silently if the executable is statically linked, or is
  setuid/setgid. Print an error message instead.

- Support for old DWARF-1 format line number info.



Snapshot 20031012 (12 October 2003)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Three months worth of bug fixes, roughly.  Most significant single
change is improved SSE/SSE2 support, mostly thanks to Dirk Mueller.

20031012 builds on Red Hat Fedora ("Severn") but doesn't really work
(curiosly, mozilla runs OK, but a modest "ls -l" bombs).  I hope to
get a working version out soon.  It may or may not work ok on the
forthcoming SuSE 9; I hear positive noises about it but haven't been
able to verify this myself (not until I get hold of a copy of 9).

A detailed list of changes, in no particular order:

- Describe --gen-suppressions in the FAQ.

- Syscall __NR_waitpid supported.

- Minor MMX bug fix.

- -v prints program's argv[] at startup.

- More glibc-2.3 suppressions.

- Suppressions for stack underrun bug(s) in the c++ support library
  distributed with Intel Icc 7.0.

- Fix problems reading /proc/self/maps.

- Fix a couple of messages that should have been suppressed by -q, 
  but weren't.

- Make Addrcheck understand "Overlap" suppressions.

- At startup, check if program is statically linked and bail out if so.

- Cachegrind: Auto-detect Intel Pentium-M, also VIA Nehemiah

- Memcheck/addrcheck: minor speed optimisations

- Handle syscall __NR_brk more correctly than before.

- Fixed incorrect allocate/free mismatch errors when using
  operator new(unsigned, std::nothrow_t const&)
  operator new[](unsigned, std::nothrow_t const&)

- Support POSIX pthread spinlocks.

- Fixups for clean compilation with gcc-3.3.1.

- Implemented more opcodes: 
    - push %es
    - push %ds
    - pop %es
    - pop %ds
    - movntq
    - sfence
    - pshufw
    - pavgb
    - ucomiss
    - enter
    - mov imm32, %esp
    - all "in" and "out" opcodes
    - inc/dec %esp
    - A whole bunch of SSE/SSE2 instructions

- Memcheck: don't bomb on SSE/SSE2 code.


Snapshot 20030725 (25 July 2003)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fixes some minor problems in 20030716.

- Fix bugs in overlap checking for strcpy/memcpy etc.

- Do overlap checking with Addrcheck as well as Memcheck.

- Fix this:
      Memcheck: the `impossible' happened:
      get_error_name: unexpected type

- Install headers needed to compile new skins.

- Remove leading spaces and colon in the LD_LIBRARY_PATH / LD_PRELOAD
  passed to non-traced children.

- Fix file descriptor leak in valgrind-listener.

- Fix longstanding bug in which the allocation point of a 
  block resized by realloc was not correctly set.  This may
  have caused confusing error messages.


Snapshot 20030716 (16 July 2003)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

20030716 is a snapshot of our current CVS head (development) branch.
This is the branch which will become valgrind-2.0.  It contains
significant enhancements over the 1.9.X branch.

Despite this being a snapshot of the CVS head, it is believed to be
quite stable -- at least as stable as 1.9.6 or 1.0.4, if not more so
-- and therefore suitable for widespread use.  Please let us know asap
if it causes problems for you.

Two reasons for releasing a snapshot now are:

- It's been a while since 1.9.6, and this snapshot fixes
  various problems that 1.9.6 has with threaded programs 
  on glibc-2.3.X based systems.

- So as to make available improvements in the 2.0 line.

Major changes in 20030716, as compared to 1.9.6:

- More fixes to threading support on glibc-2.3.1 and 2.3.2-based
  systems (SuSE 8.2, Red Hat 9).  If you have had problems
  with inconsistent/illogical behaviour of errno, h_errno or the DNS
  resolver functions in threaded programs, 20030716 should improve
  matters.  This snapshot seems stable enough to run OpenOffice.org
  1.1rc on Red Hat 7.3, SuSE 8.2 and Red Hat 9, and that's a big
  threaded app if ever I saw one.

- Automatic generation of suppression records; you no longer
  need to write them by hand.  Use --gen-suppressions=yes.

- strcpy/memcpy/etc check their arguments for overlaps, when
  running with the Memcheck or Addrcheck skins.

- malloc_usable_size() is now supported.

- new client requests:
    - VALGRIND_COUNT_ERRORS, VALGRIND_COUNT_LEAKS: 
      useful with regression testing
    - VALGRIND_NON_SIMD_CALL[0123]: for running arbitrary functions 
      on real CPU (use with caution!)

- The GDB attach mechanism is more flexible.  Allow the GDB to
  be run to be specified by --gdb-path=/path/to/gdb, and specify
  which file descriptor V will read its input from with
  --input-fd=<number>.

- Cachegrind gives more accurate results (wasn't tracking instructions in
  malloc() and friends previously, is now).

- Complete support for the MMX instruction set.

- Partial support for the SSE and SSE2 instruction sets.  Work for this
  is ongoing.  About half the SSE/SSE2 instructions are done, so
  some SSE based programs may work.  Currently you need to specify
  --skin=addrcheck.  Basically not suitable for real use yet.

- Significant speedups (10%-20%) for standard memory checking.

- Fix assertion failure in pthread_once().

- Fix this:
    valgrind: vg_intercept.c:598 (vgAllRoadsLeadToRome_select): 
              Assertion `ms_end >= ms_now' failed.

- Implement pthread_mutexattr_setpshared.

- Understand Pentium 4 branch hints.  Also implemented a couple more
  obscure x86 instructions.

- Lots of other minor bug fixes.

- We have a decent regression test system, for the first time.
  This doesn't help you directly, but it does make it a lot easier
  for us to track the quality of the system, especially across
  multiple linux distributions.  

  You can run the regression tests with 'make regtest' after 'make
  install' completes.  On SuSE 8.2 and Red Hat 9 I get this:
 
     == 84 tests, 0 stderr failures, 0 stdout failures ==

  On Red Hat 8, I get this:

     == 84 tests, 2 stderr failures, 1 stdout failure ==
     corecheck/tests/res_search               (stdout)
     memcheck/tests/sigaltstack               (stderr)

  sigaltstack is probably harmless.  res_search doesn't work
  on R H 8 even running natively, so I'm not too worried.   

  On Red Hat 7.3, a glibc-2.2.5 system, I get these harmless failures:

     == 84 tests, 2 stderr failures, 1 stdout failure ==
     corecheck/tests/pth_atfork1              (stdout)
     corecheck/tests/pth_atfork1              (stderr)
     memcheck/tests/sigaltstack               (stderr)

  You need to run on a PII system, at least, since some tests
  contain P6-specific instructions, and the test machine needs
  access to the internet so that corecheck/tests/res_search
  (a test that the DNS resolver works) can function.

As ever, thanks for the vast amount of feedback :) and bug reports :(
We may not answer all messages, but we do at least look at all of
them, and tend to fix the most frequently reported bugs.



Version 1.9.6 (7 May 2003 or thereabouts)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Major changes in 1.9.6:

- Improved threading support for glibc >= 2.3.2 (SuSE 8.2,
  RedHat 9, to name but two ...)  It turned out that 1.9.5
  had problems with threading support on glibc >= 2.3.2,
  usually manifested by threaded programs deadlocking in system calls,
  or running unbelievably slowly.  Hopefully these are fixed now.  1.9.6
  is the first valgrind which gives reasonable support for
  glibc-2.3.2.  Also fixed a 2.3.2 problem with pthread_atfork().

- Majorly expanded FAQ.txt.  We've added workarounds for all
  common problems for which a workaround is known.

Minor changes in 1.9.6:

- Fix identification of the main thread's stack.  Incorrect
  identification of it was causing some on-stack addresses to not get
  identified as such.  This only affected the usefulness of some error
  messages; the correctness of the checks made is unchanged.

- Support for kernels >= 2.5.68.

- Dummy implementations of __libc_current_sigrtmin, 
  __libc_current_sigrtmax and __libc_allocate_rtsig, hopefully
  good enough to keep alive programs which previously died for lack of
  them.

- Fix bug in the VALGRIND_DISCARD_TRANSLATIONS client request.

- Fix bug in the DWARF2 debug line info loader, when instructions 
  following each other have source lines far from each other 
  (e.g. with inlined functions).

- Debug info reading: read symbols from both "symtab" and "dynsym"
  sections, rather than merely from the one that comes last in the
  file.

- New syscall support: prctl(), creat(), lookup_dcookie().

- When checking calls to accept(), recvfrom(), getsocketopt(),
  don't complain if buffer values are NULL.

- Try and avoid assertion failures in
  mash_LD_PRELOAD_and_LD_LIBRARY_PATH.

- Minor bug fixes in cg_annotate.



Version 1.9.5 (7 April 2003)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

It occurs to me that it would be helpful for valgrind users to record
in the source distribution the changes in each release.  So I now
attempt to mend my errant ways :-)  Changes in this and future releases
will be documented in the NEWS file in the source distribution.

Major changes in 1.9.5:

- (Critical bug fix): Fix a bug in the FPU simulation.  This was
  causing some floating point conditional tests not to work right.
  Several people reported this.  If you had floating point code which
  didn't work right on 1.9.1 to 1.9.4, it's worth trying 1.9.5.

- Partial support for Red Hat 9.  RH9 uses the new Native Posix 
  Threads Library (NPTL), instead of the older LinuxThreads.  
  This potentially causes problems with V which will take some
  time to correct.  In the meantime we have partially worked around
  this, and so 1.9.5 works on RH9.  Threaded programs still work,
  but they may deadlock, because some system calls (accept, read,
  write, etc) which should be nonblocking, in fact do block.  This
  is a known bug which we are looking into.

  If you can, your best bet (unfortunately) is to avoid using 
  1.9.5 on a Red Hat 9 system, or on any NPTL-based distribution.
  If your glibc is 2.3.1 or earlier, you're almost certainly OK.

Minor changes in 1.9.5:

- Added some #errors to valgrind.h to ensure people don't include
  it accidentally in their sources.  This is a change from 1.0.X
  which was never properly documented.  The right thing to include
  is now memcheck.h.  Some people reported problems and strange
  behaviour when (incorrectly) including valgrind.h in code with 
  1.9.1 -- 1.9.4.  This is no longer possible.

- Add some __extension__ bits and pieces so that gcc configured
  for valgrind-checking compiles even with -Werror.  If you
  don't understand this, ignore it.  Of interest to gcc developers
  only.

- Removed a pointless check which caused problems interworking 
  with Clearcase.  V would complain about shared objects whose
  names did not end ".so", and refuse to run.  This is now fixed.
  In fact it was fixed in 1.9.4 but not documented.

- Fixed a bug causing an assertion failure of "waiters == 1"
  somewhere in vg_scheduler.c, when running large threaded apps,
  notably MySQL.

- Add support for the munlock system call (124).

Some comments about future releases:

1.9.5 is, we hope, the most stable Valgrind so far.  It pretty much
supersedes the 1.0.X branch.  If you are a valgrind packager, please
consider making 1.9.5 available to your users.  You can regard the
1.0.X branch as obsolete: 1.9.5 is stable and vastly superior.  There
are no plans at all for further releases of the 1.0.X branch.

If you want a leading-edge valgrind, consider building the cvs head
(from SourceForge), or getting a snapshot of it.  Current cool stuff
going in includes MMX support (done); SSE/SSE2 support (in progress),
a significant (10-20%) performance improvement (done), and the usual
large collection of minor changes.  Hopefully we will be able to
improve our NPTL support, but no promises.

