[Release notes](http://valgrind.org/docs/manual/dist.news.html):
> Release 3.12.0 (20 October 2016)
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> 3.12.0 is a feature release with many improvements and the usual
> collection of bug fixes.
>
> This release supports X86/Linux, AMD64/Linux, ARM32/Linux,
> ARM64/Linux, PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux,
> MIPS32/Linux, MIPS64/Linux, ARM/Android, ARM64/Android,
> MIPS32/Android, X86/Android, X86/Solaris, AMD64/Solaris, X86/MacOSX
> 10.10 and AMD64/MacOSX 10.10. There is also preliminary support for
> X86/MacOSX 10.11/12, AMD64/MacOSX 10.11/12 and TILEGX/Linux.
>
> * ================== PLATFORM CHANGES =================
>
> * POWER: Support for ISA 3.0 has been added
>
> * mips: support for O32 FPXX ABI has been added.
> * mips: improved recognition of different processors
> * mips: determination of page size now done at run time
>
> * amd64: Partial support for AMD FMA4 instructions.
>
> * arm, arm64: Support for v8 crypto and CRC instructions.
>
> * Improvements and robustification of the Solaris port.
>
> * Preliminary support for MacOS 10.12 (Sierra) has been added.
>
> Whilst 3.12.0 continues to support the 32-bit x86 instruction set, we
> would prefer users to migrate to 64-bit x86 (a.k.a amd64 or x86_64)
> where possible. Valgrind's support for 32-bit x86 has stagnated in
> recent years and has fallen far behind that for 64-bit x86
> instructions. By contrast 64-bit x86 is well supported, up to and
> including AVX2.
>
> * ==================== TOOL CHANGES ====================
>
> * Memcheck:
>
> - Added meta mempool support for describing a custom allocator which:
> - Auto-frees all chunks assuming that destroying a pool destroys all
> objects in the pool
> - Uses itself to allocate other memory blocks
>
> - New flag --ignore-range-below-sp to ignore memory accesses below
> the stack pointer, if you really have to. The related flag
> --workaround-gcc296-bugs=yes is now deprecated. Use
> --ignore-range-below-sp=1024-1 as a replacement.
>
> * DRD:
>
> - Improved thread startup time significantly on non-Linux platforms.
>
> * DHAT
>
> - Added collection of the metric "tot-blocks-allocd"
>
> * ==================== OTHER CHANGES ====================
>
> * Replacement/wrapping of malloc/new related functions is now done not just
> for system libraries by default, but for any globally defined malloc/new
> related function (both in shared libraries and statically linked alternative
> malloc implementations). The dynamic (runtime) linker is excluded, though.
> To only intercept malloc/new related functions in
> system libraries use --soname-synonyms=somalloc=nouserintercepts (where
> "nouserintercepts" can be any non-existing library name).
> This new functionality is not implemented for MacOS X.
>
> * The maximum number of callers in a suppression entry is now equal to
> the maximum size for --num-callers (500).
> Note that --gen-suppressions=yes|all similarly generates suppressions
> containing up to --num-callers frames.
>
> * New and modified GDB server monitor features:
>
> - Valgrind's gdbserver now accepts the command 'catch syscall'.
> Note that you must have GDB >= 7.11 to use 'catch syscall' with
> gdbserver.
>
> * New option --run-cxx-freeres=<yes|no> can be used to change whether
> __gnu_cxx::__freeres() cleanup function is called or not. Default is
> 'yes'.
>
> * Valgrind is able to read compressed debuginfo sections in two formats:
> - zlib ELF gABI format with SHF_COMPRESSED flag (gcc option -gz=zlib)
> - zlib GNU format with .zdebug sections (gcc option -gz=zlib-gnu)
>
> * Modest JIT-cost improvements: the cost of instrumenting code blocks
> for the most common use case (x86_64-linux, Memcheck) has been
> reduced by 10%-15%.
>
> * Improved performance for programs that do a lot of discarding of
> instruction address ranges of 8KB or less.
>
> * The C++ symbol demangler has been updated.
>
> * More robustness against invalid syscall parameters on Linux.
>
> […]