diff --git a/CMakeLists.txt b/CMakeLists.txt index 696440a..a4e6789 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,14 +5,14 @@ cmake_minimum_required(VERSION 3.12) # Based on configure.ac -project(gperftools VERSION 2.10.0 LANGUAGES C CXX +project(gperftools VERSION 2.10.80 LANGUAGES C CXX DESCRIPTION "Performance tools for C++" HOMEPAGE_URL https://github.com/gperftools/gperftools) # Update this value for every release! -set(TCMALLOC_SO_VERSION 9.10.5) -set(PROFILER_SO_VERSION 5.5.5) -set(TCMALLOC_AND_PROFILER_SO_VERSION 10.5.6) +set(TCMALLOC_SO_VERSION 9.11.5) +set(PROFILER_SO_VERSION 5.6.5) +set(TCMALLOC_AND_PROFILER_SO_VERSION 10.6.6) # The user can choose not to compile in the heap-profiler, the # heap-checker, or the cpu-profiler. There's also the possibility diff --git a/NEWS b/NEWS index bd79386..2079b02 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,109 @@ +== 31 July 2023 +gperftools 2.11rc is out! + +Most notable change is that Linux/aarch64 and Linux/riscv are now +fully supported. That is, all unit tests pass on those architectures +(previously the heap leak checker was broken). + +Also notable is that heap leak checker support is officially +deprecated as of this release. All bug fixes from now are on a best +effort basis. For clarity we also declare that it is only expected to +work (for some definition of work) on Linux/x86 (all kinds), +Linux/aarch64, Linux/arm, Linux/ppc (untested as of this writing) and +Linux/mips (untested as well). While some functionality worked in the +past on BSDs, it was never fully functional; and will never be. We +strongly recommend everyone to switch to asan and friends. + +For major internal changes it is also worth mentioning that we now +fully switched to C++-11 std::atomic. All custom OS- and arch-specific +atomic bits have been removed at last. + +Another notable change is that mmap and sbrk hooks facility is now +no-op. We keep API and ABI for formal compatibility, but the calls to +add mmap/sbrk hooks do nothing and return an error (whenever possible +as part of API). There seem to be no users of it anyways, and mmap +replacement API that is part of that facility really screwed up 64-bit +offsets on (some/most) 32-bit systems. Internally for heap profiler +and heap checker we have a new, but non-public API (see mmap_hook.h). + +Most tests now pass on NetBSD x86-64 (I tested on version 9.2). And +only one that fails is new stacktrace test for stacktraces from signal +handler (so there could be some imperfections for cpu profiles). + +We don't warn people away from the libgcc stacktrace capturing method +anymore. In fact users on most recent glibc-s are advised to use it +(pass --enable-libgcc-unwinder-by-default). This is thanks to the +dl_find_object API offered by glibc which allows this implementation +to be fully async-signal-safe. Modern Linux distros should from now on +build their gperftools package with this enabled (other than those +built on top of musl). + +generic_fp and generic_fp_unsafe stacktrace capturing methods have +been expanded for more architectures and even some basic non-Linux +support. We have completely removed old x86-specific frame pointer +stacktrace implementation in favor of those 2. _unsafe one should be +roughly equivalent to the old x86 method. And 'safe' one is +recommended as a new default for those who want FP-based +stacktracing. Safe implementation robustly checks memory before +accessing it, preventing unlikely, but not impossible crashes when +frame pointers are bogus. + +On platforms that support it, we now build gperftools with +"-fno-omit-frame-pointer -momit-leaf-frame-pointer". This makes +gperftools mostly frame-pointer-ful, but without performance hit in +places that matter (this is how Google builds their binaries +BTW). That should cover gcc (at least) on x86, aarch64 and +riscv. Intention for this change is to make distro-shipped +libtcmalloc.so compatible with frame-pointer stacktrace capturing (for +those who still do heap profiling, for example). Of course, passing +--enable-frame-pointers still gives you full frame pointers (i.e. even +for leaf functions). + +There is now support for detecting actual page size at +runtime. tcmalloc will now allocate memory in units of this page +size. It particularly helps on arms with 64k pages to return memory +back to the kernel. But it is somewhat controversial, because it +effectively bumps tcmalloc logical page size on those machines +potentially increasing fragmentation. In any case, there is now a new +environment variable TCMALLOC_OVERRIDE_PAGESIZE allowing people to +override this check. I.e. to either reduce effective page size down to +tcmalloc's logical page size or to increase it. + +MallocExtension::MarkThreadTemporarilyIdle has been changed to be +identical to MarkThreadIdle. MarkThreadTemporarilyIdle is believed to +be unused, anyways. See issue #880 for details. + +There are a whole bunch of smaller fixes. Many of those smaller fixes +had no associated ticket, but some had. People are advised to see here +for list of notable tickets closed in this release: +https://github.com/gperftools/gperftools/issues?q=label%3Afixed-in-2.11+ + +Some of those tickets are quite notable (fixes for rare deadlocks in +cpu profiler ProfilerStop or while capturing heap growth stacktraces +(aka growthz)). + +Here is list of notable contributions: + +* Chris Cambly has contributed initial support for AIX + +* Ali Saidi has contributed SpinlockPause implementation for aarch64 + +* Henrik Reinstädtler has contributed fix for cpuprofiler on aarch64 + OSX + +* Gabriel Marin has backported Chromium's commit for always sanity + checking large frees + +* User zhangyiru has contributed a fix to report the number of leaked + bytes as size_t instead of (usually 32-bit) int. + +* Sergey Fedorov has contributed some fix for building on older + ppc-based OSX-es + +* User tigeran has removed unused using declaration + +Huge thanks to all contributors. + == 30 May 2022 == gperftools 2.10 is out! diff --git a/configure.ac b/configure.ac index 7e27d09..158e5aa 100644 --- a/configure.ac +++ b/configure.ac @@ -4,12 +4,12 @@ # make sure we're interpreted by some minimal autoconf AC_PREREQ([2.69]) -AC_INIT([gperftools],[2.10],[gperftools@googlegroups.com]) +AC_INIT([gperftools],[2.10.80],[gperftools@googlegroups.com]) # Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B) # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -TCMALLOC_SO_VERSION=9:10:5 -PROFILER_SO_VERSION=5:5:5 -TCMALLOC_AND_PROFILER_SO_VERSION=10:5:6 +TCMALLOC_SO_VERSION=9:11:5 +PROFILER_SO_VERSION=5:6:5 +TCMALLOC_AND_PROFILER_SO_VERSION=10:6:6 AC_SUBST(TCMALLOC_SO_VERSION) AC_SUBST(PROFILER_SO_VERSION) diff --git a/src/windows/config.h b/src/windows/config.h index 8c81ddd..ae884c6 100644 --- a/src/windows/config.h +++ b/src/windows/config.h @@ -212,7 +212,7 @@ #define PACKAGE_NAME "gperftools" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "gperftools 2.10" +#define PACKAGE_STRING "gperftools 2.10.80" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gperftools" @@ -221,7 +221,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "2.10" +#define PACKAGE_VERSION "2.10.80" /* How to access the PC from a struct ucontext */ /* #undef PC_FROM_UCONTEXT */ @@ -249,9 +249,6 @@ /* Define internal page size for tcmalloc as number of left bitshift */ /* #undef TCMALLOC_PAGE_SIZE_SHIFT */ -/* Version number of package */ -#define VERSION "2.9.1" - /* C99 says: define this to get the PRI... macros from stdint.h */ #ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 diff --git a/src/windows/gperftools/tcmalloc.h b/src/windows/gperftools/tcmalloc.h index 948d062..50ff3d6 100644 --- a/src/windows/gperftools/tcmalloc.h +++ b/src/windows/gperftools/tcmalloc.h @@ -44,8 +44,8 @@ /* Define the version number so folks can check against it */ #define TC_VERSION_MAJOR 2 #define TC_VERSION_MINOR 10 -#define TC_VERSION_PATCH "" -#define TC_VERSION_STRING "gperftools 2.10" +#define TC_VERSION_PATCH ".80" +#define TC_VERSION_STRING "gperftools 2.10.80" #ifndef PERFTOOLS_NOTHROW