From cddca85e55449d72ef8e8e3a345ae061c5416fd1 Mon Sep 17 00:00:00 2001 From: Till Maas Date: Fri, 11 Aug 2017 21:47:16 +0200 Subject: [PATCH] 2017-08-11: package is now included in RHEL --- .gitignore | 1 - dead.package | 2 + gperftools-2.0-glibc216.patch | 12 - gperftools-2.0-svn190-to-svn218.patch | 1972 ------ gperftools-arm-has-futex.patch | 66 - gperftools-svn-r190.patch | 8016 ------------------------- gperftools.spec | 317 - sources | 1 - 8 files changed, 2 insertions(+), 10385 deletions(-) delete mode 100644 .gitignore create mode 100644 dead.package delete mode 100644 gperftools-2.0-glibc216.patch delete mode 100644 gperftools-2.0-svn190-to-svn218.patch delete mode 100644 gperftools-arm-has-futex.patch delete mode 100644 gperftools-svn-r190.patch delete mode 100644 gperftools.spec delete mode 100644 sources diff --git a/.gitignore b/.gitignore deleted file mode 100644 index a8c6cc7..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/gperftools-2.0.tar.gz diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..1e5c7f4 --- /dev/null +++ b/dead.package @@ -0,0 +1,2 @@ +2017-08-11: package is now included in RHEL + diff --git a/gperftools-2.0-glibc216.patch b/gperftools-2.0-glibc216.patch deleted file mode 100644 index c5b5e2e..0000000 --- a/gperftools-2.0-glibc216.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up gperftools-2.0/src/base/linuxthreads.cc.glibc216 gperftools-2.0/src/base/linuxthreads.cc ---- gperftools-2.0/src/base/linuxthreads.cc.glibc216 2012-08-03 10:36:20.142086568 -0400 -+++ gperftools-2.0/src/base/linuxthreads.cc 2012-08-03 10:36:24.340086631 -0400 -@@ -193,7 +193,7 @@ static volatile int *sig_pids, sig_num_t - /* Signal handler to help us recover from dying while we are attached to - * other threads. - */ --static void SignalHandler(int signum, siginfo_t *si, void *data) { -+static void SignalHandler(int signum, siginfo *si, void *data) { - if (sig_pids != NULL) { - if (signum == SIGABRT) { - while (sig_num_threads-- > 0) { diff --git a/gperftools-2.0-svn190-to-svn218.patch b/gperftools-2.0-svn190-to-svn218.patch deleted file mode 100644 index 771e61a..0000000 --- a/gperftools-2.0-svn190-to-svn218.patch +++ /dev/null @@ -1,1972 +0,0 @@ -Only in gperftools-2.0: aclocal.m4 -Only in gperftools-2.0: aclocal.m4.svn-r190 -diff -urP gperftools-2.0/autogen.sh gperftools-2.0-svn218/autogen.sh ---- gperftools-2.0/autogen.sh 2013-06-04 10:20:21.135844736 -0400 -+++ gperftools-2.0-svn218/autogen.sh 2013-06-04 10:16:58.887841701 -0400 -@@ -1,54 +1,3 @@ - #!/bin/sh - --# Before using, you should figure out all the .m4 macros that your --# configure.m4 script needs and make sure they exist in the m4/ --# directory. --# --# These are the files that this script might edit: --# aclocal.m4 configure Makefile.in src/config.h.in \ --# depcomp config.guess config.sub install-sh missing mkinstalldirs \ --# ltmain.sh --# --# Here's a command you can run to see what files aclocal will import: --# aclocal -I ../autoconf --output=- | sed -n 's/^m4_include..\([^]]*\).*/\1/p' -- --set -ex --rm -rf autom4te.cache -- --trap 'rm -f aclocal.m4.tmp' EXIT -- --# Returns the first binary in $* that exists, or the last arg, if none exists. --WhichOf() { -- for candidate in "$@"; do -- if "$candidate" --version >/dev/null 2>&1; then -- echo "$candidate" -- return -- fi -- done -- echo "$candidate" # the last one in $@ --} -- --# Use version 1.9 of aclocal and automake if available. --ACLOCAL=`WhichOf aclocal-1.9 aclocal` --AUTOMAKE=`WhichOf automake-1.9 automake` --LIBTOOLIZE=`WhichOf glibtoolize libtoolize15 libtoolize14 libtoolize` -- --# aclocal tries to overwrite aclocal.m4 even if the contents haven't --# changed, which is annoying when the file is not open for edit (in --# p4). We work around this by writing to a temp file and just --# updating the timestamp if the file hasn't change. --"$ACLOCAL" --force -I m4 --output=aclocal.m4.tmp --if cmp aclocal.m4.tmp aclocal.m4; then -- touch aclocal.m4 # pretend that we regenerated the file -- rm -f aclocal.m4.tmp --else -- mv aclocal.m4.tmp aclocal.m4 # we did set -e above, so we die if this fails --fi -- --grep -q '^[^#]*AC_PROG_LIBTOOL' configure.ac && "$LIBTOOLIZE" -c -f --autoconf -f -W all,no-obsolete --autoheader -f -W all --"$AUTOMAKE" -a -c -f -W all -- --rm -rf autom4te.cache --exit 0 -+autoreconf -i -Only in gperftools-2.0: autogen.sh.svn-r190 -Only in gperftools-2.0: compile -Only in gperftools-2.0: config.guess -Only in gperftools-2.0: config.sub -Only in gperftools-2.0: configure -diff -urP gperftools-2.0/configure.ac gperftools-2.0-svn218/configure.ac ---- gperftools-2.0/configure.ac 2013-06-04 10:20:21.138844736 -0400 -+++ gperftools-2.0-svn218/configure.ac 2013-06-04 10:16:58.805841700 -0400 -@@ -99,28 +99,7 @@ - [gpt_cv_objcopy_weaken=no]) - AM_CONDITIONAL(HAVE_OBJCOPY_WEAKEN, test $gpt_cv_objcopy_weaken = yes) - --case $host_os in -- *mingw*) -- # Disabling fast install keeps libtool from creating wrapper scripts -- # around the executables it builds. Such scripts have caused failures on -- # MinGW. Using this option means an extra link step is executed during -- # "make install". -- _LT_SET_OPTION([LT_INIT],[disable-fast-install]) --AC_DIAGNOSE([obsolete],[AC_DISABLE_FAST_INSTALL: Remove this warning and the call to _LT_SET_OPTION when you put --the `disable-fast-install' option into LT_INIT's first parameter.]) -- -- ;; -- *) -- _LT_SET_OPTION([LT_INIT],[fast-install]) --AC_DIAGNOSE([obsolete],[AC_ENABLE_FAST_INSTALL: Remove this warning and the call to _LT_SET_OPTION when you put --the `fast-install' option into LT_INIT's first parameter.]) -- -- ;; --esac -- --LT_INIT --AC_SUBST(LIBTOOL_DEPS) --AM_CONDITIONAL(USE_LIBTOOL, test "x$LIBTOOL" != "x") -+LT_INIT([]) - - AC_C_INLINE - AX_C___ATTRIBUTE__ -@@ -134,6 +113,7 @@ - AC_CHECK_TYPES([Elf32_Versym],,, [#include ]) # for vdso_support.h - AC_CHECK_FUNCS(sbrk) # for tcmalloc to get memory - AC_CHECK_FUNCS(geteuid) # for turning off services when run as root -+AC_CHECK_FUNCS(fork) # for the pthread_atfork setup - AC_CHECK_HEADERS(features.h) # for vdso_support.h - AC_CHECK_HEADERS(malloc.h) # some systems define stuff there, others not - AC_CHECK_HEADERS(sys/malloc.h) # where some versions of OS X put malloc.h -@@ -183,6 +163,11 @@ - # This workaround comes from - # http://cygwin.com/ml/cygwin/2004-11/msg00138.html - case "$host" in -+ *-*-mingw*) -+ dnl mingw doesn't have mmap, not worth -+ dnl checking. Especially given that mingw can be a -+ dnl cross-compiler -+ ;; - *-*-cygwin*) - ac_cv_func_mmap_fixed_mapped=yes - AC_DEFINE(HAVE_MMAP, 1, -@@ -310,10 +295,18 @@ - # Note, however, that our code tickles a bug in gcc < 4.1.2 - # involving TLS and -fPIC (which our libraries will use) on x86: - # http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html -+# -+# And mingw also does compile __thread but resultant code actually -+# fails to work correctly at least in some not so ancient version: -+# http://mingw-users.1079350.n2.nabble.com/gcc-4-4-multi-threaded-exception-handling-amp-thread-specifier-not-working-td3440749.html - AC_MSG_CHECKING([for __thread]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) || (__GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ < 2)) - #error gcc has this bug: http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html --#endif], [static __thread int p = 0])], -+#endif -+#if defined(__MINGW32__) -+#error mingw doesn't really support tls -+#endif -+], [static __thread int p = 0])], - [AC_DEFINE(HAVE_TLS, 1, - Define to 1 if compiler supports __thread) - AC_MSG_RESULT([yes])], -Only in gperftools-2.0: configure.ac.svn-r190 -Only in gperftools-2.0: configure.svn-r190 -Only in gperftools-2.0: depcomp -Only in gperftools-2.0/doc: cpuprofile.html.svn-r190 -Only in gperftools-2.0/doc: heapprofile.html.svn-r190 -Only in gperftools-2.0/doc: pprof.see_also.svn-r190 -diff -urP gperftools-2.0/INSTALL gperftools-2.0-svn218/INSTALL ---- gperftools-2.0/INSTALL 2012-02-03 14:40:32.000000000 -0500 -+++ gperftools-2.0-svn218/INSTALL 2013-06-04 10:16:58.886841701 -0400 -@@ -8,6 +8,28 @@ - Perftools-Specific Install Notes - ================================ - -+*** Building from source repository -+ -+As of 2.1 gperftools does not have configure and other autotools -+products checked into it's source repository. This is common practice -+for projects using autotools. -+ -+NOTE: Source releases (.tar.gz that you download from -+code.google.com/p/gperftools) still have all required files just as -+before. Nothing has changed w.r.t. building from .tar.gz releases. -+ -+But, in order to build gperftools checked out from subversion -+repository you need to have autoconf, automake and libtool -+installed. And before running ./configure you have to generate it (and -+a bunch of other files) by running ./autogen.sh script. That script -+will take care of calling correct autotools programs in correct order. -+ -+If you're maintainer then it's business as usual too. Just run make -+dist (or, preferably, make distcheck) and it'll produce .tar.gz or -+.tar.bz2 with all autotools magic already included. So that users can -+build our software without having autotools. -+ -+ - *** NOTE FOR 64-BIT LINUX SYSTEMS - - The glibc built-in stack-unwinder on 64-bit systems has some problems -Only in gperftools-2.0: install-sh -Only in gperftools-2.0: libtool -Only in gperftools-2.0: ltmain.sh -Only in gperftools-2.0/m4: libtool.m4 -Only in gperftools-2.0/m4: libtool.m4.svn-r190 -Only in gperftools-2.0/m4: lt~obsolete.m4 -Only in gperftools-2.0/m4: ltoptions.m4 -Only in gperftools-2.0/m4: ltsugar.m4 -Only in gperftools-2.0/m4: ltversion.m4 -diff -urP gperftools-2.0/Makefile.am gperftools-2.0-svn218/Makefile.am ---- gperftools-2.0/Makefile.am 2013-06-04 10:20:21.140844736 -0400 -+++ gperftools-2.0-svn218/Makefile.am 2013-06-04 10:16:58.887841701 -0400 -@@ -221,7 +221,7 @@ - src/windows/preamble_patcher.cc \ - src/windows/preamble_patcher_with_stub.cc - # patch_functions.cc uses Psapi.lib. MSVC has a #pragma for that, but not us. --libwindows_la_LIBADD = -lPsapi -+libwindows_la_LIBADD = -lpsapi - - SPINLOCK_INCLUDES = src/base/spinlock.h \ - src/base/spinlock_internal.h \ -@@ -238,6 +238,7 @@ - noinst_LTLIBRARIES += libspinlock.la - libspinlock_la_SOURCES = src/base/spinlock.cc \ - src/base/spinlock_internal.cc \ -+ src/base/atomicops-internals-x86.cc \ - $(SPINLOCK_INCLUDES) - - LIBSPINLOCK = libwindows.la libspinlock.la libsysinfo.la liblogging.la -@@ -355,7 +356,7 @@ - $(STACKTRACE_INCLUDES) - libstacktrace_la_LIBADD = $(UNWIND_LIBS) $(LIBSPINLOCK) - STACKTRACE_SYMBOLS = '(GetStackTrace|GetStackFrames|GetStackTraceWithContext|GetStackFramesWithContext)' --libstacktrace_la_LDFLAGS = -export-symbols-regex $(STACKTRACE_SYMBOLS) -+libstacktrace_la_LDFLAGS = -export-symbols-regex $(STACKTRACE_SYMBOLS) $(AM_LDFLAGS) - - ### Unittests - TESTS += stacktrace_unittest -@@ -468,7 +469,7 @@ - -DNO_HEAP_CHECK \ - $(PTHREAD_CFLAGS) -DNDEBUG \ - $(AM_CXXFLAGS) $(NO_EXCEPTIONS) --libtcmalloc_minimal_internal_la_LDFLAGS = $(PTHREAD_CFLAGS) -+libtcmalloc_minimal_internal_la_LDFLAGS = $(PTHREAD_CFLAGS) $(AM_LDFLAGS) - libtcmalloc_minimal_internal_la_LIBADD = $(PTHREAD_LIBS) $(LIBSPINLOCK) - - lib_LTLIBRARIES += libtcmalloc_minimal.la -@@ -477,7 +478,7 @@ - libtcmalloc_minimal_la_CXXFLAGS = -DNO_TCMALLOC_SAMPLES \ - $(PTHREAD_CFLAGS) -DNDEBUG $(AM_CXXFLAGS) - # -version-info gets passed to libtool --libtcmalloc_minimal_la_LDFLAGS = $(PTHREAD_CFLAGS) -version-info @TCMALLOC_SO_VERSION@ -+libtcmalloc_minimal_la_LDFLAGS = $(PTHREAD_CFLAGS) -version-info @TCMALLOC_SO_VERSION@ $(AM_LDFLAGS) - libtcmalloc_minimal_la_LIBADD = libtcmalloc_minimal_internal.la $(PTHREAD_LIBS) - - # For windows, we're playing around with trying to do some stacktrace -@@ -539,6 +540,12 @@ - tcmalloc_minimal_large_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) - tcmalloc_minimal_large_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) - -+TESTS += tcmalloc_minimal_large_heap_fragmentation_unittest -+tcmalloc_minimal_large_heap_fragmentation_unittest_SOURCES = src/tests/large_heap_fragmentation_unittest.cc -+tcmalloc_minimal_large_heap_fragmentation_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) -+tcmalloc_minimal_large_heap_fragmentation_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) -+tcmalloc_minimal_large_heap_fragmentation_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) -+ - # This tests it works to LD_PRELOAD libtcmalloc (tests maybe_threads.cc) - # In theory this should work under mingw, but mingw has trouble running - # shell scripts that end in .exe. And it doesn't seem to build shared -@@ -898,8 +905,16 @@ - - ### Unittests - --TESTS += tcmalloc_unittest --TCMALLOC_UNITTEST_INCLUDES = src/config_for_unittests.h \ -+TESTS += tcmalloc_unittest.sh$(EXEEXT) -+tcmalloc_unittest_sh_SOURCES = src/tests/tcmalloc_unittest.sh -+noinst_SCRIPTS += $(tcmalloc_unittest_sh_SOURCES) -+tcmalloc_unittest.sh$(EXEEXT): $(top_srcdir)/$(tcmalloc_unittest_sh_SOURCES) \ -+ tcmalloc_unittest -+ rm -f $@ -+ cp -p $(top_srcdir)/$(tcmalloc_unittest_sh_SOURCES) $@ -+ -+noinst_PROGRAMS += tcmalloc_unittest -+tcmalloc_unittest_INCLUDES = src/config_for_unittests.h \ - src/gperftools/malloc_extension.h - tcmalloc_unittest_SOURCES = src/tests/tcmalloc_unittest.cc \ - src/tcmalloc.h \ -@@ -956,6 +971,12 @@ - tcmalloc_large_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) - tcmalloc_large_unittest_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) - -+TESTS += tcmalloc_large_heap_fragmentation_unittest -+tcmalloc_large_heap_fragmentation_unittest_SOURCES = src/tests/large_heap_fragmentation_unittest.cc -+tcmalloc_large_heap_fragmentation_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) -+tcmalloc_large_heap_fragmentation_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) -+tcmalloc_large_heap_fragmentation_unittest_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) -+ - TESTS += raw_printer_test - raw_printer_test_SOURCES = src/tests/raw_printer_test.cc - raw_printer_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) -Only in gperftools-2.0: Makefile.am.svn-r190 -Only in gperftools-2.0: Makefile.in -Only in gperftools-2.0: Makefile.in.svn-r190 -Only in gperftools-2.0: missing -Only in gperftools-2.0: mkinstalldirs -Only in gperftools-2.0: NEWS.svn-r190 -diff -urP gperftools-2.0/src/base/atomicops.h gperftools-2.0-svn218/src/base/atomicops.h ---- gperftools-2.0/src/base/atomicops.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/atomicops.h 2013-06-04 10:16:58.375841694 -0400 -@@ -50,6 +50,16 @@ - // implementations on other archtectures will cause your code to break. If you - // do not know what you are doing, avoid these routines, and use a Mutex. - // -+// These following lower-level operations are typically useful only to people -+// implementing higher-level synchronization operations like spinlocks, -+// mutexes, and condition-variables. They combine CompareAndSwap(), a load, or -+// a store with appropriate memory-ordering instructions. "Acquire" operations -+// ensure that no later memory access can be reordered ahead of the operation. -+// "Release" operations ensure that no previous memory access can be reordered -+// after the operation. "Barrier" operations have both "Acquire" and "Release" -+// semantics. A MemoryBarrier() has "Barrier" semantics, but does no memory -+// access. -+// - // It is incorrect to make direct assignments to/from an atomic variable. - // You should use one of the Load or Store routines. The NoBarrier - // versions are provided when no barriers are needed: -@@ -95,10 +105,10 @@ - #include "base/atomicops-internals-arm-v6plus.h" - #elif defined(ARMV3) - #include "base/atomicops-internals-arm-generic.h" --#elif defined(_WIN32) --#include "base/atomicops-internals-windows.h" - #elif defined(__GNUC__) && (defined(__i386) || defined(__x86_64__)) - #include "base/atomicops-internals-x86.h" -+#elif defined(_WIN32) -+#include "base/atomicops-internals-windows.h" - #elif defined(__linux__) && defined(__PPC__) - #include "base/atomicops-internals-linuxppc.h" - #else -@@ -149,6 +159,18 @@ - reinterpret_cast(ptr), new_value); - } - -+AtomicWord Acquire_AtomicExchange(volatile AtomicWord* ptr, -+ AtomicWord new_value) { -+ return Acquire_AtomicExchange( -+ reinterpret_cast(ptr), new_value); -+} -+ -+AtomicWord Release_AtomicExchange(volatile AtomicWord* ptr, -+ AtomicWord new_value) { -+ return Release_AtomicExchange( -+ reinterpret_cast(ptr), new_value); -+} -+ - // Atomically increment *ptr by "increment". Returns the new value of - // *ptr with the increment applied. This routine implies no memory - // barriers. -@@ -164,17 +186,6 @@ - reinterpret_cast(ptr), increment); - } - --// ------------------------------------------------------------------------ --// These following lower-level operations are typically useful only to people --// implementing higher-level synchronization operations like spinlocks, --// mutexes, and condition-variables. They combine CompareAndSwap(), a load, or --// a store with appropriate memory-ordering instructions. "Acquire" operations --// ensure that no later memory access can be reordered ahead of the operation. --// "Release" operations ensure that no previous memory access can be reordered --// after the operation. "Barrier" operations have both "Acquire" and "Release" --// semantics. A MemoryBarrier() has "Barrier" semantics, but does no memory --// access. --// ------------------------------------------------------------------------ - inline AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr, - AtomicWord old_value, - AtomicWord new_value) { -@@ -250,6 +261,8 @@ - Atomic32 old_value, - Atomic32 new_value); - Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, Atomic32 new_value); -+Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr, Atomic32 new_value); -+Atomic32 Release_AtomicExchange(volatile Atomic32* ptr, Atomic32 new_value); - Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, Atomic32 increment); - Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment); -@@ -271,6 +284,8 @@ - Atomic64 old_value, - Atomic64 new_value); - Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value); -+Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value); -+Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value); - Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); - Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); - -diff -urP gperftools-2.0/src/base/atomicops-internals-arm-generic.h gperftools-2.0-svn218/src/base/atomicops-internals-arm-generic.h ---- gperftools-2.0/src/base/atomicops-internals-arm-generic.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/atomicops-internals-arm-generic.h 2013-06-04 10:16:58.378841694 -0400 -@@ -89,6 +89,18 @@ - return old_value; - } - -+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ // pLinuxKernelCmpxchg already has acquire and release barrier semantics. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ -+inline Atomic32 Release_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ // pLinuxKernelCmpxchg already has acquire and release barrier semantics. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - for (;;) { -@@ -176,6 +188,18 @@ - return 0; - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ // pLinuxKernelCmpxchg already has acquire and release barrier semantics. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ // pLinuxKernelCmpxchg already has acquire and release barrier semantics. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - NotImplementedFatalError("NoBarrier_AtomicIncrement"); -diff -urP gperftools-2.0/src/base/atomicops-internals-arm-v6plus.h gperftools-2.0-svn218/src/base/atomicops-internals-arm-v6plus.h ---- gperftools-2.0/src/base/atomicops-internals-arm-v6plus.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/atomicops-internals-arm-v6plus.h 2013-06-04 10:16:58.372841694 -0400 -@@ -94,6 +94,28 @@ - return old; - } - -+inline void MemoryBarrier() { -+#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6KZ__) || defined(__ARM_ARCH_6T2__) -+ uint32_t dest = 0; -+ __asm__ __volatile__("mcr p15,0,%0,c7,c10,5" :"=&r"(dest) : : "memory"); -+#else -+ __asm__ __volatile__("dmb" : : : "memory"); -+#endif -+} -+ -+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ Atomic32 old_value = NoBarrier_AtomicExchange(ptr, new_value); -+ MemoryBarrier(); -+ return old_value; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ MemoryBarrier(); -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - Atomic32 tmp, res; -@@ -110,10 +132,6 @@ - return res; - } - --inline void MemoryBarrier() { -- __asm__ __volatile__("dmb" : : : "memory"); --} -- - inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - Atomic32 tmp, res; -@@ -220,6 +238,19 @@ - return old; - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ Atomic64 old_value = NoBarrier_AtomicExchange(ptr, new_value); -+ MemoryBarrier(); -+ return old_value; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ MemoryBarrier(); -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - int store_failed; -@@ -303,6 +334,18 @@ - return 0; - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ NotImplementedFatalError("Acquire_AtomicExchange"); -+ return 0; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ NotImplementedFatalError("Release_AtomicExchange"); -+ return 0; -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - NotImplementedFatalError("NoBarrier_AtomicIncrement"); -diff -urP gperftools-2.0/src/base/atomicops-internals-linuxppc.h gperftools-2.0-svn218/src/base/atomicops-internals-linuxppc.h ---- gperftools-2.0/src/base/atomicops-internals-linuxppc.h 2013-06-04 10:20:21.141844736 -0400 -+++ gperftools-2.0-svn218/src/base/atomicops-internals-linuxppc.h 2013-06-04 10:16:58.371841694 -0400 -@@ -163,6 +163,26 @@ - return old_value; - } - -+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32 *ptr, -+ Atomic32 new_value) { -+ Atomic32 old_value; -+ do { -+ old_value = *ptr; -+ } while (!OSAtomicCompareAndSwap32Acquire(old_value, new_value, -+ const_cast(ptr))); -+ return old_value; -+} -+ -+inline Atomic32 Release_AtomicExchange(volatile Atomic32 *ptr, -+ Atomic32 new_value) { -+ Atomic32 old_value; -+ do { -+ old_value = *ptr; -+ } while (!OSAtomicCompareAndSwap32Release(old_value, new_value, -+ const_cast(ptr))); -+ return old_value; -+} -+ - inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, - Atomic32 increment) { - return OSAtomicAdd32(increment, const_cast(ptr)); -@@ -294,6 +314,26 @@ - return old_value; - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64 *ptr, -+ Atomic64 new_value) { -+ Atomic64 old_value; -+ do { -+ old_value = *ptr; -+ } while (!OSAtomicCompareAndSwap64Acquire(old_value, new_value, -+ const_cast(ptr))); -+ return old_value; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64 *ptr, -+ Atomic64 new_value) { -+ Atomic64 old_value; -+ do { -+ old_value = *ptr; -+ } while (!OSAtomicCompareAndSwap64Release(old_value, new_value, -+ const_cast(ptr))); -+ return old_value; -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64 *ptr, - Atomic64 increment) { - return OSAtomicAdd64(increment, const_cast(ptr)); -Only in gperftools-2.0/src/base: atomicops-internals-linuxppc.h.svn-r190 -diff -urP gperftools-2.0/src/base/atomicops-internals-macosx.h gperftools-2.0-svn218/src/base/atomicops-internals-macosx.h ---- gperftools-2.0/src/base/atomicops-internals-macosx.h 2012-02-02 16:36:22.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/atomicops-internals-macosx.h 2013-06-04 10:16:58.378841694 -0400 -@@ -132,6 +132,21 @@ - return old_value; - } - -+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32 *ptr, -+ Atomic32 new_value) { -+ Atomic32 old_value; -+ do { -+ old_value = *ptr; -+ } while (!OSAtomicCompareAndSwap32Barrier(old_value, new_value, -+ const_cast(ptr))); -+ return old_value; -+} -+ -+inline Atomic32 Release_AtomicExchange(volatile Atomic32 *ptr, -+ Atomic32 new_value) { -+ return Acquire_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, - Atomic32 increment) { - return OSAtomicAdd32(increment, const_cast(ptr)); -@@ -217,6 +232,21 @@ - return old_value; - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64 *ptr, -+ Atomic64 new_value) { -+ Atomic64 old_value; -+ do { -+ old_value = *ptr; -+ } while (!OSAtomicCompareAndSwap64Barrier(old_value, new_value, -+ const_cast(ptr))); -+ return old_value; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64 *ptr, -+ Atomic64 new_value) { -+ return Acquire_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64 *ptr, - Atomic64 increment) { - return OSAtomicAdd64(increment, const_cast(ptr)); -diff -urP gperftools-2.0/src/base/atomicops-internals-windows.h gperftools-2.0-svn218/src/base/atomicops-internals-windows.h ---- gperftools-2.0/src/base/atomicops-internals-windows.h 2013-06-04 10:20:21.142844736 -0400 -+++ gperftools-2.0-svn218/src/base/atomicops-internals-windows.h 2013-06-04 10:16:58.378841694 -0400 -@@ -137,6 +137,18 @@ - return static_cast(result); - } - -+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ // FastInterlockedExchange has both acquire and release memory barriers. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ -+inline Atomic32 Release_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ // FastInterlockedExchange has both acquire and release memory barriers. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - return FastInterlockedExchangeAdd( -@@ -188,8 +200,7 @@ - } - - inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { -- NoBarrier_AtomicExchange(ptr, value); -- // acts as a barrier in this implementation -+ Acquire_AtomicExchange(ptr, value); - } - - inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { -@@ -478,6 +489,18 @@ - #endif // defined(_WIN64) || defined(__MINGW64__) - - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ // FastInterlockedExchange has both acquire and release memory barriers. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ // FastInterlockedExchange has both acquire and release memory barriers. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, - Atomic64 new_value) { -Only in gperftools-2.0/src/base: atomicops-internals-windows.h.svn-r190 -diff -urP gperftools-2.0/src/base/atomicops-internals-x86.h gperftools-2.0-svn218/src/base/atomicops-internals-x86.h ---- gperftools-2.0/src/base/atomicops-internals-x86.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/atomicops-internals-x86.h 2013-06-04 10:16:58.373841694 -0400 -@@ -89,6 +89,21 @@ - return new_value; // Now it's the previous value. - } - -+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ Atomic32 old_val = NoBarrier_AtomicExchange(ptr, new_value); -+ if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { -+ __asm__ __volatile__("lfence" : : : "memory"); -+ } -+ return old_val; -+} -+ -+inline Atomic32 Release_AtomicExchange(volatile Atomic32* ptr, -+ Atomic32 new_value) { -+ // xchgl already has release memory barrier semantics. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - Atomic32 temp = increment; -@@ -152,7 +167,7 @@ - __asm__ __volatile__("mfence" : : : "memory"); - } else { // mfence is faster but not present on PIII - Atomic32 x = 0; -- NoBarrier_AtomicExchange(&x, 0); // acts as a barrier on PIII -+ Acquire_AtomicExchange(&x, 0); - } - } - -@@ -161,8 +176,7 @@ - *ptr = value; - __asm__ __volatile__("mfence" : : : "memory"); - } else { -- NoBarrier_AtomicExchange(ptr, value); -- // acts as a barrier on PIII -+ Acquire_AtomicExchange(ptr, value); - } - } - #endif -@@ -213,6 +227,21 @@ - return new_value; // Now it's the previous value. - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ Atomic64 old_val = NoBarrier_AtomicExchange(ptr, new_value); -+ if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { -+ __asm__ __volatile__("lfence" : : : "memory"); -+ } -+ return old_val; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_value) { -+ // xchgq already has release memory barrier semantics. -+ return NoBarrier_AtomicExchange(ptr, new_value); -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - Atomic64 temp = increment; -@@ -334,6 +363,20 @@ - return old_val; - } - -+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_val) { -+ Atomic64 old_val = NoBarrier_AtomicExchange(ptr, new_val); -+ if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { -+ __asm__ __volatile__("lfence" : : : "memory"); -+ } -+ return old_val; -+} -+ -+inline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, -+ Atomic64 new_val) { -+ return NoBarrier_AtomicExchange(ptr, new_val); -+} -+ - inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - Atomic64 old_val, new_val; -diff -urP gperftools-2.0/src/base/basictypes.h gperftools-2.0-svn218/src/base/basictypes.h ---- gperftools-2.0/src/base/basictypes.h 2013-06-04 10:20:21.142844736 -0400 -+++ gperftools-2.0-svn218/src/base/basictypes.h 2013-06-04 10:16:58.372841694 -0400 -@@ -334,10 +334,13 @@ - #if defined(HAVE___ATTRIBUTE__) - # if (defined(__i386__) || defined(__x86_64__)) - # define CACHELINE_ALIGNED __attribute__((aligned(64))) --# elif defined(__arm__) --# define CACHELINE_ALIGNED __attribute__((aligned(32))) - # elif (defined(__PPC__) || defined(__PPC64__)) - # define CACHELINE_ALIGNED __attribute__((aligned(16))) -+# elif (defined(__arm__)) -+# define CACHELINE_ALIGNED __attribute__((aligned(64))) -+ // some ARMs have shorter cache lines (ARM1176JZF-S is 32 bytes for example) but obviously 64-byte aligned implies 32-byte aligned -+# else -+# error Could not determine cache line length - unknown architecture - # endif - #else - # define CACHELINE_ALIGNED -Only in gperftools-2.0/src/base: basictypes.h.svn-r190 -Only in gperftools-2.0/src/base: cycleclock.h.svn-r190 -diff -urP gperftools-2.0/src/base/linux_syscall_support.h gperftools-2.0-svn218/src/base/linux_syscall_support.h ---- gperftools-2.0/src/base/linux_syscall_support.h 2013-06-04 10:20:21.142844736 -0400 -+++ gperftools-2.0-svn218/src/base/linux_syscall_support.h 2013-06-04 10:16:58.379841694 -0400 -@@ -148,6 +148,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -404,24 +406,24 @@ - }; - #elif defined(__x86_64__) - struct kernel_stat { -- unsigned long st_dev; -- unsigned long st_ino; -- unsigned long st_nlink; -+ uint64_t st_dev; -+ uint64_t st_ino; -+ uint64_t st_nlink; - unsigned st_mode; - unsigned st_uid; - unsigned st_gid; - unsigned __pad0; -- unsigned long st_rdev; -- long st_size; -- long st_blksize; -- long st_blocks; -- unsigned long st_atime_; -- unsigned long st_atime_nsec_; -- unsigned long st_mtime_; -- unsigned long st_mtime_nsec_; -- unsigned long st_ctime_; -- unsigned long st_ctime_nsec_; -- long __unused[3]; -+ uint64_t st_rdev; -+ int64_t st_size; -+ int64_t st_blksize; -+ int64_t st_blocks; -+ uint64_t st_atime_; -+ uint64_t st_atime_nsec_; -+ uint64_t st_mtime_; -+ uint64_t st_mtime_nsec_; -+ uint64_t st_ctime_; -+ uint64_t st_ctime_nsec_; -+ int64_t __unused[3]; - }; - #elif defined(__PPC__) - struct kernel_stat { -@@ -1013,74 +1015,141 @@ - * location (e.g. when using the clone() system call with the CLONE_VM - * option). - */ -+ #undef LSS_ENTRYPOINT -+ #define LSS_ENTRYPOINT "syscall\n" -+ -+ /* The x32 ABI has 32 bit longs, but the syscall interface is 64 bit. -+ * We need to explicitly cast to an unsigned 64 bit type to avoid implicit -+ * sign extension. We can't cast pointers directly because those are -+ * 32 bits, and gcc will dump ugly warnings about casting from a pointer -+ * to an integer of a different size. -+ */ -+ #undef LSS_SYSCALL_ARG -+ #define LSS_SYSCALL_ARG(a) ((uint64_t)(uintptr_t)(a)) -+ #undef _LSS_RETURN -+ #define _LSS_RETURN(type, res, cast) \ -+ do { \ -+ if ((uint64_t)(res) >= (uint64_t)(-4095)) { \ -+ LSS_ERRNO = -(res); \ -+ res = -1; \ -+ } \ -+ return (type)(cast)(res); \ -+ } while (0) -+ #undef LSS_RETURN -+ #define LSS_RETURN(type, res) _LSS_RETURN(type, res, uintptr_t) -+ -+ #undef _LSS_BODY -+ #define _LSS_BODY(nr, type, name, cast, ...) \ -+ long long __res; \ -+ __asm__ __volatile__(LSS_BODY_ASM##nr LSS_ENTRYPOINT \ -+ : "=a" (__res) \ -+ : "0" (__NR_##name) LSS_BODY_ARG##nr(__VA_ARGS__) \ -+ : LSS_BODY_CLOBBER##nr "r11", "rcx", "memory"); \ -+ _LSS_RETURN(type, __res, cast) - #undef LSS_BODY -- #define LSS_BODY(type,name, ...) \ -- long __res; \ -- __asm__ __volatile__("syscall" : "=a" (__res) : "0" (__NR_##name), \ -- ##__VA_ARGS__ : "r11", "rcx", "memory"); \ -- LSS_RETURN(type, __res) -+ #define LSS_BODY(nr, type, name, args...) \ -+ _LSS_BODY(nr, type, name, uintptr_t, ## args) -+ -+ #undef LSS_BODY_ASM0 -+ #undef LSS_BODY_ASM1 -+ #undef LSS_BODY_ASM2 -+ #undef LSS_BODY_ASM3 -+ #undef LSS_BODY_ASM4 -+ #undef LSS_BODY_ASM5 -+ #undef LSS_BODY_ASM6 -+ #define LSS_BODY_ASM0 -+ #define LSS_BODY_ASM1 LSS_BODY_ASM0 -+ #define LSS_BODY_ASM2 LSS_BODY_ASM1 -+ #define LSS_BODY_ASM3 LSS_BODY_ASM2 -+ #define LSS_BODY_ASM4 LSS_BODY_ASM3 "movq %5,%%r10;" -+ #define LSS_BODY_ASM5 LSS_BODY_ASM4 "movq %6,%%r8;" -+ #define LSS_BODY_ASM6 LSS_BODY_ASM5 "movq %7,%%r9;" -+ -+ #undef LSS_BODY_CLOBBER0 -+ #undef LSS_BODY_CLOBBER1 -+ #undef LSS_BODY_CLOBBER2 -+ #undef LSS_BODY_CLOBBER3 -+ #undef LSS_BODY_CLOBBER4 -+ #undef LSS_BODY_CLOBBER5 -+ #undef LSS_BODY_CLOBBER6 -+ #define LSS_BODY_CLOBBER0 -+ #define LSS_BODY_CLOBBER1 LSS_BODY_CLOBBER0 -+ #define LSS_BODY_CLOBBER2 LSS_BODY_CLOBBER1 -+ #define LSS_BODY_CLOBBER3 LSS_BODY_CLOBBER2 -+ #define LSS_BODY_CLOBBER4 LSS_BODY_CLOBBER3 "r10", -+ #define LSS_BODY_CLOBBER5 LSS_BODY_CLOBBER4 "r8", -+ #define LSS_BODY_CLOBBER6 LSS_BODY_CLOBBER5 "r9", -+ -+ #undef LSS_BODY_ARG0 -+ #undef LSS_BODY_ARG1 -+ #undef LSS_BODY_ARG2 -+ #undef LSS_BODY_ARG3 -+ #undef LSS_BODY_ARG4 -+ #undef LSS_BODY_ARG5 -+ #undef LSS_BODY_ARG6 -+ #define LSS_BODY_ARG0() -+ #define LSS_BODY_ARG1(arg1) \ -+ LSS_BODY_ARG0(), "D" (arg1) -+ #define LSS_BODY_ARG2(arg1, arg2) \ -+ LSS_BODY_ARG1(arg1), "S" (arg2) -+ #define LSS_BODY_ARG3(arg1, arg2, arg3) \ -+ LSS_BODY_ARG2(arg1, arg2), "d" (arg3) -+ #define LSS_BODY_ARG4(arg1, arg2, arg3, arg4) \ -+ LSS_BODY_ARG3(arg1, arg2, arg3), "r" (arg4) -+ #define LSS_BODY_ARG5(arg1, arg2, arg3, arg4, arg5) \ -+ LSS_BODY_ARG4(arg1, arg2, arg3, arg4), "r" (arg5) -+ #define LSS_BODY_ARG6(arg1, arg2, arg3, arg4, arg5, arg6) \ -+ LSS_BODY_ARG5(arg1, arg2, arg3, arg4, arg5), "r" (arg6) -+ - #undef _syscall0 - #define _syscall0(type,name) \ - type LSS_NAME(name)() { \ -- LSS_BODY(type, name); \ -+ LSS_BODY(0, type, name); \ - } - #undef _syscall1 - #define _syscall1(type,name,type1,arg1) \ - type LSS_NAME(name)(type1 arg1) { \ -- LSS_BODY(type, name, "D" ((long)(arg1))); \ -+ LSS_BODY(1, type, name, LSS_SYSCALL_ARG(arg1)); \ - } - #undef _syscall2 - #define _syscall2(type,name,type1,arg1,type2,arg2) \ - type LSS_NAME(name)(type1 arg1, type2 arg2) { \ -- LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2))); \ -+ LSS_BODY(2, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2));\ - } - #undef _syscall3 - #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ - type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ -- LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2)), \ -- "d" ((long)(arg3))); \ -+ LSS_BODY(3, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ -+ LSS_SYSCALL_ARG(arg3)); \ - } - #undef _syscall4 - #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ - type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ -- long __res; \ -- __asm__ __volatile__("movq %5,%%r10; syscall" : \ -- "=a" (__res) : "0" (__NR_##name), \ -- "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ -- "r" ((long)(arg4)) : "r10", "r11", "rcx", "memory"); \ -- LSS_RETURN(type, __res); \ -+ LSS_BODY(4, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ -+ LSS_SYSCALL_ARG(arg3), LSS_SYSCALL_ARG(arg4));\ - } - #undef _syscall5 - #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ - type5,arg5) \ - type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ - type5 arg5) { \ -- long __res; \ -- __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; syscall" : \ -- "=a" (__res) : "0" (__NR_##name), \ -- "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ -- "r" ((long)(arg4)), "r" ((long)(arg5)) : \ -- "r8", "r10", "r11", "rcx", "memory"); \ -- LSS_RETURN(type, __res); \ -+ LSS_BODY(5, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ -+ LSS_SYSCALL_ARG(arg3), LSS_SYSCALL_ARG(arg4), \ -+ LSS_SYSCALL_ARG(arg5)); \ - } - #undef _syscall6 - #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ - type5,arg5,type6,arg6) \ - type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ - type5 arg5, type6 arg6) { \ -- long __res; \ -- __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; movq %7,%%r9;" \ -- "syscall" : \ -- "=a" (__res) : "0" (__NR_##name), \ -- "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ -- "r" ((long)(arg4)), "r" ((long)(arg5)), "r" ((long)(arg6)) : \ -- "r8", "r9", "r10", "r11", "rcx", "memory"); \ -- LSS_RETURN(type, __res); \ -+ LSS_BODY(6, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ -+ LSS_SYSCALL_ARG(arg3), LSS_SYSCALL_ARG(arg4), \ -+ LSS_SYSCALL_ARG(arg5), LSS_SYSCALL_ARG(arg6));\ - } - LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, - int flags, void *arg, int *parent_tidptr, - void *newtls, int *child_tidptr) { -- long __res; -+ long long __res; - { - __asm__ __volatile__(/* if (fn == NULL) - * return -EINVAL; -@@ -1145,8 +1214,13 @@ - "1:\n" - : "=a" (__res) - : "0"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit), -- "r"(fn), "S"(child_stack), "D"(flags), "r"(arg), -- "d"(parent_tidptr), "g"(newtls), "g"(child_tidptr) -+ "r"(LSS_SYSCALL_ARG(fn)), -+ "S"(LSS_SYSCALL_ARG(child_stack)), -+ "D"(LSS_SYSCALL_ARG(flags)), -+ "r"(LSS_SYSCALL_ARG(arg)), -+ "d"(LSS_SYSCALL_ARG(parent_tidptr)), -+ "r"(LSS_SYSCALL_ARG(newtls)), -+ "r"(LSS_SYSCALL_ARG(child_tidptr)) - : "rsp", "memory", "r8", "r10", "r11", "rcx"); - } - LSS_RETURN(int, __res); -@@ -1159,7 +1233,7 @@ - * Unfortunately, we cannot just reference the glibc version of this - * function, as glibc goes out of its way to make it inaccessible. - */ -- void (*res)(void); -+ long long res; - __asm__ __volatile__("call 2f\n" - "0:.align 16\n" - "1:movq %1,%%rax\n" -@@ -1168,7 +1242,7 @@ - "addq $(1b-0b),%0\n" - : "=a" (res) - : "i" (__NR_rt_sigreturn)); -- return res; -+ return (void (*)(void))(uintptr_t)res; - } - #elif defined(__arm__) - /* Most definitions of _syscallX() neglect to mark "memory" as being -@@ -1797,8 +1871,16 @@ - LSS_INLINE _syscall0(pid_t, _gettid) - LSS_INLINE _syscall2(int, kill, pid_t, p, - int, s) -- LSS_INLINE _syscall3(off_t, lseek, int, f, -- off_t, o, int, w) -+ #if defined(__x86_64__) -+ /* Need to make sure off_t isn't truncated to 32-bits under x32. */ -+ LSS_INLINE off_t LSS_NAME(lseek)(int f, off_t o, int w) { -+ _LSS_BODY(3, off_t, lseek, off_t, LSS_SYSCALL_ARG(f), (uint64_t)(o), -+ LSS_SYSCALL_ARG(w)); -+ } -+ #else -+ LSS_INLINE _syscall3(off_t, lseek, int, f, -+ off_t, o, int, w) -+ #endif - LSS_INLINE _syscall2(int, munmap, void*, s, - size_t, l) - LSS_INLINE _syscall5(void*, _mremap, void*, o, -@@ -1835,10 +1917,13 @@ - int, t, int, p) - #endif - #if defined(__x86_64__) -- LSS_INLINE _syscall6(void*, mmap, void*, s, -- size_t, l, int, p, -- int, f, int, d, -- __off64_t, o) -+ /* Need to make sure __off64_t isn't truncated to 32-bits under x32. */ -+ LSS_INLINE void* LSS_NAME(mmap)(void *s, size_t l, int p, int f, int d, -+ __off64_t o) { -+ LSS_BODY(6, void*, mmap, LSS_SYSCALL_ARG(s), LSS_SYSCALL_ARG(l), -+ LSS_SYSCALL_ARG(p), LSS_SYSCALL_ARG(f), -+ LSS_SYSCALL_ARG(d), (uint64_t)(o)); -+ } - - LSS_INLINE int LSS_NAME(sigaction)(int signum, - const struct kernel_sigaction *act, -Only in gperftools-2.0/src/base: linux_syscall_support.h.svn-r190 -Only in gperftools-2.0/src/base: linuxthreads.cc.svn-r190 -diff -urP gperftools-2.0/src/base/spinlock.h gperftools-2.0-svn218/src/base/spinlock.h ---- gperftools-2.0/src/base/spinlock.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/spinlock.h 2013-06-04 10:16:58.374841694 -0400 -@@ -31,11 +31,6 @@ - * Author: Sanjay Ghemawat - */ - --// --// Fast spinlocks (at least on x86, a lock/unlock pair is approximately --// half the cost of a Mutex because the unlock just does a store instead --// of a compare-and-swap which is expensive). -- - // SpinLock is async signal safe. - // If used within a signal handler, all lock holders - // should block the signal even outside the signal handler. -@@ -95,10 +90,9 @@ - // TODO(csilvers): uncomment the annotation when we figure out how to - // support this macro with 0 args (see thread_annotations.h) - inline void Unlock() /*UNLOCK_FUNCTION()*/ { -- uint64 wait_cycles = -- static_cast(base::subtle::NoBarrier_Load(&lockword_)); - ANNOTATE_RWLOCK_RELEASED(this, 1); -- base::subtle::Release_Store(&lockword_, kSpinLockFree); -+ uint64 wait_cycles = static_cast( -+ base::subtle::Release_AtomicExchange(&lockword_, kSpinLockFree)); - if (wait_cycles != kSpinLockHeld) { - // Collect contentionz profile info, and speed the wakeup of any waiter. - // The wait_cycles value indicates how long this thread spent waiting -Only in gperftools-2.0/src/base: spinlock_internal.cc.svn-r190 -Only in gperftools-2.0/src/base: sysinfo.cc.svn-r190 -diff -urP gperftools-2.0/src/base/sysinfo.h gperftools-2.0-svn218/src/base/sysinfo.h ---- gperftools-2.0/src/base/sysinfo.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/base/sysinfo.h 2013-06-04 10:16:58.375841694 -0400 -@@ -38,7 +38,7 @@ - #include - #if (defined(_WIN32) || defined(__MINGW32__)) && (!defined(__CYGWIN__) && !defined(__CYGWIN32__)) - #include // for DWORD --#include // for CreateToolhelp32Snapshot -+#include // for CreateToolhelp32Snapshot - #endif - #ifdef HAVE_UNISTD_H - #include // for pid_t -diff -urP gperftools-2.0/src/central_freelist.h gperftools-2.0-svn218/src/central_freelist.h ---- gperftools-2.0/src/central_freelist.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/central_freelist.h 2013-06-04 10:16:57.724841684 -0400 -@@ -79,6 +79,16 @@ - // page full of 5-byte objects would have 2 bytes memory overhead). - size_t OverheadBytes(); - -+ // Lock/Unlock the internal SpinLock. Used on the pthread_atfork call -+ // to set the lock in a consistent state before the fork. -+ void Lock() { -+ lock_.Lock(); -+ } -+ -+ void Unlock() { -+ lock_.Unlock(); -+ } -+ - private: - // TransferCache is used to cache transfers of - // sizemap.num_objects_to_move(size_class) back and forth between -diff -urP gperftools-2.0/src/common.cc gperftools-2.0-svn218/src/common.cc ---- gperftools-2.0/src/common.cc 2013-06-04 10:20:21.143844736 -0400 -+++ gperftools-2.0-svn218/src/common.cc 2013-06-04 10:16:57.724841684 -0400 -@@ -30,12 +30,32 @@ - // --- - // Author: Sanjay Ghemawat - -+#include // for getenv and strtol - #include "config.h" - #include "common.h" - #include "system-alloc.h" -+#include "base/spinlock.h" - - namespace tcmalloc { - -+// Define the maximum number of object per classe type to transfer between -+// thread and central caches. -+static int32 FLAGS_tcmalloc_transfer_num_objects; -+ -+static const int32 kDefaultTransferNumObjecs = 32768; -+ -+// The init function is provided to explicit initialize the variable value -+// from the env. var to avoid C++ global construction that might defer its -+// initialization after a malloc/new call. -+static inline void InitTCMallocTransferNumObjects() -+{ -+ if (UNLIKELY(FLAGS_tcmalloc_transfer_num_objects == 0)) { -+ const char *envval = getenv("TCMALLOC_TRANSFER_NUM_OBJ"); -+ FLAGS_tcmalloc_transfer_num_objects = !envval ? kDefaultTransferNumObjecs : -+ strtol(envval, NULL, 10); -+ } -+} -+ - // Note: the following only works for "n"s that fit in 32-bits, but - // that is fine since we only use it for small sizes. - static inline int LgFloor(size_t n) { -@@ -90,13 +110,16 @@ - // - We go to the central freelist too often and we have to acquire - // its lock each time. - // This value strikes a balance between the constraints above. -- if (num > 32) num = 32; -+ if (num > FLAGS_tcmalloc_transfer_num_objects) -+ num = FLAGS_tcmalloc_transfer_num_objects; - - return num; - } - - // Initialize the mapping arrays - void SizeMap::Init() { -+ InitTCMallocTransferNumObjects(); -+ - // Do some sanity checking on add_amount[]/shift_amount[]/class_array[] - if (ClassIndex(0) < 0) { - Log(kCrash, __FILE__, __LINE__, -@@ -189,12 +212,56 @@ - - // Metadata allocator -- keeps stats about how many bytes allocated. - static uint64_t metadata_system_bytes_ = 0; -+static const size_t kMetadataAllocChunkSize = 8*1024*1024; -+static const size_t kMetadataBigAllocThreshold = kMetadataAllocChunkSize / 8; -+// usually malloc uses larger alignments, but because metadata cannot -+// have and fancy simd types, aligning on pointer size seems fine -+static const size_t kMetadataAllignment = sizeof(void *); -+ -+static char *metadata_chunk_alloc_; -+static size_t metadata_chunk_avail_; -+ -+static SpinLock metadata_alloc_lock(SpinLock::LINKER_INITIALIZED); -+ - void* MetaDataAlloc(size_t bytes) { -- void* result = TCMalloc_SystemAlloc(bytes, NULL); -- if (result != NULL) { -- metadata_system_bytes_ += bytes; -+ if (bytes >= kMetadataAllocChunkSize) { -+ void *rv = TCMalloc_SystemAlloc(bytes, -+ NULL, kMetadataAllignment); -+ if (rv != NULL) { -+ metadata_system_bytes_ += bytes; -+ } -+ return rv; - } -- return result; -+ -+ SpinLockHolder h(&metadata_alloc_lock); -+ -+ // the following works by essentially turning address to integer of -+ // log_2 kMetadataAllignment size and negating it. I.e. negated -+ // value + original value gets 0 and that's what we want modulo -+ // kMetadataAllignment. Note, we negate before masking higher bits -+ // off, otherwise we'd have to mask them off after negation anyways. -+ intptr_t alignment = -reinterpret_cast(metadata_chunk_alloc_) & (kMetadataAllignment-1); -+ -+ if (metadata_chunk_avail_ < bytes + alignment) { -+ size_t real_size; -+ void *ptr = TCMalloc_SystemAlloc(kMetadataAllocChunkSize, -+ &real_size, kMetadataAllignment); -+ if (ptr == NULL) { -+ return NULL; -+ } -+ -+ metadata_chunk_alloc_ = static_cast(ptr); -+ metadata_chunk_avail_ = real_size; -+ -+ alignment = 0; -+ } -+ -+ void *rv = static_cast(metadata_chunk_alloc_ + alignment); -+ bytes += alignment; -+ metadata_chunk_alloc_ += bytes; -+ metadata_chunk_avail_ -= bytes; -+ metadata_system_bytes_ += bytes; -+ return rv; - } - - uint64_t metadata_system_bytes() { return metadata_system_bytes_; } -Only in gperftools-2.0/src: common.cc.svn-r190 -diff -urP gperftools-2.0/src/common.h gperftools-2.0-svn218/src/common.h ---- gperftools-2.0/src/common.h 2013-06-04 10:20:21.143844736 -0400 -+++ gperftools-2.0-svn218/src/common.h 2013-06-04 10:16:58.382841694 -0400 -@@ -80,7 +80,7 @@ - static const size_t kMinAlign = 16; - #elif defined(TCMALLOC_ALIGN_8BYTES) - static const size_t kPageShift = 13; --static const size_t kNumClasses = 93; -+static const size_t kNumClasses = 95; - // Unless we force to use 8 bytes alignment we use an alignment of - // at least 16 bytes to statisfy requirements for some SSE types. - // Keep in mind when using the 16 bytes alignment you can have a space -@@ -88,7 +88,7 @@ - static const size_t kMinAlign = 8; - #else - static const size_t kPageShift = 13; --static const size_t kNumClasses = 86; -+static const size_t kNumClasses = 88; - static const size_t kMinAlign = 16; - #endif - static const size_t kMaxThreadCacheSize = 4 << 20; -Only in gperftools-2.0/src: common.h.svn-r190 -diff -urP gperftools-2.0/src/config.h.in gperftools-2.0-svn218/src/config.h.in ---- gperftools-2.0/src/config.h.in 2013-06-04 10:20:21.143844736 -0400 -+++ gperftools-2.0-svn218/src/config.h.in 2013-06-04 10:16:57.816841685 -0400 -@@ -56,6 +56,9 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_FEATURES_H - -+/* Define to 1 if you have the `fork' function. */ -+#undef HAVE_FORK -+ - /* Define to 1 if you have the `geteuid' function. */ - #undef HAVE_GETEUID - -Only in gperftools-2.0/src: config.h.in.svn-r190 -Only in gperftools-2.0/src: debugallocation.cc.svn-r190 -Only in gperftools-2.0/src: getpc.h.svn-r190 -Only in gperftools-2.0/src/gperftools: malloc_extension.h.svn-r190 -Only in gperftools-2.0/src/gperftools: tcmalloc.h.in.svn-r190 -Only in gperftools-2.0/src: heap-checker.cc.svn-r190 -Only in gperftools-2.0/src: heap-profiler.cc.svn-r190 -Only in gperftools-2.0/src: heap-profile-table.cc.svn-r190 -Only in gperftools-2.0/src: malloc_extension.cc.svn-r190 -Only in gperftools-2.0/src: malloc_hook-inl.h.svn-r190 -Only in gperftools-2.0/src: memory_region_map.cc.svn-r190 -diff -urP gperftools-2.0/src/page_heap.cc gperftools-2.0-svn218/src/page_heap.cc ---- gperftools-2.0/src/page_heap.cc 2013-06-04 10:20:21.145844736 -0400 -+++ gperftools-2.0-svn218/src/page_heap.cc 2013-06-04 10:16:58.070841689 -0400 -@@ -108,6 +108,8 @@ - return AllocLarge(n); // May be NULL - } - -+static const size_t kForcedCoalesceInterval = 128*1024*1024; -+ - Span* PageHeap::New(Length n) { - ASSERT(Check()); - ASSERT(n > 0); -@@ -116,6 +118,38 @@ - if (result != NULL) - return result; - -+ if (stats_.free_bytes != 0 && stats_.unmapped_bytes != 0 -+ && stats_.free_bytes + stats_.unmapped_bytes >= stats_.system_bytes / 4 -+ && (stats_.system_bytes / kForcedCoalesceInterval -+ != (stats_.system_bytes + (n << kPageShift)) / kForcedCoalesceInterval)) { -+ // We're about to grow heap, but there are lots of free pages. -+ // tcmalloc's design decision to keep unmapped and free spans -+ // separately and never coalesce them means that sometimes there -+ // can be free pages span of sufficient size, but it consists of -+ // "segments" of different type so page heap search cannot find -+ // it. In order to prevent growing heap and wasting memory in such -+ // case we're going to unmap all free pages. So that all free -+ // spans are maximally coalesced. -+ // -+ // We're also limiting 'rate' of going into this path to be at -+ // most once per 128 megs of heap growth. Otherwise programs that -+ // grow heap frequently (and that means by small amount) could be -+ // penalized with higher count of minor page faults. -+ // -+ // See also large_heap_fragmentation_unittest.cc and -+ // https://code.google.com/p/gperftools/issues/detail?id=368 -+ ReleaseAtLeastNPages(static_cast(0x7fffffff)); -+ -+ // then try again. If we are forced to grow heap because of large -+ // spans fragmentation and not because of problem described above, -+ // then at the very least we've just unmapped free but -+ // insufficiently big large spans back to OS. So in case of really -+ // unlucky memory fragmentation we'll be consuming virtual address -+ // space, but not real memory -+ result = SearchFreeAndLargeLists(n); -+ if (result != NULL) return result; -+ } -+ - // Grow the heap and try again. - if (!GrowHeap(n)) { - ASSERT(Check()); -Only in gperftools-2.0/src: page_heap.cc.svn-r190 -Only in gperftools-2.0/src: page_heap.h.svn-r190 -Only in gperftools-2.0/src: pprof.svn-r190 -Only in gperftools-2.0/src: profiler.cc.svn-r190 -diff -urP gperftools-2.0/src/static_vars.cc gperftools-2.0-svn218/src/static_vars.cc ---- gperftools-2.0/src/static_vars.cc 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/static_vars.cc 2013-06-04 10:16:57.817841685 -0400 -@@ -39,6 +39,39 @@ - - namespace tcmalloc { - -+#if defined(HAVE_FORK) && defined(HAVE_PTHREAD) -+// These following two functions are registered via pthread_atfork to make -+// sure the central_cache locks remain in a consisten state in the forked -+// version of the thread. -+ -+static -+void CentralCacheLockAll() -+{ -+ Static::pageheap_lock()->Lock(); -+ for (int i = 0; i < kNumClasses; ++i) -+ Static::central_cache()[i].Lock(); -+} -+ -+static -+void CentralCacheUnlockAll() -+{ -+ for (int i = 0; i < kNumClasses; ++i) -+ Static::central_cache()[i].Unlock(); -+ Static::pageheap_lock()->Unlock(); -+} -+#endif -+ -+static inline -+void SetupAtForkLocksHandler() -+{ -+#if defined(HAVE_FORK) && defined(HAVE_PTHREAD) -+ pthread_atfork(CentralCacheLockAll, // parent calls before fork -+ CentralCacheUnlockAll, // parent calls after fork -+ CentralCacheUnlockAll); // child calls after fork -+#endif -+} -+ -+ - SpinLock Static::pageheap_lock_(SpinLock::LINKER_INITIALIZED); - SizeMap Static::sizemap_; - CentralFreeListPadded Static::central_cache_[kNumClasses]; -@@ -49,6 +82,7 @@ - StackTrace* Static::growth_stacks_ = NULL; - PageHeap* Static::pageheap_ = NULL; - -+ - void Static::InitStaticVars() { - sizemap_.Init(); - span_allocator_.Init(); -@@ -61,6 +95,8 @@ - for (int i = 0; i < kNumClasses; ++i) { - central_cache_[i].Init(i); - } -+ SetupAtForkLocksHandler(); -+ - // It's important to have PageHeap allocated, not in static storage, - // so that HeapLeakChecker does not consider all the byte patterns stored - // in is caches as pointers that are sources of heap object liveness, -Only in gperftools-2.0/src: static_vars.h.svn-r190 -Only in gperftools-2.0/src: symbolize.cc.svn-r190 -Only in gperftools-2.0/src: system-alloc.cc.svn-r190 -Only in gperftools-2.0/src: system-alloc.h.svn-r190 -Only in gperftools-2.0/src: tcmalloc.cc.svn-r190 -diff -urP gperftools-2.0/src/tests/atomicops_unittest.cc gperftools-2.0-svn218/src/tests/atomicops_unittest.cc ---- gperftools-2.0/src/tests/atomicops_unittest.cc 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/tests/atomicops_unittest.cc 2013-06-04 10:16:58.072841689 -0400 -@@ -38,13 +38,14 @@ - #define GG_ULONGLONG(x) static_cast(x) - - template --static void TestAtomicIncrement() { -+static void TestAtomicIncrement(AtomicType (*atomic_increment_func) -+ (volatile AtomicType*, AtomicType)) { - // For now, we just test single threaded execution - -- // use a guard value to make sure the NoBarrier_AtomicIncrement doesn't go -+ // use a guard value to make sure the atomic_increment_func doesn't go - // outside the expected address bounds. This is in particular to - // test that some future change to the asm code doesn't cause the -- // 32-bit NoBarrier_AtomicIncrement doesn't do the wrong thing on 64-bit -+ // 32-bit atomic_increment_func doesn't do the wrong thing on 64-bit - // machines. - struct { - AtomicType prev_word; -@@ -60,47 +61,47 @@ - s.count = 0; - s.next_word = next_word_value; - -- ASSERT_EQ(1, base::subtle::NoBarrier_AtomicIncrement(&s.count, 1)); -+ ASSERT_EQ(1, (*atomic_increment_func)(&s.count, 1)); - ASSERT_EQ(1, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(3, base::subtle::NoBarrier_AtomicIncrement(&s.count, 2)); -+ ASSERT_EQ(3, (*atomic_increment_func)(&s.count, 2)); - ASSERT_EQ(3, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(6, base::subtle::NoBarrier_AtomicIncrement(&s.count, 3)); -+ ASSERT_EQ(6, (*atomic_increment_func)(&s.count, 3)); - ASSERT_EQ(6, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(3, base::subtle::NoBarrier_AtomicIncrement(&s.count, -3)); -+ ASSERT_EQ(3, (*atomic_increment_func)(&s.count, -3)); - ASSERT_EQ(3, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(1, base::subtle::NoBarrier_AtomicIncrement(&s.count, -2)); -+ ASSERT_EQ(1, (*atomic_increment_func)(&s.count, -2)); - ASSERT_EQ(1, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(0, base::subtle::NoBarrier_AtomicIncrement(&s.count, -1)); -+ ASSERT_EQ(0, (*atomic_increment_func)(&s.count, -1)); - ASSERT_EQ(0, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(-1, base::subtle::NoBarrier_AtomicIncrement(&s.count, -1)); -+ ASSERT_EQ(-1, (*atomic_increment_func)(&s.count, -1)); - ASSERT_EQ(-1, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(-5, base::subtle::NoBarrier_AtomicIncrement(&s.count, -4)); -+ ASSERT_EQ(-5, (*atomic_increment_func)(&s.count, -4)); - ASSERT_EQ(-5, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); - -- ASSERT_EQ(0, base::subtle::NoBarrier_AtomicIncrement(&s.count, 5)); -+ ASSERT_EQ(0, (*atomic_increment_func)(&s.count, 5)); - ASSERT_EQ(0, s.count); - ASSERT_EQ(prev_word_value, s.prev_word); - ASSERT_EQ(next_word_value, s.next_word); -@@ -111,9 +112,10 @@ - - - template --static void TestCompareAndSwap() { -+static void TestCompareAndSwap(AtomicType (*compare_and_swap_func) -+ (volatile AtomicType*, AtomicType, AtomicType)) { - AtomicType value = 0; -- AtomicType prev = base::subtle::NoBarrier_CompareAndSwap(&value, 0, 1); -+ AtomicType prev = (*compare_and_swap_func)(&value, 0, 1); - ASSERT_EQ(1, value); - ASSERT_EQ(0, prev); - -@@ -122,21 +124,22 @@ - const AtomicType k_test_val = (GG_ULONGLONG(1) << - (NUM_BITS(AtomicType) - 2)) + 11; - value = k_test_val; -- prev = base::subtle::NoBarrier_CompareAndSwap(&value, 0, 5); -+ prev = (*compare_and_swap_func)(&value, 0, 5); - ASSERT_EQ(k_test_val, value); - ASSERT_EQ(k_test_val, prev); - - value = k_test_val; -- prev = base::subtle::NoBarrier_CompareAndSwap(&value, k_test_val, 5); -+ prev = (*compare_and_swap_func)(&value, k_test_val, 5); - ASSERT_EQ(5, value); - ASSERT_EQ(k_test_val, prev); - } - - - template --static void TestAtomicExchange() { -+static void TestAtomicExchange(AtomicType (*atomic_exchange_func) -+ (volatile AtomicType*, AtomicType)) { - AtomicType value = 0; -- AtomicType new_value = base::subtle::NoBarrier_AtomicExchange(&value, 1); -+ AtomicType new_value = (*atomic_exchange_func)(&value, 1); - ASSERT_EQ(1, value); - ASSERT_EQ(0, new_value); - -@@ -145,28 +148,29 @@ - const AtomicType k_test_val = (GG_ULONGLONG(1) << - (NUM_BITS(AtomicType) - 2)) + 11; - value = k_test_val; -- new_value = base::subtle::NoBarrier_AtomicExchange(&value, k_test_val); -+ new_value = (*atomic_exchange_func)(&value, k_test_val); - ASSERT_EQ(k_test_val, value); - ASSERT_EQ(k_test_val, new_value); - - value = k_test_val; -- new_value = base::subtle::NoBarrier_AtomicExchange(&value, 5); -+ new_value = (*atomic_exchange_func)(&value, 5); - ASSERT_EQ(5, value); - ASSERT_EQ(k_test_val, new_value); - } - - - template --static void TestAtomicIncrementBounds() { -+static void TestAtomicIncrementBounds(AtomicType (*atomic_increment_func) -+ (volatile AtomicType*, AtomicType)) { - // Test increment at the half-width boundary of the atomic type. - // It is primarily for testing at the 32-bit boundary for 64-bit atomic type. - AtomicType test_val = GG_ULONGLONG(1) << (NUM_BITS(AtomicType) / 2); - AtomicType value = test_val - 1; -- AtomicType new_value = base::subtle::NoBarrier_AtomicIncrement(&value, 1); -+ AtomicType new_value = (*atomic_increment_func)(&value, 1); - ASSERT_EQ(test_val, value); - ASSERT_EQ(value, new_value); - -- base::subtle::NoBarrier_AtomicIncrement(&value, -1); -+ (*atomic_increment_func)(&value, -1); - ASSERT_EQ(test_val - 1, value); - } - -@@ -222,16 +226,28 @@ - - template - static void TestAtomicOps() { -- TestCompareAndSwap(); -- TestAtomicExchange(); -- TestAtomicIncrementBounds(); -+ TestCompareAndSwap(base::subtle::NoBarrier_CompareAndSwap); -+ TestCompareAndSwap(base::subtle::Acquire_CompareAndSwap); -+ TestCompareAndSwap(base::subtle::Release_CompareAndSwap); -+ -+ TestAtomicExchange(base::subtle::NoBarrier_AtomicExchange); -+ TestAtomicExchange(base::subtle::Acquire_AtomicExchange); -+ TestAtomicExchange(base::subtle::Release_AtomicExchange); -+ -+ TestAtomicIncrementBounds( -+ base::subtle::NoBarrier_AtomicIncrement); -+ TestAtomicIncrementBounds( -+ base::subtle::Barrier_AtomicIncrement); -+ - TestStore(); - TestLoad(); - } - - int main(int argc, char** argv) { -- TestAtomicIncrement(); -- TestAtomicIncrement(); -+ TestAtomicIncrement(base::subtle::NoBarrier_AtomicIncrement); -+ TestAtomicIncrement(base::subtle::Barrier_AtomicIncrement); -+ TestAtomicIncrement(base::subtle::NoBarrier_AtomicIncrement); -+ TestAtomicIncrement(base::subtle::Barrier_AtomicIncrement); - - TestAtomicOps(); - TestAtomicOps(); -@@ -248,8 +264,10 @@ - // If we ever *do* want to enable this, try adding -msse (or -mmmx?) - // to the CXXFLAGS in Makefile.am. - #if 0 and defined(BASE_HAS_ATOMIC64) -- TestAtomicIncrement(); -- TestAtomicOps(); -+ TestAtomicIncrement( -+ base::subtle::NoBarrier_AtomicIncrement); -+ TestAtomicIncrement( -+ base::subtle::Barrier_AtomicIncrement); - #endif - - printf("PASS\n"); -Only in gperftools-2.0/src/tests: getpc_test.cc.svn-r190 -diff -urP gperftools-2.0/src/tests/large_heap_fragmentation_unittest.cc gperftools-2.0-svn218/src/tests/large_heap_fragmentation_unittest.cc ---- gperftools-2.0/src/tests/large_heap_fragmentation_unittest.cc 1969-12-31 19:00:00.000000000 -0500 -+++ gperftools-2.0-svn218/src/tests/large_heap_fragmentation_unittest.cc 2013-06-04 10:16:58.073841689 -0400 -@@ -0,0 +1,62 @@ -+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+// This is a unit test for exercising fragmentation of large (over 1 -+// meg) page spans. It makes sure that allocations/releases of -+// increasing memory chunks do not blowup memory -+// usage. See also https://code.google.com/p/gperftools/issues/detail?id=368 -+ -+ -+#include -+#include -+#include -+ -+#include "base/logging.h" -+#include "common.h" -+#include -+ -+ -+int main (int argc, char** argv) { -+ for (int pass = 1; pass <= 3; pass++) { -+ size_t size = 100*1024*1024; -+ while (size < 500*1024*1024) { -+ void *ptr = malloc(size); -+ free(ptr); -+ size += 20000; -+ -+ size_t heap_size = static_cast(-1); -+ MallocExtension::instance()->GetNumericProperty("generic.heap_size", -+ &heap_size); -+ -+ -+ CHECK_LT(heap_size, 1*1024*1024*1024); -+ } -+ } -+ -+ printf("PASS\n"); -+ return 0; -+} -diff -urP gperftools-2.0/src/tests/malloc_extension_c_test.c gperftools-2.0-svn218/src/tests/malloc_extension_c_test.c ---- gperftools-2.0/src/tests/malloc_extension_c_test.c 2012-02-03 14:18:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/tests/malloc_extension_c_test.c 2013-06-04 10:16:58.077841689 -0400 -@@ -59,6 +59,16 @@ - g_delete_hook_calls++; - } - -+static -+void *forced_malloc(size_t size) -+{ -+ void *rv = malloc(size); -+ if (!rv) { -+ FAIL("malloc is not supposed to fail here"); -+ } -+ return rv; -+} -+ - void TestMallocHook(void) { - /* TODO(csilvers): figure out why we get: - * E0100 00:00:00.000000 7383 malloc_hook.cc:244] RAW: google_malloc section is missing, thus InHookCaller is broken! -@@ -78,8 +88,9 @@ - if (!MallocHook_AddDeleteHook(&TestDeleteHook)) { - FAIL("Failed to add delete hook"); - } -- free(malloc(10)); -- free(malloc(20)); -+ -+ free(forced_malloc(10)); -+ free(forced_malloc(20)); - if (g_new_hook_calls != 2) { - FAIL("Wrong number of calls to the new hook"); - } -Only in gperftools-2.0/src/tests: malloc_hook_test.cc.svn-r190 -Only in gperftools-2.0/src/tests: markidle_unittest.cc.svn-r190 -Only in gperftools-2.0/src/tests: page_heap_test.cc.svn-r190 -Only in gperftools-2.0/src/tests: profiler_unittest.sh.svn-r190 -diff -urP gperftools-2.0/src/tests/tcmalloc_unittest.cc gperftools-2.0-svn218/src/tests/tcmalloc_unittest.cc ---- gperftools-2.0/src/tests/tcmalloc_unittest.cc 2013-06-04 10:20:21.147844736 -0400 -+++ gperftools-2.0-svn218/src/tests/tcmalloc_unittest.cc 2013-06-04 10:16:58.073841689 -0400 -@@ -725,7 +725,7 @@ - // Note the ... in the hook signature: we don't care what arguments - // the hook takes. - #define MAKE_HOOK_CALLBACK(hook_type) \ -- static int g_##hook_type##_calls = 0; \ -+ static volatile int g_##hook_type##_calls = 0; \ - static void IncrementCallsTo##hook_type(...) { \ - g_##hook_type##_calls++; \ - } \ -@@ -760,7 +760,7 @@ - CHECK((p % sizeof(void*)) == 0); - CHECK((p % sizeof(double)) == 0); - -- // Must have 16-byte (or 8-byte in case of -DTCMALLOC_ALIGN_8BYTES) -+ // Must have 16-byte (or 8-byte in case of -DTCMALLOC_ALIGN_8BYTES) - // alignment for large enough objects - if (size >= kMinAlign) { - CHECK((p % kMinAlign) == 0); -Only in gperftools-2.0/src/tests: tcmalloc_unittest.cc.svn-r190 -diff -urP gperftools-2.0/src/tests/tcmalloc_unittest.sh gperftools-2.0-svn218/src/tests/tcmalloc_unittest.sh ---- gperftools-2.0/src/tests/tcmalloc_unittest.sh 1969-12-31 19:00:00.000000000 -0500 -+++ gperftools-2.0-svn218/src/tests/tcmalloc_unittest.sh 2013-06-04 10:16:58.075841689 -0400 -@@ -0,0 +1,68 @@ -+#!/bin/sh -+ -+# Copyright (c) 2013, Google Inc. -+# All rights reserved. -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions are -+# met: -+# -+# * Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# * Redistributions in binary form must reproduce the above -+# copyright notice, this list of conditions and the following disclaimer -+# in the documentation and/or other materials provided with the -+# distribution. -+# * Neither the name of Google Inc. nor the names of its -+# contributors may be used to endorse or promote products derived from -+# this software without specific prior written permission. -+# -+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+# --- -+# Author: Adhemerval Zanella -+# -+# Runs the tcmalloc_unittest with various environment variables. -+# This is necessary because tuning some environment variables -+# (TCMALLOC_TRANSFER_NUM_OBJ for instance) should not change program -+# behavior, just performance. -+ -+BINDIR="${BINDIR:-.}" -+TCMALLOC_UNITTEST="${1:-$BINDIR}/tcmalloc_unittest" -+ -+TMPDIR=/tmp/tcmalloc_unittest -+rm -rf $TMPDIR || exit 2 -+mkdir $TMPDIR || exit 3 -+ -+# $1: value of tcmalloc_unittest env. var. -+run_check_transfer_num_obj() { -+ [ -n "$1" ] && export TCMALLOC_TRANSFER_NUM_OBJ="$1" -+ -+ echo -n "Testing $TCMALLOC_UNITTEST with TCMALLOC_TRANSFER_NUM_OBJ=$1 ... " -+ if $TCMALLOC_UNITTEST > $TMPDIR/output 2>&1; then -+ echo "OK" -+ else -+ echo "FAILED" -+ echo "Output from the failed run:" -+ echo "----" -+ cat $TMPDIR/output -+ echo "----" -+ exit 4 -+ fi -+} -+ -+run_check_transfer_num_obj "" -+run_check_transfer_num_obj "40" -+run_check_transfer_num_obj "4096" -+ -+echo "PASS" -Only in gperftools-2.0/src: thread_cache.cc.svn-r190 -Only in gperftools-2.0/src: thread_cache.h.svn-r190 -diff -urP gperftools-2.0/src/windows/mingw.h gperftools-2.0-svn218/src/windows/mingw.h ---- gperftools-2.0/src/windows/mingw.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/windows/mingw.h 2013-06-04 10:16:57.682841683 -0400 -@@ -60,6 +60,8 @@ - // pretend the pthreads wrapper doesn't exist, even when it does. - #undef HAVE_PTHREAD - -+#define HAVE_PID_T -+ - #include "windows/port.h" - - #endif /* __MINGW32__ */ -diff -urP gperftools-2.0/src/windows/patch_functions.cc gperftools-2.0-svn218/src/windows/patch_functions.cc ---- gperftools-2.0/src/windows/patch_functions.cc 2012-02-03 14:18:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/windows/patch_functions.cc 2013-06-04 10:16:57.683841683 -0400 -@@ -85,7 +85,7 @@ - #include - #include - #include // for _msize and _expand --#include // for EnumProcessModules, GetModuleInformation, etc. -+#include // for EnumProcessModules, GetModuleInformation, etc. - #include - #include - #include -Only in gperftools-2.0/src/windows: port.cc.svn-r190 -diff -urP gperftools-2.0/src/windows/port.h gperftools-2.0-svn218/src/windows/port.h ---- gperftools-2.0/src/windows/port.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/windows/port.h 2013-06-04 10:16:57.683841683 -0400 -@@ -390,7 +390,10 @@ - - /* ----------------------------------- SYSTEM/PROCESS */ - -+#ifndef HAVE_PID_T - typedef int pid_t; -+#endif -+ - #if __STDC__ && !defined(__MINGW32__) - inline pid_t getpid(void) { return _getpid(); } - #endif -diff -urP gperftools-2.0/src/windows/preamble_patcher.cc gperftools-2.0-svn218/src/windows/preamble_patcher.cc ---- gperftools-2.0/src/windows/preamble_patcher.cc 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/windows/preamble_patcher.cc 2013-06-04 10:16:57.601841682 -0400 -@@ -103,6 +103,7 @@ - new_target = target + 2 + relative_offset; - } else if (target[0] == ASM_JMP32ABS_0 && - target[1] == ASM_JMP32ABS_1) { -+ jmp32rel: - // Visual studio seems to sometimes do it this way instead of the - // previous way. Not sure what the rules are, but it was happening - // with operator new in some binaries. -@@ -118,6 +119,18 @@ - memcpy(&new_target_v, reinterpret_cast(target + 2), 4); - } - new_target = reinterpret_cast(*new_target_v); -+ } else if (kIs64BitBinary && target[0] == ASM_REXW -+ && target[1] == ASM_JMP32ABS_0 -+ && target[2] == ASM_JMP32ABS_1) { -+ // in Visual Studio 2012 we're seeing jump like that: -+ // rex.W jmpq *0x11d019(%rip) -+ // -+ // according to docs I have, rex prefix is actually unneeded and -+ // can be ignored. I.e. docs say for jumps like that operand -+ // already defaults to 64-bit. But clearly it breaks abs. jump -+ // detection above and we just skip rex -+ target++; -+ goto jmp32rel; - } else { - break; - } -@@ -535,6 +548,12 @@ - return (*(target) & 0x70) == 0x70 && instruction_size == 2; - } - -+bool PreamblePatcher::IsShortJump( -+ unsigned char* target, -+ unsigned int instruction_size) { -+ return target[0] == 0xeb && instruction_size == 2; -+} -+ - bool PreamblePatcher::IsNearConditionalJump( - unsigned char* target, - unsigned int instruction_size) { -@@ -575,7 +594,9 @@ - unsigned char* target, - unsigned int* target_bytes, - unsigned int target_size) { -- unsigned char* original_jump_dest = (source + 2) + source[1]; -+ // note: rel8 offset is signed. Thus we need to ask for signed char -+ // to negative offsets right -+ unsigned char* original_jump_dest = (source + 2) + static_cast(source[1]); - unsigned char* stub_jump_from = target + 6; - __int64 fixup_jump_offset = original_jump_dest - stub_jump_from; - if (fixup_jump_offset > INT_MAX || fixup_jump_offset < INT_MIN) { -@@ -597,6 +618,36 @@ - reinterpret_cast(&fixup_jump_offset), 4); - } - -+ return SIDESTEP_SUCCESS; -+} -+ -+SideStepError PreamblePatcher::PatchShortJump( -+ unsigned char* source, -+ unsigned int instruction_size, -+ unsigned char* target, -+ unsigned int* target_bytes, -+ unsigned int target_size) { -+ // note: rel8 offset is _signed_. Thus we need signed char here. -+ unsigned char* original_jump_dest = (source + 2) + static_cast(source[1]); -+ unsigned char* stub_jump_from = target + 5; -+ __int64 fixup_jump_offset = original_jump_dest - stub_jump_from; -+ if (fixup_jump_offset > INT_MAX || fixup_jump_offset < INT_MIN) { -+ SIDESTEP_ASSERT(false && -+ "Unable to fix up short jump because target" -+ " is too far away."); -+ return SIDESTEP_JUMP_INSTRUCTION; -+ } -+ -+ *target_bytes = 5; -+ if (target_size > *target_bytes) { -+ // Convert the short jump to a near jump. -+ // -+ // e9 xx xx xx xx = jmp rel32off -+ target[0] = 0xe9; -+ memcpy(reinterpret_cast(target + 1), -+ reinterpret_cast(&fixup_jump_offset), 4); -+ } -+ - return SIDESTEP_SUCCESS; - } - -diff -urP gperftools-2.0/src/windows/preamble_patcher.h gperftools-2.0-svn218/src/windows/preamble_patcher.h ---- gperftools-2.0/src/windows/preamble_patcher.h 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/windows/preamble_patcher.h 2013-06-04 10:16:57.601841682 -0400 -@@ -467,6 +467,8 @@ - static bool IsShortConditionalJump(unsigned char* target, - unsigned int instruction_size); - -+ static bool IsShortJump(unsigned char *target, unsigned int instruction_size); -+ - // Helper routine that determines if a target instruction is a near - // conditional jump. - // -@@ -547,6 +549,12 @@ - unsigned int* target_bytes, - unsigned int target_size); - -+ static SideStepError PatchShortJump(unsigned char* source, -+ unsigned int instruction_size, -+ unsigned char* target, -+ unsigned int* target_bytes, -+ unsigned int target_size); -+ - // Helper routine that converts an instruction that will convert various - // jump-like instructions to corresponding instructions in the target buffer. - // What this routine does is fix up the relative offsets contained in jump -diff -urP gperftools-2.0/src/windows/preamble_patcher_with_stub.cc gperftools-2.0-svn218/src/windows/preamble_patcher_with_stub.cc ---- gperftools-2.0/src/windows/preamble_patcher_with_stub.cc 2012-02-02 16:36:23.000000000 -0500 -+++ gperftools-2.0-svn218/src/windows/preamble_patcher_with_stub.cc 2013-06-04 10:16:57.682841683 -0400 -@@ -150,6 +150,11 @@ - preamble_stub + stub_bytes, - &jump_bytes, - stub_size - stub_bytes); -+ } else if (IsShortJump(target + preamble_bytes, cur_bytes)) { -+ jump_ret = PatchShortJump(target + preamble_bytes, cur_bytes, -+ preamble_stub + stub_bytes, -+ &jump_bytes, -+ stub_size - stub_bytes); - } else if (IsNearConditionalJump(target + preamble_bytes, cur_bytes) || - IsNearRelativeJump(target + preamble_bytes, cur_bytes) || - IsNearAbsoluteCall(target + preamble_bytes, cur_bytes) || -Only in gperftools-2.0/src/windows: TODO.svn-r190 diff --git a/gperftools-arm-has-futex.patch b/gperftools-arm-has-futex.patch deleted file mode 100644 index 3ba7bbe..0000000 --- a/gperftools-arm-has-futex.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff -ru gperftools-2.4/src/base/linux_syscall_support.h gperftools-2.4-fixed/src/base/linux_syscall_support.h ---- gperftools-2.4/src/base/linux_syscall_support.h 2014-12-06 23:51:40.000000000 +0100 -+++ gperftools-2.4-fixed/src/base/linux_syscall_support.h 2015-06-01 16:51:03.725616215 +0200 -@@ -83,7 +83,6 @@ - * sys_fcntl( - * sys_fstat( - * sys_futex( -- * sys_futex1( - * sys_getcpu( - * sys_getdents64( - * sys_getppid( -@@ -2094,9 +2093,11 @@ - int, c, long, a) - LSS_INLINE _syscall2(int, fstat, int, f, - struct kernel_stat*, b) -- LSS_INLINE _syscall4(int, futex, int*, a, -+ LSS_INLINE _syscall6(int, futex, int*, a, - int, o, int, v, -- struct kernel_timespec*, t) -+ struct kernel_timespec*, t, -+ int*, a2, -+ int, v3) - #ifdef __NR_getdents64 - LSS_INLINE _syscall3(int, getdents64, int, f, - struct kernel_dirent64*, d, int, c) -diff -ru gperftools-2.4/src/base/spinlock_linux-inl.h gperftools-2.4-fixed/src/base/spinlock_linux-inl.h ---- gperftools-2.4/src/base/spinlock_linux-inl.h 2014-12-06 23:51:40.000000000 +0100 -+++ gperftools-2.4-fixed/src/base/spinlock_linux-inl.h 2015-06-01 16:51:03.725616215 +0200 -@@ -51,15 +51,10 @@ - int x = 0; - // futexes are ints, so we can use them only when - // that's the same size as the lockword_ in SpinLock. --#ifdef __arm__ -- // ARM linux doesn't support sys_futex1(void*, int, int, struct timespec*); -- have_futex = 0; --#else - have_futex = (sizeof (Atomic32) == sizeof (int) && -- sys_futex(&x, FUTEX_WAKE, 1, 0) >= 0); --#endif -+ sys_futex(&x, FUTEX_WAKE, 1, NULL, NULL, 0) >= 0); - if (have_futex && -- sys_futex(&x, FUTEX_WAKE | futex_private_flag, 1, 0) < 0) { -+ sys_futex(&x, FUTEX_WAKE | futex_private_flag, 1, NULL, NULL, 0) < 0) { - futex_private_flag = 0; - } - } -@@ -85,7 +85,8 @@ - tm.tv_nsec *= 16; // increase the delay; we expect explicit wakeups - sys_futex(reinterpret_cast(const_cast(w)), - FUTEX_WAIT | futex_private_flag, -- value, reinterpret_cast(&tm)); -+ value, reinterpret_cast(&tm), -+ NULL, 0); - } else { - nanosleep(&tm, NULL); - } -@@ -96,7 +97,8 @@ - void SpinLockWake(volatile Atomic32 *w, bool all) { - if (have_futex) { - sys_futex(reinterpret_cast(const_cast(w)), -- FUTEX_WAKE | futex_private_flag, all? INT_MAX : 1, 0); -+ FUTEX_WAKE | futex_private_flag, all? INT_MAX : 1, -+ NULL, NULL, 0); - } - } - diff --git a/gperftools-svn-r190.patch b/gperftools-svn-r190.patch deleted file mode 100644 index 978a945..0000000 --- a/gperftools-svn-r190.patch +++ /dev/null @@ -1,8016 +0,0 @@ -diff -urP gperftools-2.0/aclocal.m4 /home/spot/gperftools/aclocal.m4 ---- gperftools-2.0/aclocal.m4 2012-02-03 14:39:04.000000000 -0500 -+++ /home/spot/gperftools/aclocal.m4 2013-03-01 14:25:39.165366808 -0500 -@@ -1,7 +1,7 @@ --# generated automatically by aclocal 1.10.1 -*- Autoconf -*- -+# generated automatically by aclocal 1.10.3 -*- Autoconf -*- - - # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, --# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -13,13 +13,112 @@ - - m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl --m4_if(AC_AUTOCONF_VERSION, [2.65],, --[m4_warning([this file was generated for autoconf 2.65. -+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -+[m4_warning([this file was generated for autoconf 2.68. - You have another version of autoconf. It may work, but is not guaranteed to. - If you have problems, you may need to regenerate the build system entirely. - To do so, use the procedure documented by the package, typically `autoreconf'.])]) - --# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. -+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -+# -+# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -+# Written by Scott James Remnant, 2004. -+# -+# This file is free software; the Free Software Foundation gives -+# unlimited permission to copy and/or distribute it, with or without -+# modifications, as long as this notice is preserved. -+ -+# serial 5 lt~obsolete.m4 -+ -+# These exist entirely to fool aclocal when bootstrapping libtool. -+# -+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -+# which have later been changed to m4_define as they aren't part of the -+# exported API, or moved to Autoconf or Automake where they belong. -+# -+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -+# using a macro with the same name in our local m4/libtool.m4 it'll -+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -+# and doesn't know about Autoconf macros at all.) -+# -+# So we provide this file, which has a silly filename so it's always -+# included after everything else. This provides aclocal with the -+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -+# because those macros already exist, or will be overwritten later. -+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -+# -+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -+# Yes, that means every name once taken will need to remain here until -+# we give up compatibility with versions before 1.7, at which point -+# we need to keep only those names which we still refer to. -+ -+# This is to help aclocal find these macros, as it can't see m4_define. -+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) -+ -+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) -+ -+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, -@@ -34,7 +133,7 @@ - [am__api_version='1.10' - dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to - dnl require some minimum version. Point them to the right macro. --m4_if([$1], [1.10.1], [], -+m4_if([$1], [1.10.3], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl - ]) - -@@ -48,12 +147,12 @@ - # AM_SET_CURRENT_AUTOMAKE_VERSION - # ------------------------------- - # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. --# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. -+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. - AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], --[AM_AUTOMAKE_VERSION([1.10.1])dnl -+[AM_AUTOMAKE_VERSION([1.10.3])dnl - m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl --_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) -+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - - # AM_AUX_DIR_EXPAND -*- Autoconf -*- - -@@ -143,14 +242,14 @@ - Usually this means the macro was only invoked conditionally.]]) - fi])]) - --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 9 -+# serial 10 - - # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be - # written in clear, in which case automake, when reading aclocal.m4, -@@ -207,6 +306,16 @@ - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi -+ am__universal=false -+ m4_case([$1], [CC], -+ [case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac], -+ [CXX], -+ [case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac]) -+ - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and -@@ -224,7 +333,17 @@ - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -+ # We check with `-c' and `-o' for the sake of the "dashmstdout" -+ # mode. It turns out that the SunPro C++ compiler does not properly -+ # handle `-M -o', and we need to detect this. Also, some Intel -+ # versions had trouble with output in subdirs -+ am__obj=sub/conftest.${OBJEXT-o} -+ am__minus_obj="-o $am__obj" - case $depmode in -+ gcc) -+ # This depmode causes a compiler race in universal mode. -+ test "$am__universal" = false || continue -+ ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested -@@ -234,19 +353,23 @@ - break - fi - ;; -+ msvisualcpp | msvcmsys) -+ # This compiler won't grok `-c -o', but also, the minuso test has -+ # not run yet. These depmodes are late enough in the game, and -+ # so weak that their functioning should not be impacted. -+ am__obj=conftest.${OBJEXT-o} -+ am__minus_obj= -+ ;; - none) break ;; - esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. - if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -+ source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message -@@ -303,57 +426,68 @@ - - # Generate code to set up dependency tracking. -*- Autoconf -*- - --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --#serial 3 -+#serial 5 - - # _AM_OUTPUT_DEPENDENCY_COMMANDS - # ------------------------------ - AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], --[for mf in $CONFIG_FILES; do -- # Strip MF so we end up with the name of the file. -- mf=`echo "$mf" | sed -e 's/:.*$//'` -- # Check whether this is an Automake generated Makefile or not. -- # We used to match only the files named `Makefile.in', but -- # some people rename them; so instead we look at the file content. -- # Grep'ing the first line is not enough: some people post-process -- # each Makefile.in and add a new line on top of each file to say so. -- # Grep'ing the whole file is not good either: AIX grep has a line -- # limit of 2048, but all sed's we know have understand at least 4000. -- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then -- dirpart=`AS_DIRNAME("$mf")` -- else -- continue -- fi -- # Extract the definition of DEPDIR, am__include, and am__quote -- # from the Makefile without running `make'. -- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` -- test -z "$DEPDIR" && continue -- am__include=`sed -n 's/^am__include = //p' < "$mf"` -- test -z "am__include" && continue -- am__quote=`sed -n 's/^am__quote = //p' < "$mf"` -- # When using ansi2knr, U may be empty or an underscore; expand it -- U=`sed -n 's/^U = //p' < "$mf"` -- # Find all dependency output files, they are included files with -- # $(DEPDIR) in their names. We invoke sed twice because it is the -- # simplest approach to changing $(DEPDIR) to its actual value in the -- # expansion. -- for file in `sed -n " -- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ -- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do -- # Make sure the directory exists. -- test -f "$dirpart/$file" && continue -- fdir=`AS_DIRNAME(["$file"])` -- AS_MKDIR_P([$dirpart/$fdir]) -- # echo "creating $dirpart/$file" -- echo '# dummy' > "$dirpart/$file" -+[{ -+ # Autoconf 2.62 quotes --file arguments for eval, but not when files -+ # are listed without --file. Let's play safe and only enable the eval -+ # if we detect the quoting. -+ case $CONFIG_FILES in -+ *\'*) eval set x "$CONFIG_FILES" ;; -+ *) set x $CONFIG_FILES ;; -+ esac -+ shift -+ for mf -+ do -+ # Strip MF so we end up with the name of the file. -+ mf=`echo "$mf" | sed -e 's/:.*$//'` -+ # Check whether this is an Automake generated Makefile or not. -+ # We used to match only the files named `Makefile.in', but -+ # some people rename them; so instead we look at the file content. -+ # Grep'ing the first line is not enough: some people post-process -+ # each Makefile.in and add a new line on top of each file to say so. -+ # Grep'ing the whole file is not good either: AIX grep has a line -+ # limit of 2048, but all sed's we know have understand at least 4000. -+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then -+ dirpart=`AS_DIRNAME("$mf")` -+ else -+ continue -+ fi -+ # Extract the definition of DEPDIR, am__include, and am__quote -+ # from the Makefile without running `make'. -+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` -+ test -z "$DEPDIR" && continue -+ am__include=`sed -n 's/^am__include = //p' < "$mf"` -+ test -z "am__include" && continue -+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"` -+ # When using ansi2knr, U may be empty or an underscore; expand it -+ U=`sed -n 's/^U = //p' < "$mf"` -+ # Find all dependency output files, they are included files with -+ # $(DEPDIR) in their names. We invoke sed twice because it is the -+ # simplest approach to changing $(DEPDIR) to its actual value in the -+ # expansion. -+ for file in `sed -n " -+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ -+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do -+ # Make sure the directory exists. -+ test -f "$dirpart/$file" && continue -+ fdir=`AS_DIRNAME(["$file"])` -+ AS_MKDIR_P([$dirpart/$fdir]) -+ # echo "creating $dirpart/$file" -+ echo '# dummy' > "$dirpart/$file" -+ done - done --done -+} - ])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -@@ -370,22 +504,10 @@ - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) - ]) - --# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 --# Free Software Foundation, Inc. --# --# This file is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# serial 8 -- --# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. --AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) -- - # Do all the work for Automake. -*- Autoconf -*- - - # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, --# 2005, 2006, 2008 Free Software Foundation, Inc. -+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, -@@ -459,8 +581,8 @@ - AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) - AM_MISSING_PROG(AUTOHEADER, autoheader) - AM_MISSING_PROG(MAKEINFO, makeinfo) --AM_PROG_INSTALL_SH --AM_PROG_INSTALL_STRIP -+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl - AC_REQUIRE([AM_PROG_MKDIR_P])dnl - # We need awk for the "check" target. The system "awk" is bad on - # some platforms. -@@ -595,14 +717,14 @@ - rm -f confinc confmf - ]) - --# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 -+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 5 -+# serial 6 - - # AM_PROG_CC_C_O - # -------------- -@@ -614,8 +736,9 @@ - # FIXME: we rely on the cache variable name because - # there is no other way. - set dummy $CC --ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` --if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then -+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -+if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. -@@ -693,13 +816,13 @@ - - # Helper functions for option handling. -*- Autoconf -*- - --# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 3 -+# serial 4 - - # _AM_MANGLE_OPTION(NAME) - # ----------------------- -@@ -716,7 +839,7 @@ - # ---------------------------------- - # OPTIONS is a space-separated list of Automake options. - AC_DEFUN([_AM_SET_OPTIONS], --[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) -+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - - # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) - # ------------------------------------------- -diff -urP gperftools-2.0/autogen.sh /home/spot/gperftools/autogen.sh ---- gperftools-2.0/autogen.sh 1969-12-31 19:00:00.000000000 -0500 -+++ /home/spot/gperftools/autogen.sh 2013-03-01 14:25:39.164366808 -0500 -@@ -0,0 +1,54 @@ -+#!/bin/sh -+ -+# Before using, you should figure out all the .m4 macros that your -+# configure.m4 script needs and make sure they exist in the m4/ -+# directory. -+# -+# These are the files that this script might edit: -+# aclocal.m4 configure Makefile.in src/config.h.in \ -+# depcomp config.guess config.sub install-sh missing mkinstalldirs \ -+# ltmain.sh -+# -+# Here's a command you can run to see what files aclocal will import: -+# aclocal -I ../autoconf --output=- | sed -n 's/^m4_include..\([^]]*\).*/\1/p' -+ -+set -ex -+rm -rf autom4te.cache -+ -+trap 'rm -f aclocal.m4.tmp' EXIT -+ -+# Returns the first binary in $* that exists, or the last arg, if none exists. -+WhichOf() { -+ for candidate in "$@"; do -+ if "$candidate" --version >/dev/null 2>&1; then -+ echo "$candidate" -+ return -+ fi -+ done -+ echo "$candidate" # the last one in $@ -+} -+ -+# Use version 1.9 of aclocal and automake if available. -+ACLOCAL=`WhichOf aclocal-1.9 aclocal` -+AUTOMAKE=`WhichOf automake-1.9 automake` -+LIBTOOLIZE=`WhichOf glibtoolize libtoolize15 libtoolize14 libtoolize` -+ -+# aclocal tries to overwrite aclocal.m4 even if the contents haven't -+# changed, which is annoying when the file is not open for edit (in -+# p4). We work around this by writing to a temp file and just -+# updating the timestamp if the file hasn't change. -+"$ACLOCAL" --force -I m4 --output=aclocal.m4.tmp -+if cmp aclocal.m4.tmp aclocal.m4; then -+ touch aclocal.m4 # pretend that we regenerated the file -+ rm -f aclocal.m4.tmp -+else -+ mv aclocal.m4.tmp aclocal.m4 # we did set -e above, so we die if this fails -+fi -+ -+grep -q '^[^#]*AC_PROG_LIBTOOL' configure.ac && "$LIBTOOLIZE" -c -f -+autoconf -f -W all,no-obsolete -+autoheader -f -W all -+"$AUTOMAKE" -a -c -f -W all -+ -+rm -rf autom4te.cache -+exit 0 -diff -urP gperftools-2.0/configure /home/spot/gperftools/configure ---- gperftools-2.0/configure 2012-02-03 14:39:06.000000000 -0500 -+++ /home/spot/gperftools/configure 2013-03-01 14:25:37.963366851 -0500 -@@ -1,13 +1,13 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.65 for gperftools 2.0. -+# Generated by GNU Autoconf 2.68 for gperftools 2.0. - # - # Report bugs to . - # - # - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, --# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, --# Inc. -+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -+# Foundation, Inc. - # - # - # This configure script is free software; the Free Software Foundation -@@ -91,6 +91,7 @@ - IFS=" "" $as_nl" - - # Find who we are. Look in the path if we contain no directory separator. -+as_myself= - case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -@@ -216,11 +217,18 @@ - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. -+ # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -+ case $- in # (((( -+ *v*x* | *x*v* ) as_opts=-vx ;; -+ *v* ) as_opts=-v ;; -+ *x* ) as_opts=-x ;; -+ * ) as_opts= ;; -+ esac -+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} - fi - - if test x$as_have_required = xno; then : -@@ -319,7 +327,7 @@ - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" -- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - - } # as_fn_mkdir_p -@@ -359,19 +367,19 @@ - fi # as_fn_arith - - --# as_fn_error ERROR [LINENO LOG_FD] --# --------------------------------- -+# as_fn_error STATUS ERROR [LINENO LOG_FD] -+# ---------------------------------------- - # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are - # provided, also output the error to LOG_FD, referencing LINENO. Then exit the --# script with status $?, using 1 if that was 0. -+# script with STATUS, using 1 if that was 0. - as_fn_error () - { -- as_status=$?; test $as_status -eq 0 && as_status=1 -- if test "$3"; then -- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 -+ as_status=$1; test $as_status -eq 0 && as_status=1 -+ if test "$4"; then -+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi -- $as_echo "$as_me: error: $1" >&2 -+ $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status - } # as_fn_error - -@@ -682,7 +690,7 @@ - exec 6>&1 - - # Name of the host. --# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, - # so uname gets run too. - ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -@@ -997,8 +1005,9 @@ - fi - - case $ac_option in -- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -- *) ac_optarg=yes ;; -+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -+ *=) ac_optarg= ;; -+ *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. -@@ -1043,7 +1052,7 @@ - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid feature name: $ac_useropt" -+ as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1069,7 +1078,7 @@ - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid feature name: $ac_useropt" -+ as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1273,7 +1282,7 @@ - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid package name: $ac_useropt" -+ as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1289,7 +1298,7 @@ - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid package name: $ac_useropt" -+ as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1319,8 +1328,8 @@ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - -- -*) as_fn_error "unrecognized option: \`$ac_option' --Try \`$0 --help' for more information." -+ -*) as_fn_error $? "unrecognized option: \`$ac_option' -+Try \`$0 --help' for more information" - ;; - - *=*) -@@ -1328,7 +1337,7 @@ - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) -- as_fn_error "invalid variable name: \`$ac_envvar'" ;; -+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; -@@ -1338,7 +1347,7 @@ - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 -- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} -+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -@@ -1346,13 +1355,13 @@ - - if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` -- as_fn_error "missing argument to $ac_option" -+ as_fn_error $? "missing argument to $ac_option" - fi - - if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; -- fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; -+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac - fi -@@ -1375,7 +1384,7 @@ - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac -- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" - done - - # There might be people who depend on the old broken behavior: `$host' -@@ -1389,8 +1398,8 @@ - if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe -- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. -- If a cross compiler is detected then cross compile mode will be used." >&2 -+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. -+ If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -@@ -1405,9 +1414,9 @@ - ac_pwd=`pwd` && test -n "$ac_pwd" && - ac_ls_di=`ls -di .` && - ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || -- as_fn_error "working directory cannot be determined" -+ as_fn_error $? "working directory cannot be determined" - test "X$ac_ls_di" = "X$ac_pwd_ls_di" || -- as_fn_error "pwd does not report name of working directory" -+ as_fn_error $? "pwd does not report name of working directory" - - - # Find the source files, if location was not specified. -@@ -1446,11 +1455,11 @@ - fi - if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." -- as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" - fi - ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" - ac_abs_confdir=`( -- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" -+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` - # When building in place, set srcdir=. - if test "$ac_abs_confdir" = "$ac_pwd"; then -@@ -1490,7 +1499,7 @@ - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit -- -q, --quiet, --silent do not print \`checking...' messages -+ -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files -@@ -1657,9 +1666,9 @@ - if $ac_init_version; then - cat <<\_ACEOF - gperftools configure 2.0 --generated by GNU Autoconf 2.65 -+generated by GNU Autoconf 2.68 - --Copyright (C) 2009 Free Software Foundation, Inc. -+Copyright (C) 2010 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it. - _ACEOF -@@ -1703,7 +1712,7 @@ - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_cxx_try_compile -@@ -1741,7 +1750,7 @@ - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_compile -@@ -1767,7 +1776,7 @@ - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } >/dev/null && { -+ test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : -@@ -1778,7 +1787,7 @@ - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_cpp -@@ -1824,7 +1833,7 @@ - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_link -@@ -1838,7 +1847,7 @@ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -1856,7 +1865,7 @@ - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_header_compile - -@@ -1897,7 +1906,7 @@ - ac_retval=$ac_status - fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_run -@@ -1910,7 +1919,7 @@ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -1965,7 +1974,7 @@ - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_func - -@@ -1990,7 +1999,7 @@ - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } >/dev/null && { -+ test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : -@@ -2001,7 +2010,7 @@ - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_cxx_try_cpp -@@ -2047,7 +2056,7 @@ - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_cxx_try_link -@@ -2061,7 +2070,7 @@ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - eval "$3=no" -@@ -2102,7 +2111,7 @@ - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_type - -@@ -2114,10 +2123,10 @@ - ac_fn_c_check_header_mongrel () - { - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - fi - eval ac_res=\$$3 -@@ -2153,7 +2162,7 @@ - else - ac_header_preproc=no - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 - $as_echo "$ac_header_preproc" >&6; } - -@@ -2176,17 +2185,15 @@ - $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 - $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} --( cat <<\_ASBOX --## ------------------------------------------------ ## -+( $as_echo "## ------------------------------------------------ ## - ## Report this to google-perftools@googlegroups.com ## --## ------------------------------------------------ ## --_ASBOX -+## ------------------------------------------------ ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - eval "$3=\$ac_header_compiler" -@@ -2195,19 +2202,22 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_header_mongrel - --# ac_fn_c_check_decl LINENO SYMBOL VAR --# ------------------------------------ --# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. -+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -+# --------------------------------------------- -+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -+# accordingly. - ac_fn_c_check_decl () - { - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 --$as_echo_n "checking whether $2 is declared... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ as_decl_name=`echo $2|sed 's/ *(.*//'` -+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -+$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -2216,8 +2226,12 @@ - int - main () - { --#ifndef $2 -- (void) $2; -+#ifndef $as_decl_name -+#ifdef __cplusplus -+ (void) $as_decl_use; -+#else -+ (void) $as_decl_name; -+#endif - #endif - - ; -@@ -2234,7 +2248,7 @@ - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_decl - cat >config.log <<_ACEOF -@@ -2242,7 +2256,7 @@ - running configure, to aid debugging if configure makes a mistake. - - It was created by gperftools $as_me 2.0, which was --generated by GNU Autoconf 2.65. Invocation command line was -+generated by GNU Autoconf 2.68. Invocation command line was - - $ $0 $@ - -@@ -2352,11 +2366,9 @@ - { - echo - -- cat <<\_ASBOX --## ---------------- ## -+ $as_echo "## ---------------- ## - ## Cache variables. ## --## ---------------- ## --_ASBOX -+## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, - ( -@@ -2390,11 +2402,9 @@ - ) - echo - -- cat <<\_ASBOX --## ----------------- ## -+ $as_echo "## ----------------- ## - ## Output variables. ## --## ----------------- ## --_ASBOX -+## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do -@@ -2407,11 +2417,9 @@ - echo - - if test -n "$ac_subst_files"; then -- cat <<\_ASBOX --## ------------------- ## -+ $as_echo "## ------------------- ## - ## File substitutions. ## --## ------------------- ## --_ASBOX -+## ------------------- ##" - echo - for ac_var in $ac_subst_files - do -@@ -2425,11 +2433,9 @@ - fi - - if test -s confdefs.h; then -- cat <<\_ASBOX --## ----------- ## -+ $as_echo "## ----------- ## - ## confdefs.h. ## --## ----------- ## --_ASBOX -+## ----------- ##" - echo - cat confdefs.h - echo -@@ -2484,7 +2490,12 @@ - ac_site_file1=NONE - ac_site_file2=NONE - if test -n "$CONFIG_SITE"; then -- ac_site_file1=$CONFIG_SITE -+ # We do not want a PATH search for config.site. -+ case $CONFIG_SITE in #(( -+ -*) ac_site_file1=./$CONFIG_SITE;; -+ */*) ac_site_file1=$CONFIG_SITE;; -+ *) ac_site_file1=./$CONFIG_SITE;; -+ esac - elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -@@ -2499,7 +2510,11 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 - $as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 -- . "$ac_site_file" -+ . "$ac_site_file" \ -+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+as_fn_error $? "failed to load site script $ac_site_file -+See \`config.log' for more details" "$LINENO" 5; } - fi - done - -@@ -2578,7 +2593,7 @@ - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 - $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} -- as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 - fi - ## -------------------- ## - ## Main body of script. ## -@@ -2605,16 +2620,22 @@ - - ac_aux_dir= - for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do -- for ac_t in install-sh install.sh shtool; do -- if test -f "$ac_dir/$ac_t"; then -- ac_aux_dir=$ac_dir -- ac_install_sh="$ac_aux_dir/$ac_t -c" -- break 2 -- fi -- done -+ if test -f "$ac_dir/install-sh"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install-sh -c" -+ break -+ elif test -f "$ac_dir/install.sh"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install.sh -c" -+ break -+ elif test -f "$ac_dir/shtool"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/shtool install -c" -+ break -+ fi - done - if test -z "$ac_aux_dir"; then -- as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 - fi - - # These three variables are undocumented and unsupported, -@@ -2628,27 +2649,27 @@ - - # Make sure we can run config.sub. - $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || -- as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 - $as_echo_n "checking build system type... " >&6; } --if test "${ac_cv_build+set}" = set; then : -+if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_build_alias=$build_alias - test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` - test "x$ac_build_alias" = x && -- as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 - ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || -- as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 -+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 - $as_echo "$ac_cv_build" >&6; } - case $ac_cv_build in - *-*-*) ;; --*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; - esac - build=$ac_cv_build - ac_save_IFS=$IFS; IFS='-' -@@ -2666,14 +2687,14 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 - $as_echo_n "checking host system type... " >&6; } --if test "${ac_cv_host+set}" = set; then : -+if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build - else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || -- as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 - fi - - fi -@@ -2681,7 +2702,7 @@ - $as_echo "$ac_cv_host" >&6; } - case $ac_cv_host in - *-*-*) ;; --*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; - esac - host=$ac_cv_host - ac_save_IFS=$IFS; IFS='-' -@@ -2716,7 +2737,7 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 - $as_echo_n "checking for a BSD-compatible install... " >&6; } - if test -z "$INSTALL"; then --if test "${ac_cv_path_install+set}" = set; then : -+if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -@@ -2816,7 +2837,7 @@ - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". -- as_fn_error "ls -t appears to fail. Make sure there is not a broken -+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - -@@ -2826,7 +2847,7 @@ - # Ok. - : - else -- as_fn_error "newly created file is older than distributed files! -+ as_fn_error $? "newly created file is older than distributed files! - Check your system clock" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -@@ -2854,10 +2875,112 @@ - $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} - fi - -+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} -+ -+# Installed binaries are usually stripped using `strip' when the user -+# run `make install-strip'. However `strip' might not be the right -+# tool to use in cross-compilation environments, therefore Automake -+# will honor the `STRIP' environment variable to overrule this program. -+if test "$cross_compiling" != no; then -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -+set dummy ${ac_tool_prefix}strip; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_prog_STRIP+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test -n "$STRIP"; then -+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_STRIP="${ac_tool_prefix}strip" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+fi -+fi -+STRIP=$ac_cv_prog_STRIP -+if test -n "$STRIP"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -+$as_echo "$STRIP" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ -+fi -+if test -z "$ac_cv_prog_STRIP"; then -+ ac_ct_STRIP=$STRIP -+ # Extract the first word of "strip", so it can be a program name with args. -+set dummy strip; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_prog_ac_ct_STRIP+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test -n "$ac_ct_STRIP"; then -+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_ac_ct_STRIP="strip" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+fi -+fi -+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -+if test -n "$ac_ct_STRIP"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -+$as_echo "$ac_ct_STRIP" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ if test "x$ac_ct_STRIP" = x; then -+ STRIP=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -+ac_tool_warned=yes ;; -+esac -+ STRIP=$ac_ct_STRIP -+ fi -+else -+ STRIP="$ac_cv_prog_STRIP" -+fi -+ -+fi -+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 - $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } - if test -z "$MKDIR_P"; then -- if test "${ac_cv_path_mkdir+set}" = set; then : -+ if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -@@ -2908,7 +3031,7 @@ - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_AWK+set}" = set; then : -+if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$AWK"; then -@@ -2948,7 +3071,7 @@ - $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } - set x ${MAKE-make} - ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` --if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat >conftest.make <<\_ACEOF -@@ -2956,7 +3079,7 @@ - all: - @echo '@@@%%%=$(MAKE)=@@@%%%' - _ACEOF --# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; -@@ -2990,7 +3113,7 @@ - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then -- as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 -+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi - fi - -@@ -3034,108 +3157,6 @@ - - MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - --install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} -- --# Installed binaries are usually stripped using `strip' when the user --# run `make install-strip'. However `strip' might not be the right --# tool to use in cross-compilation environments, therefore Automake --# will honor the `STRIP' environment variable to overrule this program. --if test "$cross_compiling" != no; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. --set dummy ${ac_tool_prefix}strip; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_STRIP+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- if test -n "$STRIP"; then -- ac_cv_prog_STRIP="$STRIP" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -- ac_cv_prog_STRIP="${ac_tool_prefix}strip" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- --fi --fi --STRIP=$ac_cv_prog_STRIP --if test -n "$STRIP"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 --$as_echo "$STRIP" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- --fi --if test -z "$ac_cv_prog_STRIP"; then -- ac_ct_STRIP=$STRIP -- # Extract the first word of "strip", so it can be a program name with args. --set dummy strip; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- if test -n "$ac_ct_STRIP"; then -- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -- ac_cv_prog_ac_ct_STRIP="strip" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- --fi --fi --ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP --if test -n "$ac_ct_STRIP"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 --$as_echo "$ac_ct_STRIP" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- if test "x$ac_ct_STRIP" = x; then -- STRIP=":" -- else -- case $cross_compiling:$ac_tool_warned in --yes:) --{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 --$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} --ac_tool_warned=yes ;; --esac -- STRIP=$ac_ct_STRIP -- fi --else -- STRIP="$ac_cv_prog_STRIP" --fi -- --fi --INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -- - # We need awk for the "check" target. The system "awk" is bad on - # some platforms. - # Always define AMTAR for backward compatibility. -@@ -3238,7 +3259,7 @@ - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CXX+set}" = set; then : -+if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CXX"; then -@@ -3282,7 +3303,7 @@ - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CXX"; then -@@ -3445,9 +3466,8 @@ - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --{ as_fn_set_status 77 --as_fn_error "C++ compiler cannot create executables --See \`config.log' for more details." "$LINENO" 5; }; } -+as_fn_error 77 "C++ compiler cannot create executables -+See \`config.log' for more details" "$LINENO" 5; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } -@@ -3489,8 +3509,8 @@ - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot compute suffix of executables: cannot compile and link --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "cannot compute suffix of executables: cannot compile and link -+See \`config.log' for more details" "$LINENO" 5; } - fi - rm -f conftest conftest$ac_cv_exeext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -@@ -3547,9 +3567,9 @@ - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot run C++ compiled programs. -+as_fn_error $? "cannot run C++ compiled programs. - If you meant to cross compile, use \`--host'. --See \`config.log' for more details." "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5; } - fi - fi - fi -@@ -3560,7 +3580,7 @@ - ac_clean_files=$ac_clean_files_save - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 - $as_echo_n "checking for suffix of object files... " >&6; } --if test "${ac_cv_objext+set}" = set; then : -+if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -3600,8 +3620,8 @@ - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot compute suffix of object files: cannot compile --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "cannot compute suffix of object files: cannot compile -+See \`config.log' for more details" "$LINENO" 5; } - fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext - fi -@@ -3611,7 +3631,7 @@ - ac_objext=$OBJEXT - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 - $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } --if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : -+if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -3648,7 +3668,7 @@ - ac_save_CXXFLAGS=$CXXFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 - $as_echo_n "checking whether $CXX accepts -g... " >&6; } --if test "${ac_cv_prog_cxx_g+set}" = set; then : -+if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag -@@ -3796,7 +3816,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -@@ -3822,6 +3842,11 @@ - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi -+ am__universal=false -+ case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac -+ - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and -@@ -3839,7 +3864,17 @@ - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -+ # We check with `-c' and `-o' for the sake of the "dashmstdout" -+ # mode. It turns out that the SunPro C++ compiler does not properly -+ # handle `-M -o', and we need to detect this. Also, some Intel -+ # versions had trouble with output in subdirs -+ am__obj=sub/conftest.${OBJEXT-o} -+ am__minus_obj="-o $am__obj" - case $depmode in -+ gcc) -+ # This depmode causes a compiler race in universal mode. -+ test "$am__universal" = false || continue -+ ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested -@@ -3849,19 +3884,23 @@ - break - fi - ;; -+ msvisualcpp | msvcmsys) -+ # This compiler won't grok `-c -o', but also, the minuso test has -+ # not run yet. These depmodes are late enough in the game, and -+ # so weak that their functioning should not be impacted. -+ am__obj=conftest.${OBJEXT-o} -+ am__minus_obj= -+ ;; - none) break ;; - esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. - if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -+ source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message -@@ -3910,7 +3949,7 @@ - set dummy ${ac_tool_prefix}gcc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -3950,7 +3989,7 @@ - set dummy gcc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then -@@ -4003,7 +4042,7 @@ - set dummy ${ac_tool_prefix}cc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -4043,7 +4082,7 @@ - set dummy cc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -4102,7 +4141,7 @@ - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -4146,7 +4185,7 @@ - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then -@@ -4200,8 +4239,8 @@ - - test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "no acceptable C compiler found in \$PATH --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "no acceptable C compiler found in \$PATH -+See \`config.log' for more details" "$LINENO" 5; } - - # Provide some information about the compiler. - $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -@@ -4230,7 +4269,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 - $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } --if test "${ac_cv_c_compiler_gnu+set}" = set; then : -+if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -4267,7 +4306,7 @@ - ac_save_CFLAGS=$CFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 - $as_echo_n "checking whether $CC accepts -g... " >&6; } --if test "${ac_cv_prog_cc_g+set}" = set; then : -+if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_save_c_werror_flag=$ac_c_werror_flag -@@ -4345,7 +4384,7 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 - $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } --if test "${ac_cv_prog_cc_c89+set}" = set; then : -+if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_cv_prog_cc_c89=no -@@ -4444,7 +4483,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -@@ -4470,6 +4509,11 @@ - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi -+ am__universal=false -+ case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac -+ - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and -@@ -4487,7 +4531,17 @@ - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -+ # We check with `-c' and `-o' for the sake of the "dashmstdout" -+ # mode. It turns out that the SunPro C++ compiler does not properly -+ # handle `-M -o', and we need to detect this. Also, some Intel -+ # versions had trouble with output in subdirs -+ am__obj=sub/conftest.${OBJEXT-o} -+ am__minus_obj="-o $am__obj" - case $depmode in -+ gcc) -+ # This depmode causes a compiler race in universal mode. -+ test "$am__universal" = false || continue -+ ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested -@@ -4497,19 +4551,23 @@ - break - fi - ;; -+ msvisualcpp | msvcmsys) -+ # This compiler won't grok `-c -o', but also, the minuso test has -+ # not run yet. These depmodes are late enough in the game, and -+ # so weak that their functioning should not be impacted. -+ am__obj=conftest.${OBJEXT-o} -+ am__minus_obj= -+ ;; - none) break ;; - esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. - if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -+ source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message -@@ -4560,7 +4618,7 @@ - CPP= - fi - if test -z "$CPP"; then -- if test "${ac_cv_prog_CPP+set}" = set; then : -+ if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 - else - # Double quotes because CPP needs to be expanded -@@ -4590,7 +4648,7 @@ - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -@@ -4606,11 +4664,11 @@ - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - break - fi -@@ -4649,7 +4707,7 @@ - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -@@ -4665,18 +4723,18 @@ - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details" "$LINENO" 5; } - fi - - ac_ext=c -@@ -4702,7 +4760,7 @@ - fi - set dummy $CC; ac_cc=`$as_echo "$2" | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` --if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -4807,8 +4865,9 @@ - # FIXME: we rely on the cache variable name because - # there is no other way. - set dummy $CC --ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` --if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then -+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -+if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. -@@ -4825,7 +4884,7 @@ - set dummy ${ac_tool_prefix}objcopy; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_OBJCOPY+set}" = set; then : -+if ${ac_cv_prog_OBJCOPY+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$OBJCOPY"; then -@@ -4865,7 +4924,7 @@ - set dummy objcopy; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then : -+if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_OBJCOPY"; then -@@ -4916,12 +4975,19 @@ - if test -n "$OBJCOPY"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $OBJCOPY supports -W" >&5 - $as_echo_n "checking if $OBJCOPY supports -W... " >&6; } --if test "${gpt_cv_objcopy_weaken+set}" = set; then : -+if ${gpt_cv_objcopy_weaken+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - void foo() {} int main() {return 0;} -+int -+main () -+{ -+ -+ ; -+ return 0; -+} - _ACEOF - if ac_fn_c_try_link "$LINENO"; then : - if "$OBJCOPY" -W foo conftest$ac_exeext /dev/null; then : -@@ -5046,7 +5112,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 - $as_echo_n "checking for a sed that does not truncate output... " >&6; } --if test "${ac_cv_path_SED+set}" = set; then : -+if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ -@@ -5101,7 +5167,7 @@ - done - IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then -- as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 -+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi - else - ac_cv_path_SED=$SED -@@ -5128,7 +5194,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 - $as_echo_n "checking for grep that handles long lines and -e... " >&6; } --if test "${ac_cv_path_GREP+set}" = set; then : -+if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$GREP"; then -@@ -5177,7 +5243,7 @@ - done - IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then -- as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi - else - ac_cv_path_GREP=$GREP -@@ -5191,7 +5257,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 - $as_echo_n "checking for egrep... " >&6; } --if test "${ac_cv_path_EGREP+set}" = set; then : -+if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 -@@ -5243,7 +5309,7 @@ - done - IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then -- as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi - else - ac_cv_path_EGREP=$EGREP -@@ -5258,7 +5324,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 - $as_echo_n "checking for fgrep... " >&6; } --if test "${ac_cv_path_FGREP+set}" = set; then : -+if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 -@@ -5310,7 +5376,7 @@ - done - IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then -- as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi - else - ac_cv_path_FGREP=$FGREP -@@ -5389,7 +5455,7 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 - $as_echo_n "checking for non-GNU ld... " >&6; } - fi --if test "${lt_cv_path_LD+set}" = set; then : -+if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$LD"; then -@@ -5426,10 +5492,10 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 - $as_echo "no" >&6; } - fi --test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 - $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } --if test "${lt_cv_prog_gnu_ld+set}" = set; then : -+if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 - else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -@@ -5456,7 +5522,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 - $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } --if test "${lt_cv_path_NM+set}" = set; then : -+if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$NM"; then -@@ -5516,7 +5582,7 @@ - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_DUMPBIN+set}" = set; then : -+if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$DUMPBIN"; then -@@ -5560,7 +5626,7 @@ - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : -+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_DUMPBIN"; then -@@ -5623,18 +5689,18 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 - $as_echo_n "checking the name lister ($NM) interface... " >&6; } --if test "${lt_cv_nm_interface+set}" = set; then : -+if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext -- (eval echo "\"\$as_me:5631: $ac_compile\"" >&5) -+ (eval echo "\"\$as_me:5697: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 -- (eval echo "\"\$as_me:5634: $NM \\\"conftest.$ac_objext\\\"\"" >&5) -+ (eval echo "\"\$as_me:5700: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 -- (eval echo "\"\$as_me:5637: output\"" >&5) -+ (eval echo "\"\$as_me:5703: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" -@@ -5658,7 +5724,7 @@ - # find the maximum length of command line arguments - { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 - $as_echo_n "checking the maximum length of command line arguments... " >&6; } --if test "${lt_cv_sys_max_cmd_len+set}" = set; then : -+if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 - else - i=0 -@@ -5850,7 +5916,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 - $as_echo_n "checking for $LD option to reload object files... " >&6; } --if test "${lt_cv_ld_reload_flag+set}" = set; then : -+if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_ld_reload_flag='-r' -@@ -5886,7 +5952,7 @@ - set dummy ${ac_tool_prefix}objdump; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_OBJDUMP+set}" = set; then : -+if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$OBJDUMP"; then -@@ -5926,7 +5992,7 @@ - set dummy objdump; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : -+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_OBJDUMP"; then -@@ -5985,7 +6051,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 - $as_echo_n "checking how to recognize dependent libraries... " >&6; } --if test "${lt_cv_deplibs_check_method+set}" = set; then : -+if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_file_magic_cmd='$MAGIC_CMD' -@@ -6201,7 +6267,7 @@ - set dummy ${ac_tool_prefix}ar; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_AR+set}" = set; then : -+if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$AR"; then -@@ -6241,7 +6307,7 @@ - set dummy ar; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : -+if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_AR"; then -@@ -6306,7 +6372,7 @@ - set dummy ${ac_tool_prefix}strip; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_STRIP+set}" = set; then : -+if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$STRIP"; then -@@ -6346,7 +6412,7 @@ - set dummy strip; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : -+if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_STRIP"; then -@@ -6405,7 +6471,7 @@ - set dummy ${ac_tool_prefix}ranlib; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_RANLIB+set}" = set; then : -+if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$RANLIB"; then -@@ -6445,7 +6511,7 @@ - set dummy ranlib; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : -+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_RANLIB"; then -@@ -6562,7 +6628,7 @@ - # Check for command to grab the raw symbol name followed by C symbol from nm. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 - $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } --if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : -+if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 - else - -@@ -6839,7 +6905,7 @@ - ;; - *-*-irix6*) - # Find out which ABI we are using. -- echo '#line 6842 "configure"' > conftest.$ac_ext -+ echo '#line 6908 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? -@@ -6933,7 +6999,7 @@ - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 - $as_echo_n "checking whether the C compiler needs -belf... " >&6; } --if test "${lt_cv_cc_needs_belf+set}" = set; then : -+if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_ext=c -@@ -7009,7 +7075,7 @@ - set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : -+if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$DSYMUTIL"; then -@@ -7049,7 +7115,7 @@ - set dummy dsymutil; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : -+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_DSYMUTIL"; then -@@ -7101,7 +7167,7 @@ - set dummy ${ac_tool_prefix}nmedit; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_NMEDIT+set}" = set; then : -+if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$NMEDIT"; then -@@ -7141,7 +7207,7 @@ - set dummy nmedit; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : -+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_NMEDIT"; then -@@ -7193,7 +7259,7 @@ - set dummy ${ac_tool_prefix}lipo; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_LIPO+set}" = set; then : -+if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$LIPO"; then -@@ -7233,7 +7299,7 @@ - set dummy lipo; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : -+if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_LIPO"; then -@@ -7285,7 +7351,7 @@ - set dummy ${ac_tool_prefix}otool; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_OTOOL+set}" = set; then : -+if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$OTOOL"; then -@@ -7325,7 +7391,7 @@ - set dummy otool; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : -+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_OTOOL"; then -@@ -7377,7 +7443,7 @@ - set dummy ${ac_tool_prefix}otool64; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_OTOOL64+set}" = set; then : -+if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$OTOOL64"; then -@@ -7417,7 +7483,7 @@ - set dummy otool64; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : -+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_OTOOL64"; then -@@ -7492,7 +7558,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 - $as_echo_n "checking for -single_module linker flag... " >&6; } --if test "${lt_cv_apple_cc_single_mod+set}" = set; then : -+if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_apple_cc_single_mod=no -@@ -7521,7 +7587,7 @@ - $as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 - $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } --if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : -+if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_ld_exported_symbols_list=no -@@ -7589,7 +7655,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 - $as_echo_n "checking for ANSI C header files... " >&6; } --if test "${ac_cv_header_stdc+set}" = set; then : -+if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -7706,8 +7772,7 @@ - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` - ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default - " --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -7721,7 +7786,7 @@ - do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default - " --if test "x$ac_cv_header_dlfcn_h" = x""yes; then : -+if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_DLFCN_H 1 - _ACEOF -@@ -7748,7 +7813,7 @@ - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CXX+set}" = set; then : -+if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CXX"; then -@@ -7792,7 +7857,7 @@ - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CXX"; then -@@ -7870,7 +7935,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 - $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } --if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : -+if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -7907,7 +7972,7 @@ - ac_save_CXXFLAGS=$CXXFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 - $as_echo_n "checking whether $CXX accepts -g... " >&6; } --if test "${ac_cv_prog_cxx_g+set}" = set; then : -+if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag -@@ -7993,7 +8058,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -@@ -8019,6 +8084,11 @@ - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi -+ am__universal=false -+ case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac -+ - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and -@@ -8036,7 +8106,17 @@ - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -+ # We check with `-c' and `-o' for the sake of the "dashmstdout" -+ # mode. It turns out that the SunPro C++ compiler does not properly -+ # handle `-M -o', and we need to detect this. Also, some Intel -+ # versions had trouble with output in subdirs -+ am__obj=sub/conftest.${OBJEXT-o} -+ am__minus_obj="-o $am__obj" - case $depmode in -+ gcc) -+ # This depmode causes a compiler race in universal mode. -+ test "$am__universal" = false || continue -+ ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested -@@ -8046,19 +8126,23 @@ - break - fi - ;; -+ msvisualcpp | msvcmsys) -+ # This compiler won't grok `-c -o', but also, the minuso test has -+ # not run yet. These depmodes are late enough in the game, and -+ # so weak that their functioning should not be impacted. -+ am__obj=conftest.${OBJEXT-o} -+ am__minus_obj= -+ ;; - none) break ;; - esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. - if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -+ source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message -@@ -8108,7 +8192,7 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 - $as_echo_n "checking how to run the C++ preprocessor... " >&6; } - if test -z "$CXXCPP"; then -- if test "${ac_cv_prog_CXXCPP+set}" = set; then : -+ if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 - else - # Double quotes because CXXCPP needs to be expanded -@@ -8138,7 +8222,7 @@ - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -@@ -8154,11 +8238,11 @@ - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - break - fi -@@ -8197,7 +8281,7 @@ - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -@@ -8213,11 +8297,11 @@ - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - - else -@@ -8384,7 +8468,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 - $as_echo_n "checking for objdir... " >&6; } --if test "${lt_cv_objdir+set}" = set; then : -+if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 - else - rm -f .libs 2>/dev/null -@@ -8492,7 +8576,7 @@ - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 - $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } --if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : -+if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 - else - case $MAGIC_CMD in -@@ -8558,7 +8642,7 @@ - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 - $as_echo_n "checking for file... " >&6; } --if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : -+if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 - else - case $MAGIC_CMD in -@@ -8695,7 +8779,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 - $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } --if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : -+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_rtti_exceptions=no -@@ -8711,11 +8795,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:8714: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:8798: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:8718: \$? = $ac_status" >&5 -+ echo "$as_me:8802: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -9034,7 +9118,7 @@ - if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 - $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } --if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : -+if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_pic_works=no -@@ -9050,11 +9134,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:9053: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:9137: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:9057: \$? = $ac_status" >&5 -+ echo "$as_me:9141: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -9093,7 +9177,7 @@ - wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 - $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } --if test "${lt_cv_prog_compiler_static_works+set}" = set; then : -+if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_static_works=no -@@ -9136,7 +9220,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 - $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } --if test "${lt_cv_prog_compiler_c_o+set}" = set; then : -+if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_c_o=no -@@ -9155,11 +9239,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:9158: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:9242: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:9162: \$? = $ac_status" >&5 -+ echo "$as_me:9246: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -9191,7 +9275,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 - $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } --if test "${lt_cv_prog_compiler_c_o+set}" = set; then : -+if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_c_o=no -@@ -9210,11 +9294,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:9213: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:9297: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:9217: \$? = $ac_status" >&5 -+ echo "$as_me:9301: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -9998,6 +10082,13 @@ - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - int foo(void) {} -+int -+main () -+{ -+ -+ ; -+ return 0; -+} - _ACEOF - if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' -@@ -11336,7 +11427,7 @@ - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 - $as_echo_n "checking for dlopen in -ldl... " >&6; } --if test "${ac_cv_lib_dl_dlopen+set}" = set; then : -+if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS -@@ -11370,7 +11461,7 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 - $as_echo "$ac_cv_lib_dl_dlopen" >&6; } --if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : -+if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" - else - -@@ -11384,12 +11475,12 @@ - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" --if test "x$ac_cv_func_shl_load" = x""yes; then : -+if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 - $as_echo_n "checking for shl_load in -ldld... " >&6; } --if test "${ac_cv_lib_dld_shl_load+set}" = set; then : -+if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS -@@ -11423,16 +11514,16 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 - $as_echo "$ac_cv_lib_dld_shl_load" >&6; } --if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : -+if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" - else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" --if test "x$ac_cv_func_dlopen" = x""yes; then : -+if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 - $as_echo_n "checking for dlopen in -ldl... " >&6; } --if test "${ac_cv_lib_dl_dlopen+set}" = set; then : -+if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS -@@ -11466,12 +11557,12 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 - $as_echo "$ac_cv_lib_dl_dlopen" >&6; } --if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : -+if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 - $as_echo_n "checking for dlopen in -lsvld... " >&6; } --if test "${ac_cv_lib_svld_dlopen+set}" = set; then : -+if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS -@@ -11505,12 +11596,12 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 - $as_echo "$ac_cv_lib_svld_dlopen" >&6; } --if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : -+if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 - $as_echo_n "checking for dld_link in -ldld... " >&6; } --if test "${ac_cv_lib_dld_dld_link+set}" = set; then : -+if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS -@@ -11544,7 +11635,7 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 - $as_echo "$ac_cv_lib_dld_dld_link" >&6; } --if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : -+if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" - fi - -@@ -11585,7 +11676,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 - $as_echo_n "checking whether a program can dlopen itself... " >&6; } --if test "${lt_cv_dlopen_self+set}" = set; then : -+if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test "$cross_compiling" = yes; then : -@@ -11594,7 +11685,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 11597 "configure" -+#line 11688 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -11681,7 +11772,7 @@ - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 - $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } --if test "${lt_cv_dlopen_self_static+set}" = set; then : -+if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test "$cross_compiling" = yes; then : -@@ -11690,7 +11781,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 11693 "configure" -+#line 11784 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -12068,7 +12159,7 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 - $as_echo_n "checking for non-GNU ld... " >&6; } - fi --if test "${lt_cv_path_LD+set}" = set; then : -+if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$LD"; then -@@ -12105,10 +12196,10 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 - $as_echo "no" >&6; } - fi --test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 - $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } --if test "${lt_cv_prog_gnu_ld+set}" = set; then : -+if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 - else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -@@ -13630,7 +13721,7 @@ - if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 - $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } --if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : -+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_pic_works_CXX=no -@@ -13646,11 +13737,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:13649: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:13740: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:13653: \$? = $ac_status" >&5 -+ echo "$as_me:13744: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -13686,7 +13777,7 @@ - wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 - $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } --if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : -+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_static_works_CXX=no -@@ -13726,7 +13817,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 - $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } --if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : -+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_c_o_CXX=no -@@ -13745,11 +13836,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:13748: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:13839: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:13752: \$? = $ac_status" >&5 -+ echo "$as_me:13843: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -13778,7 +13869,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 - $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } --if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : -+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - lt_cv_prog_compiler_c_o_CXX=no -@@ -13797,11 +13888,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:13800: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:13891: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:13804: \$? = $ac_status" >&5 -+ echo "$as_me:13895: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -14776,7 +14867,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 - $as_echo_n "checking for inline... " >&6; } --if test "${ac_cv_c_inline+set}" = set; then : -+if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_cv_c_inline=no -@@ -14819,7 +14910,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5 - $as_echo_n "checking for __attribute__... " >&6; } -- if test "${ac_cv___attribute__+set}" = set; then : -+ if ${ac_cv___attribute__+:} false; then : - $as_echo_n "(cached) " >&6 - else - -@@ -14857,7 +14948,7 @@ - # Check whether some low-level functions/files are available - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 - $as_echo_n "checking for ANSI C header files... " >&6; } --if test "${ac_cv_header_stdc+set}" = set; then : -+if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -14970,7 +15061,7 @@ - - # TODO(csilvers): we could remove a lot when WITH_CPU_PROFILER etc is "no". - ac_fn_c_check_type "$LINENO" "__int64" "ac_cv_type___int64" "$ac_includes_default" --if test "x$ac_cv_type___int64" = x""yes; then : -+if test "x$ac_cv_type___int64" = xyes; then : - - cat >>confdefs.h <<_ACEOF - #define HAVE___INT64 1 -@@ -14981,7 +15072,7 @@ - # defined in some windows platforms - ac_fn_c_check_type "$LINENO" "struct mallinfo" "ac_cv_type_struct_mallinfo" "#include - " --if test "x$ac_cv_type_struct_mallinfo" = x""yes; then : -+if test "x$ac_cv_type_struct_mallinfo" = xyes; then : - - cat >>confdefs.h <<_ACEOF - #define HAVE_STRUCT_MALLINFO 1 -@@ -14992,7 +15083,7 @@ - - ac_fn_c_check_type "$LINENO" "Elf32_Versym" "ac_cv_type_Elf32_Versym" "#include - " --if test "x$ac_cv_type_Elf32_Versym" = x""yes; then : -+if test "x$ac_cv_type_Elf32_Versym" = xyes; then : - - cat >>confdefs.h <<_ACEOF - #define HAVE_ELF32_VERSYM 1 -@@ -15004,7 +15095,7 @@ - for ac_func in sbrk - do : - ac_fn_c_check_func "$LINENO" "sbrk" "ac_cv_func_sbrk" --if test "x$ac_cv_func_sbrk" = x""yes; then : -+if test "x$ac_cv_func_sbrk" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SBRK 1 - _ACEOF -@@ -15015,7 +15106,7 @@ - for ac_func in geteuid - do : - ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid" --if test "x$ac_cv_func_geteuid" = x""yes; then : -+if test "x$ac_cv_func_geteuid" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_GETEUID 1 - _ACEOF -@@ -15026,7 +15117,7 @@ - for ac_header in features.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "features.h" "ac_cv_header_features_h" "$ac_includes_default" --if test "x$ac_cv_header_features_h" = x""yes; then : -+if test "x$ac_cv_header_features_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_FEATURES_H 1 - _ACEOF -@@ -15038,7 +15129,7 @@ - for ac_header in malloc.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" --if test "x$ac_cv_header_malloc_h" = x""yes; then : -+if test "x$ac_cv_header_malloc_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_MALLOC_H 1 - _ACEOF -@@ -15050,7 +15141,7 @@ - for ac_header in sys/malloc.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/malloc.h" "ac_cv_header_sys_malloc_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_malloc_h" = x""yes; then : -+if test "x$ac_cv_header_sys_malloc_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_MALLOC_H 1 - _ACEOF -@@ -15062,7 +15153,7 @@ - for ac_header in malloc/malloc.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "malloc/malloc.h" "ac_cv_header_malloc_malloc_h" "$ac_includes_default" --if test "x$ac_cv_header_malloc_malloc_h" = x""yes; then : -+if test "x$ac_cv_header_malloc_malloc_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_MALLOC_MALLOC_H 1 - _ACEOF -@@ -15074,7 +15165,7 @@ - for ac_header in glob.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "glob.h" "ac_cv_header_glob_h" "$ac_includes_default" --if test "x$ac_cv_header_glob_h" = x""yes; then : -+if test "x$ac_cv_header_glob_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_GLOB_H 1 - _ACEOF -@@ -15086,7 +15177,7 @@ - for ac_header in execinfo.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default" --if test "x$ac_cv_header_execinfo_h" = x""yes; then : -+if test "x$ac_cv_header_execinfo_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_EXECINFO_H 1 - _ACEOF -@@ -15098,7 +15189,7 @@ - for ac_header in libunwind.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "libunwind.h" "ac_cv_header_libunwind_h" "$ac_includes_default" --if test "x$ac_cv_header_libunwind_h" = x""yes; then : -+if test "x$ac_cv_header_libunwind_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_LIBUNWIND_H 1 - _ACEOF -@@ -15110,7 +15201,7 @@ - for ac_header in unwind.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "unwind.h" "ac_cv_header_unwind_h" "$ac_includes_default" --if test "x$ac_cv_header_unwind_h" = x""yes; then : -+if test "x$ac_cv_header_unwind_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_UNWIND_H 1 - _ACEOF -@@ -15122,7 +15213,7 @@ - for ac_header in sched.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default" --if test "x$ac_cv_header_sched_h" = x""yes; then : -+if test "x$ac_cv_header_sched_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SCHED_H 1 - _ACEOF -@@ -15134,7 +15225,7 @@ - for ac_header in conflict-signal.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "conflict-signal.h" "ac_cv_header_conflict_signal_h" "$ac_includes_default" --if test "x$ac_cv_header_conflict_signal_h" = x""yes; then : -+if test "x$ac_cv_header_conflict_signal_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_CONFLICT_SIGNAL_H 1 - _ACEOF -@@ -15146,7 +15237,7 @@ - for ac_header in sys/prctl.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/prctl.h" "ac_cv_header_sys_prctl_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_prctl_h" = x""yes; then : -+if test "x$ac_cv_header_sys_prctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_PRCTL_H 1 - _ACEOF -@@ -15158,7 +15249,7 @@ - for ac_header in linux/ptrace.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "linux/ptrace.h" "ac_cv_header_linux_ptrace_h" "$ac_includes_default" --if test "x$ac_cv_header_linux_ptrace_h" = x""yes; then : -+if test "x$ac_cv_header_linux_ptrace_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_LINUX_PTRACE_H 1 - _ACEOF -@@ -15170,7 +15261,7 @@ - for ac_header in sys/syscall.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/syscall.h" "ac_cv_header_sys_syscall_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_syscall_h" = x""yes; then : -+if test "x$ac_cv_header_sys_syscall_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_SYSCALL_H 1 - _ACEOF -@@ -15182,7 +15273,7 @@ - for ac_header in sys/socket.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_socket_h" = x""yes; then : -+if test "x$ac_cv_header_sys_socket_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_SOCKET_H 1 - _ACEOF -@@ -15194,7 +15285,7 @@ - for ac_header in sys/wait.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_wait_h" = x""yes; then : -+if test "x$ac_cv_header_sys_wait_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_WAIT_H 1 - _ACEOF -@@ -15206,7 +15297,7 @@ - for ac_header in poll.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" --if test "x$ac_cv_header_poll_h" = x""yes; then : -+if test "x$ac_cv_header_poll_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_POLL_H 1 - _ACEOF -@@ -15218,7 +15309,7 @@ - for ac_header in fcntl.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" --if test "x$ac_cv_header_fcntl_h" = x""yes; then : -+if test "x$ac_cv_header_fcntl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_FCNTL_H 1 - _ACEOF -@@ -15230,7 +15321,7 @@ - for ac_header in grp.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default" --if test "x$ac_cv_header_grp_h" = x""yes; then : -+if test "x$ac_cv_header_grp_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_GRP_H 1 - _ACEOF -@@ -15242,7 +15333,7 @@ - for ac_header in pwd.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default" --if test "x$ac_cv_header_pwd_h" = x""yes; then : -+if test "x$ac_cv_header_pwd_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_PWD_H 1 - _ACEOF -@@ -15254,7 +15345,7 @@ - for ac_header in sys/resource.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_resource_h" = x""yes; then : -+if test "x$ac_cv_header_sys_resource_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_RESOURCE_H 1 - _ACEOF -@@ -15266,7 +15357,7 @@ - for ac_header in valgrind.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "valgrind.h" "ac_cv_header_valgrind_h" "$ac_includes_default" --if test "x$ac_cv_header_valgrind_h" = x""yes; then : -+if test "x$ac_cv_header_valgrind_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_VALGRIND_H 1 - _ACEOF -@@ -15278,7 +15369,7 @@ - for ac_header in sys/cdefs.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/cdefs.h" "ac_cv_header_sys_cdefs_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_cdefs_h" = x""yes; then : -+if test "x$ac_cv_header_sys_cdefs_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_CDEFS_H 1 - _ACEOF -@@ -15290,7 +15381,7 @@ - for ac_header in features.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "features.h" "ac_cv_header_features_h" "$ac_includes_default" --if test "x$ac_cv_header_features_h" = x""yes; then : -+if test "x$ac_cv_header_features_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_FEATURES_H 1 - _ACEOF -@@ -15308,7 +15399,7 @@ - #include - #include - " --if test "x$ac_cv_have_decl_cfree" = x""yes; then : -+if test "x$ac_cv_have_decl_cfree" = xyes; then : - ac_have_decl=1 - else - ac_have_decl=0 -@@ -15321,7 +15412,7 @@ - #include - #include - " --if test "x$ac_cv_have_decl_posix_memalign" = x""yes; then : -+if test "x$ac_cv_have_decl_posix_memalign" = xyes; then : - ac_have_decl=1 - else - ac_have_decl=0 -@@ -15334,7 +15425,7 @@ - #include - #include - " --if test "x$ac_cv_have_decl_memalign" = x""yes; then : -+if test "x$ac_cv_have_decl_memalign" = xyes; then : - ac_have_decl=1 - else - ac_have_decl=0 -@@ -15347,7 +15438,7 @@ - #include - #include - " --if test "x$ac_cv_have_decl_valloc" = x""yes; then : -+if test "x$ac_cv_have_decl_valloc" = xyes; then : - ac_have_decl=1 - else - ac_have_decl=0 -@@ -15360,7 +15451,7 @@ - #include - #include - " --if test "x$ac_cv_have_decl_pvalloc" = x""yes; then : -+if test "x$ac_cv_have_decl_pvalloc" = xyes; then : - ac_have_decl=1 - else - ac_have_decl=0 -@@ -15391,7 +15482,13 @@ - $as_echo "#define HAVE_MMAP 1" >>confdefs.h - - ;; -- *) -+ *) if test "$cross_compiling" = yes; then -+ ac_cv_func_mmap_fixed_mapped=yes -+ -+$as_echo "#define HAVE_MMAP 1" >>confdefs.h -+ -+ else -+ - - - for ac_header in $ac_header_list -@@ -15399,8 +15496,7 @@ - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` - ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default - " --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF -@@ -15419,7 +15515,7 @@ - for ac_func in getpagesize - do : - ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" --if test "x$ac_cv_func_getpagesize" = x""yes; then : -+if test "x$ac_cv_func_getpagesize" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_GETPAGESIZE 1 - _ACEOF -@@ -15429,7 +15525,7 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 - $as_echo_n "checking for working mmap... " >&6; } --if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then : -+if ${ac_cv_func_mmap_fixed_mapped+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test "$cross_compiling" = yes; then : -@@ -15593,6 +15689,7 @@ - fi - rm -f conftest.mmap conftest.txt - -+ fi - ;; - esac - -@@ -15633,7 +15730,7 @@ - for ac_header in ucontext.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "ucontext.h" "ac_cv_header_ucontext_h" "$ac_includes_default" --if test "x$ac_cv_header_ucontext_h" = x""yes; then : -+if test "x$ac_cv_header_ucontext_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_UCONTEXT_H 1 - _ACEOF -@@ -15653,7 +15750,7 @@ - for ac_header in sys/ucontext.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/ucontext.h" "ac_cv_header_sys_ucontext_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_ucontext_h" = x""yes; then : -+if test "x$ac_cv_header_sys_ucontext_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_SYS_UCONTEXT_H 1 - _ACEOF -@@ -15666,7 +15763,7 @@ - for ac_header in cygwin/signal.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "cygwin/signal.h" "ac_cv_header_cygwin_signal_h" "$ac_includes_default" --if test "x$ac_cv_header_cygwin_signal_h" = x""yes; then : -+if test "x$ac_cv_header_cygwin_signal_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_CYGWIN_SIGNAL_H 1 - _ACEOF -@@ -15847,7 +15944,7 @@ - # We want to link in libunwind if it exists - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for backtrace in -lunwind" >&5 - $as_echo_n "checking for backtrace in -lunwind... " >&6; } --if test "${ac_cv_lib_unwind_backtrace+set}" = set; then : -+if ${ac_cv_lib_unwind_backtrace+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_check_lib_save_LIBS=$LIBS -@@ -15881,7 +15978,7 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_unwind_backtrace" >&5 - $as_echo "$ac_cv_lib_unwind_backtrace" >&6; } --if test "x$ac_cv_lib_unwind_backtrace" = x""yes; then : -+if test "x$ac_cv_lib_unwind_backtrace" = xyes; then : - UNWIND_LIBS=-lunwind - else - UNWIND_LIBS= -@@ -15889,8 +15986,7 @@ - - - --# On x86_64, instead of libunwind, we can choose to compile with frame-pointers --# (This isn't needed on i386, where -fno-omit-frame-pointer is the default). -+# On x86_64, instead of libunwind, we can choose to compile with frame-pointers. - # Check whether --enable-frame_pointers was given. - if test "${enable_frame_pointers+set}" = set; then : - enableval=$enable_frame_pointers; -@@ -15907,8 +16003,7 @@ - fi - - --# Some x86_64 systems do not insert frame pointers by default (all --# i386 systems that I know of, do. I don't know about non-x86 chips). -+# Some x86_64 systems do not insert frame pointers by default. - # We want to see if the current system is one of those. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ -@@ -15993,7 +16088,7 @@ - # which we don't care about. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports -Wno-unused-result" >&5 - $as_echo_n "checking if the compiler supports -Wno-unused-result... " >&6; } --if test "${perftools_cv_w_no_unused_result+set}" = set; then : -+if ${perftools_cv_w_no_unused_result+:} false; then : - $as_echo_n "(cached) " >&6 - else - OLD_CFLAGS="$CFLAGS" -@@ -16035,7 +16130,7 @@ - # Defines PRIuS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking printf format code for printing a size_t and ssize_t" >&5 - $as_echo_n "checking printf format code for printing a size_t and ssize_t... " >&6; } --if test "${ac_cv_formatting_prius_prefix+set}" = set; then : -+if ${ac_cv_formatting_prius_prefix+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -16138,6 +16233,33 @@ - rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -+# Check for __builtin_expect() -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect()" >&5 -+$as_echo_n "checking for __builtin_expect()... " >&6; } -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+int -+main () -+{ -+return __builtin_expect(main != 0, 1) -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ -+$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+$as_echo "yes" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+ - # Check if __environ is available (for GetenvBeforeMain) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __environ" >&5 - $as_echo_n "checking for __environ... " >&6; } -@@ -16284,7 +16406,7 @@ - LIBS="$OLD_LIBS" - fi - if test "x$acx_nanosleep_ok" != "xyes"; then -- as_fn_error "cannot find the nanosleep function" "$LINENO" 5 -+ as_fn_error $? "cannot find the nanosleep function" "$LINENO" 5 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${NANOSLEEP_LIBS:-no}" >&5 - $as_echo "${NANOSLEEP_LIBS:-no}" >&6; } -@@ -16311,7 +16433,7 @@ - # We also need to check if the kernel supports __thread, which requires uname() - ac_fn_c_check_decl "$LINENO" "uname" "ac_cv_have_decl_uname" "#include - " --if test "x$ac_cv_have_decl_uname" = x""yes; then : -+if test "x$ac_cv_have_decl_uname" = xyes; then : - ac_have_decl=1 - else - ac_have_decl=0 -@@ -16448,7 +16570,7 @@ - set dummy pthread-config; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_acx_pthread_config+set}" = set; then : -+if ${ac_cv_prog_acx_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$acx_pthread_config"; then -@@ -16603,7 +16725,7 @@ - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then : -+if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$PTHREAD_CC"; then -@@ -16920,7 +17042,7 @@ - # Find out what namespace 'normal' STL code lives in - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements namespaces" >&5 - $as_echo_n "checking whether the compiler implements namespaces... " >&6; } --if test "${ac_cv_cxx_namespaces+set}" = set; then : -+if ${ac_cv_cxx_namespaces+:} false; then : - $as_echo_n "(cached) " >&6 - else - -@@ -16964,7 +17086,7 @@ - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what namespace STL code is in" >&5 - $as_echo_n "checking what namespace STL code is in... " >&6; } --if test "${ac_cv_cxx_stl_namespace+set}" = set; then : -+if ${ac_cv_cxx_stl_namespace+:} false; then : - $as_echo_n "(cached) " >&6 - else - -@@ -17029,7 +17151,7 @@ - # Figure out where libc has program_invocation_name - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for program_invocation_name" >&5 - $as_echo_n "checking for program_invocation_name... " >&6; } --if test "${ac_cv_have_program_invocation_name+set}" = set; then : -+if ${ac_cv_have_program_invocation_name+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -@@ -17248,10 +17370,21 @@ - :end' >>confcache - if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then -- test "x$cache_file" != "x/dev/null" && -+ if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 - $as_echo "$as_me: updating cache $cache_file" >&6;} -- cat confcache >$cache_file -+ if test ! -f "$cache_file" || test -h "$cache_file"; then -+ cat confcache >"$cache_file" -+ else -+ case $cache_file in #( -+ */* | ?:*) -+ mv -f confcache "$cache_file"$$ && -+ mv -f "$cache_file"$$ "$cache_file" ;; #( -+ *) -+ mv -f confcache "$cache_file" ;; -+ esac -+ fi -+ fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 - $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} -@@ -17267,6 +17400,7 @@ - - ac_libobjs= - ac_ltlibobjs= -+U= - for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' -@@ -17282,87 +17416,87 @@ - - - if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then -- as_fn_error "conditional \"AMDEP\" was never defined. -+ as_fn_error $? "conditional \"AMDEP\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCXX\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCC\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then -- as_fn_error "conditional \"GCC\" was never defined. -+ as_fn_error $? "conditional \"GCC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${HAVE_OBJCOPY_WEAKEN_TRUE}" && test -z "${HAVE_OBJCOPY_WEAKEN_FALSE}"; then -- as_fn_error "conditional \"HAVE_OBJCOPY_WEAKEN\" was never defined. -+ as_fn_error $? "conditional \"HAVE_OBJCOPY_WEAKEN\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCXX\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${USE_LIBTOOL_TRUE}" && test -z "${USE_LIBTOOL_FALSE}"; then -- as_fn_error "conditional \"USE_LIBTOOL\" was never defined. -+ as_fn_error $? "conditional \"USE_LIBTOOL\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${ENABLE_STATIC_TRUE}" && test -z "${ENABLE_STATIC_FALSE}"; then -- as_fn_error "conditional \"ENABLE_STATIC\" was never defined. -+ as_fn_error $? "conditional \"ENABLE_STATIC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${ENABLE_FRAME_POINTERS_TRUE}" && test -z "${ENABLE_FRAME_POINTERS_FALSE}"; then -- as_fn_error "conditional \"ENABLE_FRAME_POINTERS\" was never defined. -+ as_fn_error $? "conditional \"ENABLE_FRAME_POINTERS\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${X86_64_AND_NO_FP_BY_DEFAULT_TRUE}" && test -z "${X86_64_AND_NO_FP_BY_DEFAULT_FALSE}"; then -- as_fn_error "conditional \"X86_64_AND_NO_FP_BY_DEFAULT\" was never defined. -+ as_fn_error $? "conditional \"X86_64_AND_NO_FP_BY_DEFAULT\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${I386_TRUE}" && test -z "${I386_FALSE}"; then -- as_fn_error "conditional \"I386\" was never defined. -+ as_fn_error $? "conditional \"I386\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${HAVE_W_NO_UNUSED_RESULT_TRUE}" && test -z "${HAVE_W_NO_UNUSED_RESULT_FALSE}"; then -- as_fn_error "conditional \"HAVE_W_NO_UNUSED_RESULT\" was never defined. -+ as_fn_error $? "conditional \"HAVE_W_NO_UNUSED_RESULT\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then -- as_fn_error "conditional \"MINGW\" was never defined. -+ as_fn_error $? "conditional \"MINGW\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then -- as_fn_error "conditional \"OSX\" was never defined. -+ as_fn_error $? "conditional \"OSX\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${WITH_CPU_PROFILER_TRUE}" && test -z "${WITH_CPU_PROFILER_FALSE}"; then -- as_fn_error "conditional \"WITH_CPU_PROFILER\" was never defined. -+ as_fn_error $? "conditional \"WITH_CPU_PROFILER\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${WITH_HEAP_PROFILER_TRUE}" && test -z "${WITH_HEAP_PROFILER_FALSE}"; then -- as_fn_error "conditional \"WITH_HEAP_PROFILER\" was never defined. -+ as_fn_error $? "conditional \"WITH_HEAP_PROFILER\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${WITH_HEAP_CHECKER_TRUE}" && test -z "${WITH_HEAP_CHECKER_FALSE}"; then -- as_fn_error "conditional \"WITH_HEAP_CHECKER\" was never defined. -+ as_fn_error $? "conditional \"WITH_HEAP_CHECKER\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${WITH_DEBUGALLOC_TRUE}" && test -z "${WITH_DEBUGALLOC_FALSE}"; then -- as_fn_error "conditional \"WITH_DEBUGALLOC\" was never defined. -+ as_fn_error $? "conditional \"WITH_DEBUGALLOC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${WITH_HEAP_PROFILER_OR_CHECKER_TRUE}" && test -z "${WITH_HEAP_PROFILER_OR_CHECKER_FALSE}"; then -- as_fn_error "conditional \"WITH_HEAP_PROFILER_OR_CHECKER\" was never defined. -+ as_fn_error $? "conditional \"WITH_HEAP_PROFILER_OR_CHECKER\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${WITH_STACK_TRACE_TRUE}" && test -z "${WITH_STACK_TRACE_FALSE}"; then -- as_fn_error "conditional \"WITH_STACK_TRACE\" was never defined. -+ as_fn_error $? "conditional \"WITH_STACK_TRACE\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - --: ${CONFIG_STATUS=./config.status} -+: "${CONFIG_STATUS=./config.status}" - ac_write_fail=0 - ac_clean_files_save=$ac_clean_files - ac_clean_files="$ac_clean_files $CONFIG_STATUS" -@@ -17463,6 +17597,7 @@ - IFS=" "" $as_nl" - - # Find who we are. Look in the path if we contain no directory separator. -+as_myself= - case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -@@ -17508,19 +17643,19 @@ - (unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - --# as_fn_error ERROR [LINENO LOG_FD] --# --------------------------------- -+# as_fn_error STATUS ERROR [LINENO LOG_FD] -+# ---------------------------------------- - # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are - # provided, also output the error to LOG_FD, referencing LINENO. Then exit the --# script with status $?, using 1 if that was 0. -+# script with STATUS, using 1 if that was 0. - as_fn_error () - { -- as_status=$?; test $as_status -eq 0 && as_status=1 -- if test "$3"; then -- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 -+ as_status=$1; test $as_status -eq 0 && as_status=1 -+ if test "$4"; then -+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi -- $as_echo "$as_me: error: $1" >&2 -+ $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status - } # as_fn_error - -@@ -17716,7 +17851,7 @@ - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" -- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - - } # as_fn_mkdir_p -@@ -17770,7 +17905,7 @@ - # values after options handling. - ac_log=" - This file was extended by gperftools $as_me 2.0, which was --generated by GNU Autoconf 2.65. Invocation command line was -+generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -17836,10 +17971,10 @@ - ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" - ac_cs_version="\\ - gperftools config.status 2.0 --configured by $0, generated by GNU Autoconf 2.65, -+configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - --Copyright (C) 2009 Free Software Foundation, Inc. -+Copyright (C) 2010 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it." - -@@ -17857,11 +17992,16 @@ - while test $# != 0 - do - case $1 in -- --*=*) -+ --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; -+ --*=) -+ ac_option=`expr "X$1" : 'X\([^=]*\)='` -+ ac_optarg= -+ ac_shift=: -+ ;; - *) - ac_option=$1 - ac_optarg=$2 -@@ -17883,6 +18023,7 @@ - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; -+ '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; -@@ -17895,7 +18036,7 @@ - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header -- as_fn_error "ambiguous option: \`$1' -+ as_fn_error $? "ambiguous option: \`$1' - Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; -@@ -17904,7 +18045,7 @@ - ac_cs_silent=: ;; - - # This is an error. -- -*) as_fn_error "unrecognized option: \`$1' -+ -*) as_fn_error $? "unrecognized option: \`$1' - Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" -@@ -18316,7 +18457,7 @@ - "src/gperftools/tcmalloc.h") CONFIG_FILES="$CONFIG_FILES src/gperftools/tcmalloc.h" ;; - "src/windows/gperftools/tcmalloc.h") CONFIG_FILES="$CONFIG_FILES src/windows/gperftools/tcmalloc.h" ;; - -- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; -+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac - done - -@@ -18339,9 +18480,10 @@ - # after its creation but before its name has been assigned to `$tmp'. - $debug || - { -- tmp= -+ tmp= ac_tmp= - trap 'exit_status=$? -- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -+ : "${ac_tmp:=$tmp}" -+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status - ' 0 - trap 'as_fn_exit 1' 1 2 13 15 - } -@@ -18349,12 +18491,13 @@ - - { - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && -- test -n "$tmp" && test -d "$tmp" -+ test -d "$tmp" - } || - { - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") --} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -+ac_tmp=$tmp - - # Set up the scripts for CONFIG_FILES section. - # No need to generate them if there are no CONFIG_FILES. -@@ -18371,12 +18514,12 @@ - fi - ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` - if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then -- ac_cs_awk_cr='\r' -+ ac_cs_awk_cr='\\r' - else - ac_cs_awk_cr=$ac_cr - fi - --echo 'BEGIN {' >"$tmp/subs1.awk" && -+echo 'BEGIN {' >"$ac_tmp/subs1.awk" && - _ACEOF - - -@@ -18385,18 +18528,18 @@ - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" - } >conf$$subs.sh || -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 --ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` - ac_delim='%!_!# ' - for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -@@ -18404,7 +18547,7 @@ - rm -f conf$$subs.sh - - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 --cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && - _ACEOF - sed -n ' - h -@@ -18452,7 +18595,7 @@ - rm -f conf$$subs.awk - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - _ACAWK --cat >>"\$tmp/subs1.awk" <<_ACAWK && -+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -@@ -18484,21 +18627,29 @@ - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" - else - cat --fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ -- || as_fn_error "could not setup config files machinery" "$LINENO" 5 -+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ -+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 - _ACEOF - --# VPATH may cause trouble with some makes, so we remove $(srcdir), --# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -+# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and - # trailing colons and then remove the whole line if VPATH becomes empty - # (actually we leave an empty line to preserve line numbers). - if test "x$srcdir" = x.; then -- ac_vpsub='/^[ ]*VPATH[ ]*=/{ --s/:*\$(srcdir):*/:/ --s/:*\${srcdir}:*/:/ --s/:*@srcdir@:*/:/ --s/^\([^=]*=[ ]*\):*/\1/ -+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -+h -+s/// -+s/^/:/ -+s/[ ]*$/:/ -+s/:\$(srcdir):/:/g -+s/:\${srcdir}:/:/g -+s/:@srcdir@:/:/g -+s/^:*// - s/:*$// -+x -+s/\(=[ ]*\).*/\1/ -+G -+s/\n// - s/^[^=]*=[ ]*$// - }' - fi -@@ -18510,7 +18661,7 @@ - # No need to generate them if there are no CONFIG_HEADERS. - # This happens for instance with `./config.status Makefile'. - if test -n "$CONFIG_HEADERS"; then --cat >"$tmp/defines.awk" <<\_ACAWK || -+cat >"$ac_tmp/defines.awk" <<\_ACAWK || - BEGIN { - _ACEOF - -@@ -18522,11 +18673,11 @@ - # handling of long lines. - ac_delim='%!_!# ' - for ac_last_try in false false :; do -- ac_t=`sed -n "/$ac_delim/p" confdefs.h` -- if test -z "$ac_t"; then -+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h` -+ if test -z "$ac_tt"; then - break - elif $ac_last_try; then -- as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 -+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -@@ -18611,7 +18762,7 @@ - _ACAWK - _ACEOF - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -- as_fn_error "could not setup config headers machinery" "$LINENO" 5 -+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 - fi # test -n "$CONFIG_HEADERS" - - -@@ -18624,7 +18775,7 @@ - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; -- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; -+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac -@@ -18643,7 +18794,7 @@ - for ac_f - do - case $ac_f in -- -) ac_f="$tmp/stdin";; -+ -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. -@@ -18652,7 +18803,7 @@ - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || -- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; -+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" -@@ -18678,8 +18829,8 @@ - esac - - case $ac_tag in -- *:-:* | *:-) cat >"$tmp/stdin" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; -+ *:-:* | *:-) cat >"$ac_tmp/stdin" \ -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac -@@ -18815,23 +18966,24 @@ - s&@MKDIR_P@&$ac_MKDIR_P&;t t - $ac_datarootdir_hack - " --eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ -+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - - test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && -- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && -- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && -+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && -+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ -+ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' --which seems to be undefined. Please make sure it is defined." >&5 -+which seems to be undefined. Please make sure it is defined" >&5 - $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' --which seems to be undefined. Please make sure it is defined." >&2;} -+which seems to be undefined. Please make sure it is defined" >&2;} - -- rm -f "$tmp/stdin" -+ rm -f "$ac_tmp/stdin" - case $ac_file in -- -) cat "$tmp/out" && rm -f "$tmp/out";; -- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; -+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; -+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # -@@ -18840,21 +18992,21 @@ - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ -- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" -- } >"$tmp/config.h" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then -+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" -+ } >"$ac_tmp/config.h" \ -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 -+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 - $as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" -- mv "$tmp/config.h" "$ac_file" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ mv "$ac_tmp/config.h" "$ac_file" \ -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ -- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ -- || as_fn_error "could not create -" "$LINENO" 5 -+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ -+ || as_fn_error $? "could not create -" "$LINENO" 5 - fi - # Compute "$ac_file"'s index in $config_headers. - _am_arg="$ac_file" -@@ -18899,18 +19051,28 @@ - - - case $ac_file$ac_mode in -- "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do -- # Strip MF so we end up with the name of the file. -- mf=`echo "$mf" | sed -e 's/:.*$//'` -- # Check whether this is an Automake generated Makefile or not. -- # We used to match only the files named `Makefile.in', but -- # some people rename them; so instead we look at the file content. -- # Grep'ing the first line is not enough: some people post-process -- # each Makefile.in and add a new line on top of each file to say so. -- # Grep'ing the whole file is not good either: AIX grep has a line -- # limit of 2048, but all sed's we know have understand at least 4000. -- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then -- dirpart=`$as_dirname -- "$mf" || -+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || { -+ # Autoconf 2.62 quotes --file arguments for eval, but not when files -+ # are listed without --file. Let's play safe and only enable the eval -+ # if we detect the quoting. -+ case $CONFIG_FILES in -+ *\'*) eval set x "$CONFIG_FILES" ;; -+ *) set x $CONFIG_FILES ;; -+ esac -+ shift -+ for mf -+ do -+ # Strip MF so we end up with the name of the file. -+ mf=`echo "$mf" | sed -e 's/:.*$//'` -+ # Check whether this is an Automake generated Makefile or not. -+ # We used to match only the files named `Makefile.in', but -+ # some people rename them; so instead we look at the file content. -+ # Grep'ing the first line is not enough: some people post-process -+ # each Makefile.in and add a new line on top of each file to say so. -+ # Grep'ing the whole file is not good either: AIX grep has a line -+ # limit of 2048, but all sed's we know have understand at least 4000. -+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then -+ dirpart=`$as_dirname -- "$mf" || - $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ -@@ -18933,28 +19095,28 @@ - q - } - s/.*/./; q'` -- else -- continue -- fi -- # Extract the definition of DEPDIR, am__include, and am__quote -- # from the Makefile without running `make'. -- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` -- test -z "$DEPDIR" && continue -- am__include=`sed -n 's/^am__include = //p' < "$mf"` -- test -z "am__include" && continue -- am__quote=`sed -n 's/^am__quote = //p' < "$mf"` -- # When using ansi2knr, U may be empty or an underscore; expand it -- U=`sed -n 's/^U = //p' < "$mf"` -- # Find all dependency output files, they are included files with -- # $(DEPDIR) in their names. We invoke sed twice because it is the -- # simplest approach to changing $(DEPDIR) to its actual value in the -- # expansion. -- for file in `sed -n " -- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ -- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do -- # Make sure the directory exists. -- test -f "$dirpart/$file" && continue -- fdir=`$as_dirname -- "$file" || -+ else -+ continue -+ fi -+ # Extract the definition of DEPDIR, am__include, and am__quote -+ # from the Makefile without running `make'. -+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` -+ test -z "$DEPDIR" && continue -+ am__include=`sed -n 's/^am__include = //p' < "$mf"` -+ test -z "am__include" && continue -+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"` -+ # When using ansi2knr, U may be empty or an underscore; expand it -+ U=`sed -n 's/^U = //p' < "$mf"` -+ # Find all dependency output files, they are included files with -+ # $(DEPDIR) in their names. We invoke sed twice because it is the -+ # simplest approach to changing $(DEPDIR) to its actual value in the -+ # expansion. -+ for file in `sed -n " -+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ -+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do -+ # Make sure the directory exists. -+ test -f "$dirpart/$file" && continue -+ fdir=`$as_dirname -- "$file" || - $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ -@@ -18977,11 +19139,12 @@ - q - } - s/.*/./; q'` -- as_dir=$dirpart/$fdir; as_fn_mkdir_p -- # echo "creating $dirpart/$file" -- echo '# dummy' > "$dirpart/$file" -+ as_dir=$dirpart/$fdir; as_fn_mkdir_p -+ # echo "creating $dirpart/$file" -+ echo '# dummy' > "$dirpart/$file" -+ done - done --done -+} - ;; - "libtool":C) - -@@ -19795,7 +19958,7 @@ - ac_clean_files=$ac_clean_files_save - - test $ac_write_fail = 0 || -- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 -+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - - # configure is writing to config.log, and then calls config.status. -@@ -19816,7 +19979,7 @@ - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. -- $ac_cs_success || as_fn_exit $? -+ $ac_cs_success || as_fn_exit 1 - fi - if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -diff -urP gperftools-2.0/configure.ac /home/spot/gperftools/configure.ac ---- gperftools-2.0/configure.ac 2012-02-03 14:37:01.000000000 -0500 -+++ /home/spot/gperftools/configure.ac 2013-03-01 14:25:39.084366811 -0500 -@@ -2,9 +2,9 @@ - ## In general, the safest way to proceed is to run ./autogen.sh - - # make sure we're interpreted by some minimal autoconf --AC_PREREQ(2.57) -+AC_PREREQ([2.68]) - --AC_INIT(gperftools, 2.0, google-perftools@googlegroups.com) -+AC_INIT([gperftools],[2.0],[google-perftools@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=5:0:1 -@@ -19,7 +19,7 @@ - AC_CONFIG_MACRO_DIR([m4]) - AC_CANONICAL_HOST - AM_INIT_AUTOMAKE([dist-zip]) --AM_CONFIG_HEADER(src/config.h) -+AC_CONFIG_HEADERS([src/config.h]) - - # Export the version information (for tc_version and friends) - TC_VERSION_MAJOR=`expr "$PACKAGE_VERSION" : '\([[0-9]]*\)'` -@@ -92,7 +92,7 @@ - AC_CHECK_TOOL([OBJCOPY], [objcopy], []) - AS_IF([test -n "$OBJCOPY"], [dnl - AC_CACHE_CHECK([if $OBJCOPY supports -W], gpt_cv_objcopy_weaken, [dnl -- AC_LINK_IFELSE([void foo() {} int main() {return 0;}], [dnl -+ AC_LINK_IFELSE([AC_LANG_PROGRAM([void foo() {} int main() {return 0;}])], [dnl - AS_IF(["$OBJCOPY" -W foo conftest$ac_exeext /dev/null], - [gpt_cv_objcopy_weaken=yes], [gpt_cv_objcopy_weaken=no])], - [gpt_cv_objcopy_weaken=no])])], -@@ -105,14 +105,20 @@ - # around the executables it builds. Such scripts have caused failures on - # MinGW. Using this option means an extra link step is executed during - # "make install". -- AC_DISABLE_FAST_INSTALL -+ _LT_SET_OPTION([LT_INIT],[disable-fast-install]) -+AC_DIAGNOSE([obsolete],[AC_DISABLE_FAST_INSTALL: Remove this warning and the call to _LT_SET_OPTION when you put -+the `disable-fast-install' option into LT_INIT's first parameter.]) -+ - ;; - *) -- AC_ENABLE_FAST_INSTALL -+ _LT_SET_OPTION([LT_INIT],[fast-install]) -+AC_DIAGNOSE([obsolete],[AC_ENABLE_FAST_INSTALL: Remove this warning and the call to _LT_SET_OPTION when you put -+the `fast-install' option into LT_INIT's first parameter.]) -+ - ;; - esac - --AC_PROG_LIBTOOL -+LT_INIT - AC_SUBST(LIBTOOL_DEPS) - AM_CONDITIONAL(USE_LIBTOOL, test "x$LIBTOOL" != "x") - -@@ -182,19 +188,22 @@ - AC_DEFINE(HAVE_MMAP, 1, - [Define to 1 if you have a working `mmap' system call.]) - ;; -- *) AC_FUNC_MMAP -+ *) if test "$cross_compiling" = yes; then -+ ac_cv_func_mmap_fixed_mapped=yes -+ AC_DEFINE(HAVE_MMAP, 1, -+ [Define to 1 if you have a working `mmap' system call.]) -+ else -+ AC_FUNC_MMAP -+ fi - ;; - esac - - # If AtomicWord != Atomic32, we need to define two versions of all the - # atomicops functions. If they're the same, we want to define only one. - AC_MSG_CHECKING([if int32_t is the same type as intptr_t]) --AC_TRY_COMPILE([#include ], -- [int32_t v1 = 0; intptr_t v2 = 0; return (&v1 - &v2)], -- [AC_DEFINE(INT32_EQUALS_INTPTR, 1, -+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int32_t v1 = 0; intptr_t v2 = 0; return (&v1 - &v2)]])],[AC_DEFINE(INT32_EQUALS_INTPTR, 1, - Define to 1 if int32_t is equivalent to intptr_t) -- AC_MSG_RESULT([yes])], -- [AC_MSG_RESULT([no])]) -+ AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])]) - - # We want to access the "PC" (Program Counter) register from a struct - # ucontext. Every system has its own way of doing that. We try all the -@@ -214,16 +223,14 @@ - AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind, UNWIND_LIBS=) - AC_SUBST(UNWIND_LIBS) - --# On x86_64, instead of libunwind, we can choose to compile with frame-pointers --# (This isn't needed on i386, where -fno-omit-frame-pointer is the default). -+# On x86_64, instead of libunwind, we can choose to compile with frame-pointers. - AC_ARG_ENABLE(frame_pointers, - AS_HELP_STRING([--enable-frame-pointers], - [On x86_64 systems, compile with -fno-omit-frame-pointer (see INSTALL)]), - , enable_frame_pointers=no) - AM_CONDITIONAL(ENABLE_FRAME_POINTERS, test "$enable_frame_pointers" = yes) - --# Some x86_64 systems do not insert frame pointers by default (all --# i386 systems that I know of, do. I don't know about non-x86 chips). -+# Some x86_64 systems do not insert frame pointers by default. - # We want to see if the current system is one of those. - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __x86_64__ == 1 ? 0 : 1])], - [is_x86_64=yes], [is_x86_64=no]) -@@ -282,6 +289,14 @@ - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) - -+# Check for __builtin_expect() -+AC_MSG_CHECKING([for __builtin_expect()]) -+AC_LINK_IFELSE([AC_LANG_PROGRAM(, return __builtin_expect(main != 0, 1))], -+ [AC_DEFINE(HAVE_BUILTIN_EXPECT, 1, -+ Define to 1 if compiler supports __builtin_expect) -+ AC_MSG_RESULT([yes])], -+ [AC_MSG_RESULT([no])]) -+ - # Check if __environ is available (for GetenvBeforeMain) - AC_MSG_CHECKING([for __environ]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], -diff -urP gperftools-2.0/doc/cpuprofile.html /home/spot/gperftools/doc/cpuprofile.html ---- gperftools-2.0/doc/cpuprofile.html 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/doc/cpuprofile.html 2013-03-01 14:25:39.088366811 -0500 -@@ -54,12 +54,27 @@ - /bin/ls that had been linked against libprofiler, - you could run:

-
% env CPUPROFILE=ls.prof /bin/ls
-- -+ -+
  • In addition to defining the environment variable CPUPROFILE -+ you can also define CPUPROFILESIGNAL. This allows profiling to be -+ controlled via the signal number that you specify. The signal number -+ must be unused by the program under normal operation. Internally it -+ acts as a switch, triggered by the signal, which is off by default. -+ For instance, if you had a copy of /bin/chrome that had been -+ been linked against libprofiler, you could run:

    -+
    % env CPUPROFILE=chrome.prof CPUPROFILESIGNAL=12 /bin/chrome &
    -+

    You can then trigger profiling to start:

    -+
    % killall -12 chrome
    -+

    Then after a period of time you can tell it to stop which will -+ generate the profile:

    -+
    % killall -12 chrome
    -+
  • -
  • In your code, bracket the code you want profiled in calls to - ProfilerStart() and ProfilerStop(). - (These functions are declared in <gperftools/profiler.h>.) - ProfilerStart() will take - the profile-filename as an argument.

    -+
  • - - -

    In Linux 2.6 and above, profiling works correctly with threads, -diff -urP gperftools-2.0/doc/heapprofile.html /home/spot/gperftools/doc/heapprofile.html ---- gperftools-2.0/doc/heapprofile.html 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/doc/heapprofile.html 2013-03-01 14:25:39.086366811 -0500 -@@ -91,7 +91,7 @@ - HEAP_PROFILE_ALLOCATION_INTERVAL - default: 1073741824 (1 Gb) - -- Dump heap profiling information once every specified number of -+ Dump heap profiling information each time the specified number of - bytes has been allocated by the program. - - -@@ -106,6 +106,15 @@ - - - -+ HEAP_PROFILE_TIME_INTERVAL -+ default: 104857600 (100 Mb) -+ -+ Dump heap profiling information each time the specified -+ number of seconds has elapsed. -+ -+ -+ -+ - HEAP_PROFILE_MMAP - default: false - -@@ -122,7 +131,7 @@ - - - -- HEAP_PROFILE_MMAP_ONLY -+ HEAP_PROFILE_ONLY_MMAP - default: false - - Only profile mmap, mremap, and sbrk -diff -urP gperftools-2.0/doc/pprof.see_also /home/spot/gperftools/doc/pprof.see_also ---- gperftools-2.0/doc/pprof.see_also 1969-12-31 19:00:00.000000000 -0500 -+++ /home/spot/gperftools/doc/pprof.see_also 2013-03-01 14:25:39.089366811 -0500 -@@ -0,0 +1,11 @@ -+[see also] -+Further documentation for -+.B pprof -+is maintained as a web page called -+.B cpu_profiler.html -+and is likely installed at one of the following locations: -+.IP -+.B /usr/share/gperftools/cpu_profiler.html -+.br -+.B /usr/local/share/gperftools/cpu_profiler.html -+.PP -Only in gperftools-2.0: libtool -diff -urP gperftools-2.0/m4/libtool.m4 /home/spot/gperftools/m4/libtool.m4 ---- gperftools-2.0/m4/libtool.m4 2010-11-05 18:21:23.000000000 -0400 -+++ /home/spot/gperftools/m4/libtool.m4 2013-03-01 14:25:37.807366857 -0500 -@@ -1021,7 +1021,7 @@ - # to the aix ld manual. - m4_defun([_LT_SYS_MODULE_PATH_AIX], - [m4_require([_LT_DECL_SED])dnl --AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -+AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { -@@ -4846,7 +4846,7 @@ - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" -- AC_LINK_IFELSE(int foo(void) {}, -+ AC_LINK_IFELSE([AC_LANG_PROGRAM([int foo(void) {}])], - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" -diff -urP gperftools-2.0/Makefile.am /home/spot/gperftools/Makefile.am ---- gperftools-2.0/Makefile.am 2012-02-03 14:32:08.000000000 -0500 -+++ /home/spot/gperftools/Makefile.am 2013-03-01 14:25:39.163366809 -0500 -@@ -29,10 +29,15 @@ - -fno-builtin-calloc -fno-builtin-cfree \ - -fno-builtin-memalign -fno-builtin-posix_memalign \ - -fno-builtin-valloc -fno-builtin-pvalloc -+ - # On i386, -mmmx is needed for the mmx-based instructions in --# atomicops-internal-x86.h. -+# atomicops-internal-x86.h. Also as of gcc 4.6, -fomit-frame-pointer -+# is the default. Since we must always have frame pointers for I386 -+# in order to generate backtraces we now specify -fno-omit-frame-pointer -+# by default. - if I386 - AM_CXXFLAGS += -mmmx -+AM_CXXFLAGS += -fno-omit-frame-pointer - endif I386 - endif GCC - if HAVE_W_NO_UNUSED_RESULT -@@ -121,8 +126,7 @@ - src/google/malloc_hook_c.h \ - src/google/profiler.h \ - src/google/stacktrace.h \ -- src/google/tcmalloc.h \ -- src/windows/google/tcmalloc.h -+ src/google/tcmalloc.h - - docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) - # This is for HTML and other documentation you want to install. -@@ -432,9 +436,8 @@ - SG_TCMALLOC_MINIMAL_INCLUDES = src/gperftools/malloc_hook.h \ - src/gperftools/malloc_hook_c.h \ - src/gperftools/malloc_extension.h \ -- src/gperftools/malloc_extension_c.h \ -- src/gperftools/stacktrace.h --TCMALLOC_MINIMAL_INCLUDES = $(S_TCMALLOC_MINIMAL_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) -+ src/gperftools/malloc_extension_c.h -+TCMALLOC_MINIMAL_INCLUDES = $(S_TCMALLOC_MINIMAL_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) $(SG_STACKTRACE_INCLUDES) - perftoolsinclude_HEADERS += $(SG_TCMALLOC_MINIMAL_INCLUDES) - - ### Making the library -@@ -842,10 +845,10 @@ - src/base/sysinfo.h \ - src/base/thread_lister.h \ - src/heap-profile-table.h --SG_TCMALLOC_INCLUDES = $(SG_TCMALLOC_MINIMAL_INCLUDES) \ -- src/gperftools/heap-profiler.h \ -+SG_TCMALLOC_INCLUDES = src/gperftools/heap-profiler.h \ - src/gperftools/heap-checker.h --TCMALLOC_INCLUDES = $(S_TCMALLOC_INCLUDES) $(SG_TCMALLOC_INCLUDES) -+TCMALLOC_INCLUDES = $(S_TCMALLOC_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) \ -+ $(SG_TCMALLOC_INCLUDES) $(SG_STACKTRACE_INCLUDES) - perftoolsinclude_HEADERS += $(SG_TCMALLOC_INCLUDES) - - ### Making the library -@@ -1186,9 +1189,9 @@ - src/base/sysinfo.h \ - $(SPINLOCK_INCLUDES) \ - $(LOGGING_INCLUDES) --SG_CPU_PROFILER_INCLUDES = src/gperftools/profiler.h \ -- src/gperftools/stacktrace.h --CPU_PROFILER_INCLUDES = $(S_CPU_PROFILER_INCLUDES) $(SG_CPU_PROFILER_INCLUDES) -+SG_CPU_PROFILER_INCLUDES = src/gperftools/profiler.h -+CPU_PROFILER_INCLUDES = $(S_CPU_PROFILER_INCLUDES) $(SG_CPU_PROFILER_INCLUDES) \ -+ $(SG_STACKTRACE_INCLUDES) - perftoolsinclude_HEADERS += $(SG_CPU_PROFILER_INCLUDES) - - ### Making the library -diff -urP gperftools-2.0/Makefile.in /home/spot/gperftools/Makefile.in ---- gperftools-2.0/Makefile.in 2012-02-03 14:39:18.000000000 -0500 -+++ /home/spot/gperftools/Makefile.in 2013-03-01 14:25:37.963366851 -0500 -@@ -1,8 +1,9 @@ --# Makefile.in generated by automake 1.10.1 from Makefile.am. -+# Makefile.in generated by automake 1.10.3 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -54,9 +55,13 @@ - @GCC_TRUE@ -fno-builtin-memalign -fno-builtin-posix_memalign \ - @GCC_TRUE@ -fno-builtin-valloc -fno-builtin-pvalloc - -+ - # On i386, -mmmx is needed for the mmx-based instructions in --# atomicops-internal-x86.h. --@GCC_TRUE@@I386_TRUE@am__append_3 = -mmmx -+# atomicops-internal-x86.h. Also as of gcc 4.6, -fomit-frame-pointer -+# is the default. Since we must always have frame pointers for I386 -+# in order to generate backtraces we now specify -fno-omit-frame-pointer -+# by default. -+@GCC_TRUE@@I386_TRUE@am__append_3 = -mmmx -fno-omit-frame-pointer - @HAVE_W_NO_UNUSED_RESULT_TRUE@am__append_4 = -Wno-unused-result - - # These are x86-specific, having to do with frame-pointers. In -@@ -344,7 +349,7 @@ - @WITH_CPU_PROFILER_TRUE@am__objects_2 = $(am__objects_1) \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_1) - @WITH_CPU_PROFILER_TRUE@am__objects_3 = $(am__objects_2) \ --@WITH_CPU_PROFILER_TRUE@ $(am__objects_1) -+@WITH_CPU_PROFILER_TRUE@ $(am__objects_1) $(am__objects_1) - @WITH_CPU_PROFILER_TRUE@am_libprofiler_la_OBJECTS = profiler.lo \ - @WITH_CPU_PROFILER_TRUE@ profile-handler.lo profiledata.lo \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_3) -@@ -434,26 +439,27 @@ - src/gperftools/malloc_hook.h src/gperftools/malloc_hook_c.h \ - src/gperftools/malloc_extension.h \ - src/gperftools/malloc_extension_c.h \ -- src/gperftools/stacktrace.h src/gperftools/heap-profiler.h \ -- src/gperftools/heap-checker.h src/base/thread_lister.c \ -+ src/gperftools/heap-profiler.h src/gperftools/heap-checker.h \ -+ src/gperftools/stacktrace.h src/base/thread_lister.c \ - src/base/linuxthreads.cc src/heap-checker.cc \ - src/heap-checker-bcad.cc - @MINGW_FALSE@am__objects_5 = libtcmalloc_la-tcmalloc.lo - am__objects_6 = $(am__objects_1) - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_7 = $(am__objects_6) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_8 = $(am__objects_1) --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_9 = $(am__objects_7) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_8) --@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_10 = thread_lister.lo \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_8 = $(am__objects_7) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) -+@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_9 = thread_lister.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_la-linuxthreads.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_la-heap-checker.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_la-heap-checker-bcad.lo --@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_11 = $(am__objects_10) -+@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_10 = $(am__objects_9) - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_libtcmalloc_la_OBJECTS = \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_5) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_9) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_11) -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_8) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_10) - libtcmalloc_la_OBJECTS = $(am_libtcmalloc_la_OBJECTS) - libtcmalloc_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ -@@ -497,29 +503,29 @@ - src/gperftools/malloc_hook.h src/gperftools/malloc_hook_c.h \ - src/gperftools/malloc_extension.h \ - src/gperftools/malloc_extension_c.h \ -- src/gperftools/stacktrace.h src/gperftools/heap-profiler.h \ -- src/gperftools/heap-checker.h src/base/thread_lister.c \ -+ src/gperftools/heap-profiler.h src/gperftools/heap-checker.h \ -+ src/gperftools/stacktrace.h src/base/thread_lister.c \ - src/base/linuxthreads.cc src/heap-checker.cc \ - src/heap-checker-bcad.cc src/profiler.cc \ - src/profile-handler.cc src/profiledata.cc src/profiledata.h \ - src/profile-handler.h src/getpc.h src/base/simple_mutex.h \ - src/gperftools/profiler.h --@MINGW_FALSE@am__objects_12 = libtcmalloc_and_profiler_la-tcmalloc.lo --@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_13 = thread_lister.lo \ -+@MINGW_FALSE@am__objects_11 = libtcmalloc_and_profiler_la-tcmalloc.lo -+@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_12 = thread_lister.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_and_profiler_la-linuxthreads.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_and_profiler_la-heap-checker.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_and_profiler_la-heap-checker-bcad.lo --@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_14 = $(am__objects_13) --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_15 = \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_12) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_9) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_14) --@WITH_CPU_PROFILER_TRUE@am__objects_16 = libtcmalloc_and_profiler_la-profiler.lo \ -+@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_13 = $(am__objects_12) -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_14 = \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_11) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_8) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_13) -+@WITH_CPU_PROFILER_TRUE@am__objects_15 = libtcmalloc_and_profiler_la-profiler.lo \ - @WITH_CPU_PROFILER_TRUE@ libtcmalloc_and_profiler_la-profile-handler.lo \ - @WITH_CPU_PROFILER_TRUE@ libtcmalloc_and_profiler_la-profiledata.lo \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_3) --@WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_libtcmalloc_and_profiler_la_OBJECTS = $(am__objects_15) \ --@WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_16) -+@WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_libtcmalloc_and_profiler_la_OBJECTS = $(am__objects_14) \ -+@WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_15) - libtcmalloc_and_profiler_la_OBJECTS = \ - $(am_libtcmalloc_and_profiler_la_OBJECTS) - libtcmalloc_and_profiler_la_LINK = $(LIBTOOL) --tag=CXX \ -@@ -563,15 +569,15 @@ - src/gperftools/malloc_hook.h src/gperftools/malloc_hook_c.h \ - src/gperftools/malloc_extension.h \ - src/gperftools/malloc_extension_c.h \ -- src/gperftools/stacktrace.h src/gperftools/heap-profiler.h \ -- src/gperftools/heap-checker.h --@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_17 = thread_lister.lo \ -+ src/gperftools/heap-profiler.h src/gperftools/heap-checker.h \ -+ src/gperftools/stacktrace.h -+@WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_16 = thread_lister.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_debug_la-linuxthreads.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_debug_la-heap-checker.lo \ - @WITH_HEAP_CHECKER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_debug_la-heap-checker-bcad.lo - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_libtcmalloc_debug_la_OBJECTS = libtcmalloc_debug_la-debugallocation.lo \ --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_17) \ --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_9) -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_16) \ -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_8) - libtcmalloc_debug_la_OBJECTS = $(am_libtcmalloc_debug_la_OBJECTS) - libtcmalloc_debug_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ -@@ -623,12 +629,12 @@ - src/gperftools/heap-checker.h src/base/low_level_alloc.cc \ - src/heap-profile-table.cc src/heap-profiler.cc \ - src/raw_printer.cc src/memory_region_map.cc --@MINGW_FALSE@am__objects_18 = libtcmalloc_internal_la-system-alloc.lo --@MINGW_FALSE@am__objects_19 = \ -+@MINGW_FALSE@am__objects_17 = libtcmalloc_internal_la-system-alloc.lo -+@MINGW_FALSE@am__objects_18 = \ - @MINGW_FALSE@ libtcmalloc_internal_la-maybe_threads.lo --am__objects_20 = $(am__objects_6) $(am__objects_1) --am__objects_21 = libtcmalloc_internal_la-common.lo \ -- libtcmalloc_internal_la-internal_logging.lo $(am__objects_18) \ -+am__objects_19 = $(am__objects_6) $(am__objects_1) $(am__objects_1) -+am__objects_20 = libtcmalloc_internal_la-common.lo \ -+ libtcmalloc_internal_la-internal_logging.lo $(am__objects_17) \ - libtcmalloc_internal_la-memfs_malloc.lo \ - libtcmalloc_internal_la-central_freelist.lo \ - libtcmalloc_internal_la-page_heap.lo \ -@@ -639,11 +645,11 @@ - libtcmalloc_internal_la-symbolize.lo \ - libtcmalloc_internal_la-thread_cache.lo \ - libtcmalloc_internal_la-malloc_hook.lo \ -- libtcmalloc_internal_la-malloc_extension.lo $(am__objects_19) \ -- $(am__objects_20) -+ libtcmalloc_internal_la-malloc_extension.lo $(am__objects_18) \ -+ $(am__objects_19) - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_libtcmalloc_internal_la_OBJECTS = \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_21) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_9) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_20) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_8) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_internal_la-low_level_alloc.lo \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_internal_la-heap-profile-table.lo \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ libtcmalloc_internal_la-heap-profiler.lo \ -@@ -685,9 +691,9 @@ - src/gperftools/malloc_extension.h \ - src/gperftools/malloc_extension_c.h \ - src/gperftools/stacktrace.h --@MINGW_FALSE@am__objects_22 = libtcmalloc_minimal_la-tcmalloc.lo --am_libtcmalloc_minimal_la_OBJECTS = $(am__objects_22) \ -- $(am__objects_20) -+@MINGW_FALSE@am__objects_21 = libtcmalloc_minimal_la-tcmalloc.lo -+am_libtcmalloc_minimal_la_OBJECTS = $(am__objects_21) \ -+ $(am__objects_19) - libtcmalloc_minimal_la_OBJECTS = $(am_libtcmalloc_minimal_la_OBJECTS) - libtcmalloc_minimal_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ -@@ -725,7 +731,7 @@ - src/gperftools/malloc_extension_c.h \ - src/gperftools/stacktrace.h - @WITH_DEBUGALLOC_TRUE@am_libtcmalloc_minimal_debug_la_OBJECTS = libtcmalloc_minimal_debug_la-debugallocation.lo \ --@WITH_DEBUGALLOC_TRUE@ $(am__objects_20) -+@WITH_DEBUGALLOC_TRUE@ $(am__objects_19) - libtcmalloc_minimal_debug_la_OBJECTS = \ - $(am_libtcmalloc_minimal_debug_la_OBJECTS) - libtcmalloc_minimal_debug_la_LINK = $(LIBTOOL) --tag=CXX \ -@@ -768,14 +774,14 @@ - src/gperftools/malloc_extension.h \ - src/gperftools/malloc_extension_c.h \ - src/gperftools/stacktrace.h --@MINGW_FALSE@am__objects_23 = \ -+@MINGW_FALSE@am__objects_22 = \ - @MINGW_FALSE@ libtcmalloc_minimal_internal_la-system-alloc.lo --@MINGW_FALSE@am__objects_24 = \ -+@MINGW_FALSE@am__objects_23 = \ - @MINGW_FALSE@ libtcmalloc_minimal_internal_la-maybe_threads.lo - am_libtcmalloc_minimal_internal_la_OBJECTS = \ - libtcmalloc_minimal_internal_la-common.lo \ - libtcmalloc_minimal_internal_la-internal_logging.lo \ -- $(am__objects_23) \ -+ $(am__objects_22) \ - libtcmalloc_minimal_internal_la-memfs_malloc.lo \ - libtcmalloc_minimal_internal_la-central_freelist.lo \ - libtcmalloc_minimal_internal_la-page_heap.lo \ -@@ -787,7 +793,7 @@ - libtcmalloc_minimal_internal_la-thread_cache.lo \ - libtcmalloc_minimal_internal_la-malloc_hook.lo \ - libtcmalloc_minimal_internal_la-malloc_extension.lo \ -- $(am__objects_24) $(am__objects_20) -+ $(am__objects_23) $(am__objects_19) - libtcmalloc_minimal_internal_la_OBJECTS = \ - $(am_libtcmalloc_minimal_internal_la_OBJECTS) - libtcmalloc_minimal_internal_la_LINK = $(LIBTOOL) --tag=CXX \ -@@ -873,10 +879,10 @@ - src/base/basictypes.h src/base/dynamic_annotations.h \ - src/third_party/valgrind.h src/windows/port.h \ - src/windows/port.cc --@MINGW_TRUE@am__objects_25 = addressmap_unittest-port.$(OBJEXT) -+@MINGW_TRUE@am__objects_24 = addressmap_unittest-port.$(OBJEXT) - am_addressmap_unittest_OBJECTS = \ - addressmap_unittest-addressmap_unittest.$(OBJEXT) \ -- $(am__objects_6) $(am__objects_25) -+ $(am__objects_6) $(am__objects_24) - addressmap_unittest_OBJECTS = $(am_addressmap_unittest_OBJECTS) - addressmap_unittest_DEPENDENCIES = liblogging.la - addressmap_unittest_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ -@@ -935,10 +941,10 @@ - src/base/googleinit.h src/gperftools/heap-checker.h \ - src/base/logging.h src/base/basictypes.h \ - src/base/dynamic_annotations.h src/third_party/valgrind.h --@WITH_HEAP_CHECKER_TRUE@am__objects_26 = $(am__objects_1) --@WITH_HEAP_CHECKER_TRUE@am__objects_27 = heap_checker_debug_unittest-heap-checker_unittest.$(OBJEXT) \ --@WITH_HEAP_CHECKER_TRUE@ $(am__objects_26) --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_CHECKER_TRUE@am_heap_checker_debug_unittest_OBJECTS = $(am__objects_27) -+@WITH_HEAP_CHECKER_TRUE@am__objects_25 = $(am__objects_1) -+@WITH_HEAP_CHECKER_TRUE@am__objects_26 = heap_checker_debug_unittest-heap-checker_unittest.$(OBJEXT) \ -+@WITH_HEAP_CHECKER_TRUE@ $(am__objects_25) -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_CHECKER_TRUE@am_heap_checker_debug_unittest_OBJECTS = $(am__objects_26) - heap_checker_debug_unittest_OBJECTS = \ - $(am_heap_checker_debug_unittest_OBJECTS) - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_CHECKER_TRUE@heap_checker_debug_unittest_DEPENDENCIES = libtcmalloc_debug.la \ -@@ -961,7 +967,7 @@ - src/base/logging.h src/base/basictypes.h \ - src/base/dynamic_annotations.h src/third_party/valgrind.h - @WITH_HEAP_CHECKER_TRUE@am_heap_checker_unittest_OBJECTS = heap_checker_unittest-heap-checker_unittest.$(OBJEXT) \ --@WITH_HEAP_CHECKER_TRUE@ $(am__objects_26) -+@WITH_HEAP_CHECKER_TRUE@ $(am__objects_25) - heap_checker_unittest_OBJECTS = $(am_heap_checker_unittest_OBJECTS) - @WITH_HEAP_CHECKER_TRUE@heap_checker_unittest_DEPENDENCIES = \ - @WITH_HEAP_CHECKER_TRUE@ $(LIBTCMALLOC) liblogging.la \ -@@ -979,9 +985,9 @@ - am__heap_profiler_debug_unittest_SOURCES_DIST = \ - src/tests/heap-profiler_unittest.cc src/config_for_unittests.h \ - src/gperftools/heap-profiler.h --@WITH_HEAP_PROFILER_TRUE@am__objects_28 = heap_profiler_debug_unittest-heap-profiler_unittest.$(OBJEXT) \ -+@WITH_HEAP_PROFILER_TRUE@am__objects_27 = heap_profiler_debug_unittest-heap-profiler_unittest.$(OBJEXT) \ - @WITH_HEAP_PROFILER_TRUE@ $(am__objects_1) --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_TRUE@am_heap_profiler_debug_unittest_OBJECTS = $(am__objects_28) -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_TRUE@am_heap_profiler_debug_unittest_OBJECTS = $(am__objects_27) - heap_profiler_debug_unittest_OBJECTS = \ - $(am_heap_profiler_debug_unittest_OBJECTS) - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_TRUE@heap_profiler_debug_unittest_DEPENDENCIES = libtcmalloc_debug.la \ -@@ -1033,15 +1039,15 @@ - src/base/atomicops-internals-arm-v6plus.h src/base/logging.h \ - src/base/commandlineflags.h src/base/dynamic_annotations.h \ - src/third_party/valgrind.h --@MINGW_FALSE@am__objects_29 = \ -+@MINGW_FALSE@am__objects_28 = \ - @MINGW_FALSE@ low_level_alloc_unittest-maybe_threads.$(OBJEXT) --am__objects_30 = $(am__objects_1) $(am__objects_1) -+am__objects_29 = $(am__objects_1) $(am__objects_1) - am_low_level_alloc_unittest_OBJECTS = \ - low_level_alloc_unittest-low_level_alloc.$(OBJEXT) \ - low_level_alloc_unittest-malloc_hook.$(OBJEXT) \ -- $(am__objects_29) \ -+ $(am__objects_28) \ - low_level_alloc_unittest-low_level_alloc_unittest.$(OBJEXT) \ -- $(am__objects_30) -+ $(am__objects_29) - low_level_alloc_unittest_OBJECTS = \ - $(am_low_level_alloc_unittest_OBJECTS) - low_level_alloc_unittest_DEPENDENCIES = $(LIBSPINLOCK) -@@ -1067,10 +1073,10 @@ - src/tests/malloc_extension_test.cc src/config_for_unittests.h \ - src/base/logging.h src/gperftools/malloc_extension.h \ - src/gperftools/malloc_extension_c.h --am__objects_31 = \ -+am__objects_30 = \ - malloc_extension_debug_test-malloc_extension_test.$(OBJEXT) - @WITH_DEBUGALLOC_TRUE@am_malloc_extension_debug_test_OBJECTS = \ --@WITH_DEBUGALLOC_TRUE@ $(am__objects_31) -+@WITH_DEBUGALLOC_TRUE@ $(am__objects_30) - malloc_extension_debug_test_OBJECTS = \ - $(am_malloc_extension_debug_test_OBJECTS) - @WITH_DEBUGALLOC_TRUE@malloc_extension_debug_test_DEPENDENCIES = \ -@@ -1119,9 +1125,9 @@ - src/tests/memalign_unittest.cc src/tcmalloc.h \ - src/config_for_unittests.h src/tests/testutil.h \ - src/tests/testutil.cc --@MINGW_FALSE@@OSX_FALSE@am__objects_32 = memalign_debug_unittest-memalign_unittest.$(OBJEXT) \ -+@MINGW_FALSE@@OSX_FALSE@am__objects_31 = memalign_debug_unittest-memalign_unittest.$(OBJEXT) \ - @MINGW_FALSE@@OSX_FALSE@ memalign_debug_unittest-testutil.$(OBJEXT) --@MINGW_FALSE@@OSX_FALSE@@WITH_DEBUGALLOC_TRUE@am_memalign_debug_unittest_OBJECTS = $(am__objects_32) -+@MINGW_FALSE@@OSX_FALSE@@WITH_DEBUGALLOC_TRUE@am_memalign_debug_unittest_OBJECTS = $(am__objects_31) - memalign_debug_unittest_OBJECTS = \ - $(am_memalign_debug_unittest_OBJECTS) - @MINGW_FALSE@@OSX_FALSE@@WITH_DEBUGALLOC_TRUE@memalign_debug_unittest_DEPENDENCIES = libtcmalloc_minimal_debug.la \ -@@ -1192,11 +1198,11 @@ - am__profiler1_unittest_SOURCES_DIST = src/tests/profiler_unittest.cc \ - src/tests/testutil.h src/tests/testutil.cc \ - src/config_for_unittests.h src/gperftools/profiler.h --@WITH_CPU_PROFILER_TRUE@am__objects_33 = profiler1_unittest-profiler_unittest.$(OBJEXT) \ -+@WITH_CPU_PROFILER_TRUE@am__objects_32 = profiler1_unittest-profiler_unittest.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ profiler1_unittest-testutil.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_1) - @WITH_CPU_PROFILER_TRUE@am_profiler1_unittest_OBJECTS = \ --@WITH_CPU_PROFILER_TRUE@ $(am__objects_33) -+@WITH_CPU_PROFILER_TRUE@ $(am__objects_32) - profiler1_unittest_OBJECTS = $(am_profiler1_unittest_OBJECTS) - @WITH_CPU_PROFILER_TRUE@profiler1_unittest_DEPENDENCIES = \ - @WITH_CPU_PROFILER_TRUE@ $(LIBPROFILER) -@@ -1207,11 +1213,11 @@ - am__profiler2_unittest_SOURCES_DIST = src/tests/profiler_unittest.cc \ - src/tests/testutil.h src/tests/testutil.cc \ - src/config_for_unittests.h src/gperftools/profiler.h --@WITH_CPU_PROFILER_TRUE@am__objects_34 = profiler2_unittest-profiler_unittest.$(OBJEXT) \ -+@WITH_CPU_PROFILER_TRUE@am__objects_33 = profiler2_unittest-profiler_unittest.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ profiler2_unittest-testutil.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_1) - @WITH_CPU_PROFILER_TRUE@am_profiler2_unittest_OBJECTS = \ --@WITH_CPU_PROFILER_TRUE@ $(am__objects_34) -+@WITH_CPU_PROFILER_TRUE@ $(am__objects_33) - profiler2_unittest_OBJECTS = $(am_profiler2_unittest_OBJECTS) - profiler2_unittest_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ -@@ -1220,11 +1226,11 @@ - am__profiler3_unittest_SOURCES_DIST = src/tests/profiler_unittest.cc \ - src/tests/testutil.h src/tests/testutil.cc \ - src/config_for_unittests.h src/gperftools/profiler.h --@WITH_CPU_PROFILER_TRUE@am__objects_35 = profiler3_unittest-profiler_unittest.$(OBJEXT) \ -+@WITH_CPU_PROFILER_TRUE@am__objects_34 = profiler3_unittest-profiler_unittest.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ profiler3_unittest-testutil.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_1) - @WITH_CPU_PROFILER_TRUE@am_profiler3_unittest_OBJECTS = \ --@WITH_CPU_PROFILER_TRUE@ $(am__objects_35) -+@WITH_CPU_PROFILER_TRUE@ $(am__objects_34) - profiler3_unittest_OBJECTS = $(am_profiler3_unittest_OBJECTS) - @WITH_CPU_PROFILER_TRUE@profiler3_unittest_DEPENDENCIES = \ - @WITH_CPU_PROFILER_TRUE@ $(LIBPROFILER) $(am__DEPENDENCIES_1) -@@ -1235,11 +1241,11 @@ - am__profiler4_unittest_SOURCES_DIST = src/tests/profiler_unittest.cc \ - src/tests/testutil.h src/tests/testutil.cc \ - src/config_for_unittests.h src/gperftools/profiler.h --@WITH_CPU_PROFILER_TRUE@am__objects_36 = profiler4_unittest-profiler_unittest.$(OBJEXT) \ -+@WITH_CPU_PROFILER_TRUE@am__objects_35 = profiler4_unittest-profiler_unittest.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ profiler4_unittest-testutil.$(OBJEXT) \ - @WITH_CPU_PROFILER_TRUE@ $(am__objects_1) - @WITH_CPU_PROFILER_TRUE@am_profiler4_unittest_OBJECTS = \ --@WITH_CPU_PROFILER_TRUE@ $(am__objects_36) -+@WITH_CPU_PROFILER_TRUE@ $(am__objects_35) - profiler4_unittest_OBJECTS = $(am_profiler4_unittest_OBJECTS) - profiler4_unittest_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ -@@ -1263,9 +1269,9 @@ - am__realloc_debug_unittest_SOURCES_DIST = \ - src/tests/realloc_unittest.cc src/config_for_unittests.h \ - src/base/logging.h --am__objects_37 = realloc_debug_unittest-realloc_unittest.$(OBJEXT) -+am__objects_36 = realloc_debug_unittest-realloc_unittest.$(OBJEXT) - @WITH_DEBUGALLOC_TRUE@am_realloc_debug_unittest_OBJECTS = \ --@WITH_DEBUGALLOC_TRUE@ $(am__objects_37) -+@WITH_DEBUGALLOC_TRUE@ $(am__objects_36) - realloc_debug_unittest_OBJECTS = $(am_realloc_debug_unittest_OBJECTS) - @WITH_DEBUGALLOC_TRUE@realloc_debug_unittest_DEPENDENCIES = \ - @WITH_DEBUGALLOC_TRUE@ libtcmalloc_minimal_debug.la \ -@@ -1285,8 +1291,8 @@ - $(realloc_unittest_LDFLAGS) $(LDFLAGS) -o $@ - am__sampler_debug_test_SOURCES_DIST = src/tests/sampler_test.cc \ - src/config_for_unittests.h --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_38 = sampler_debug_test-sampler_test.$(OBJEXT) --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_sampler_debug_test_OBJECTS = $(am__objects_38) -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_37 = sampler_debug_test-sampler_test.$(OBJEXT) -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_sampler_debug_test_OBJECTS = $(am__objects_37) - sampler_debug_test_OBJECTS = $(am_sampler_debug_test_OBJECTS) - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@sampler_debug_test_DEPENDENCIES = libtcmalloc_debug.la \ - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__DEPENDENCIES_1) -@@ -1307,9 +1313,9 @@ - am__sampling_debug_test_SOURCES_DIST = src/tests/sampling_test.cc \ - src/config_for_unittests.h src/base/logging.h \ - src/gperftools/malloc_extension.h --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_39 = sampling_debug_test-sampling_test.$(OBJEXT) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_38 = sampling_debug_test-sampling_test.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_sampling_debug_test_OBJECTS = $(am__objects_39) -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_sampling_debug_test_OBJECTS = $(am__objects_38) - sampling_debug_test_OBJECTS = $(am_sampling_debug_test_OBJECTS) - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@sampling_debug_test_DEPENDENCIES = libtcmalloc_debug.la \ - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__DEPENDENCIES_1) -@@ -1342,7 +1348,7 @@ - src/google/malloc_extension.h src/google/malloc_extension_c.h \ - src/google/malloc_hook.h src/google/malloc_hook_c.h \ - src/google/profiler.h src/google/stacktrace.h \ -- src/google/tcmalloc.h src/windows/google/tcmalloc.h -+ src/google/tcmalloc.h - @WITH_HEAP_PROFILER_TRUE@am_simple_compat_test_OBJECTS = \ - @WITH_HEAP_PROFILER_TRUE@ simple_compat_test.$(OBJEXT) \ - @WITH_HEAP_PROFILER_TRUE@ $(am__objects_1) -@@ -1371,11 +1377,11 @@ - src/gperftools/stacktrace.h src/base/logging.h \ - src/base/basictypes.h src/base/dynamic_annotations.h \ - src/third_party/valgrind.h --@WITH_STACK_TRACE_TRUE@am__objects_40 = $(am__objects_4) \ -+@WITH_STACK_TRACE_TRUE@am__objects_39 = $(am__objects_4) \ - @WITH_STACK_TRACE_TRUE@ $(am__objects_1) - @WITH_STACK_TRACE_TRUE@am_stacktrace_unittest_OBJECTS = \ - @WITH_STACK_TRACE_TRUE@ stacktrace_unittest.$(OBJEXT) \ --@WITH_STACK_TRACE_TRUE@ $(am__objects_40) -+@WITH_STACK_TRACE_TRUE@ $(am__objects_39) - stacktrace_unittest_OBJECTS = $(am_stacktrace_unittest_OBJECTS) - @WITH_STACK_TRACE_TRUE@stacktrace_unittest_DEPENDENCIES = \ - @WITH_STACK_TRACE_TRUE@ libstacktrace.la liblogging.la -@@ -1393,10 +1399,10 @@ - src/tests/tcmalloc_unittest.cc src/tests/testutil.h \ - src/tests/testutil.cc src/config_for_unittests.h \ - src/gperftools/malloc_extension.h --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_41 = tcmalloc_and_profiler_unittest-tcmalloc_unittest.$(OBJEXT) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_40 = tcmalloc_and_profiler_unittest-tcmalloc_unittest.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ tcmalloc_and_profiler_unittest-testutil.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) --@WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_tcmalloc_and_profiler_unittest_OBJECTS = $(am__objects_41) -+@WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_tcmalloc_and_profiler_unittest_OBJECTS = $(am__objects_40) - tcmalloc_and_profiler_unittest_OBJECTS = \ - $(am_tcmalloc_and_profiler_unittest_OBJECTS) - @WITH_CPU_PROFILER_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@tcmalloc_and_profiler_unittest_DEPENDENCIES = libtcmalloc_and_profiler.la -@@ -1408,10 +1414,10 @@ - src/tests/tcmalloc_unittest.cc src/tests/testutil.h \ - src/tests/testutil.cc src/config_for_unittests.h \ - src/gperftools/malloc_extension.h --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_42 = tcmalloc_both_unittest-tcmalloc_unittest.$(OBJEXT) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_41 = tcmalloc_both_unittest-tcmalloc_unittest.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ tcmalloc_both_unittest-testutil.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) --@OSX_FALSE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_tcmalloc_both_unittest_OBJECTS = $(am__objects_42) -+@OSX_FALSE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_tcmalloc_both_unittest_OBJECTS = $(am__objects_41) - tcmalloc_both_unittest_OBJECTS = $(am_tcmalloc_both_unittest_OBJECTS) - @WITH_CPU_PROFILER_FALSE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__DEPENDENCIES_4 = $(LIBTCMALLOC) \ - @WITH_CPU_PROFILER_FALSE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(LIBTCMALLOC_MINIMAL) \ -@@ -1431,10 +1437,10 @@ - src/tests/tcmalloc_unittest.cc src/tcmalloc.h \ - src/tests/testutil.h src/tests/testutil.cc \ - src/config_for_unittests.h src/gperftools/malloc_extension.h --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_43 = tcmalloc_debug_unittest-tcmalloc_unittest.$(OBJEXT) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am__objects_42 = tcmalloc_debug_unittest-tcmalloc_unittest.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ tcmalloc_debug_unittest-testutil.$(OBJEXT) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(am__objects_1) --@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_tcmalloc_debug_unittest_OBJECTS = $(am__objects_43) -+@WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@am_tcmalloc_debug_unittest_OBJECTS = $(am__objects_42) - tcmalloc_debug_unittest_OBJECTS = \ - $(am_tcmalloc_debug_unittest_OBJECTS) - @WITH_DEBUGALLOC_TRUE@@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@tcmalloc_debug_unittest_DEPENDENCIES = libtcmalloc_debug.la \ -@@ -1459,12 +1465,12 @@ - src/tests/tcmalloc_unittest.cc src/tests/testutil.h \ - src/tests/testutil.cc src/config_for_unittests.h \ - src/gperftools/malloc_extension.h --am__objects_44 = \ -+am__objects_43 = \ - tcmalloc_minimal_debug_unittest-tcmalloc_unittest.$(OBJEXT) \ - tcmalloc_minimal_debug_unittest-testutil.$(OBJEXT) \ - $(am__objects_1) - @WITH_DEBUGALLOC_TRUE@am_tcmalloc_minimal_debug_unittest_OBJECTS = \ --@WITH_DEBUGALLOC_TRUE@ $(am__objects_44) -+@WITH_DEBUGALLOC_TRUE@ $(am__objects_43) - tcmalloc_minimal_debug_unittest_OBJECTS = \ - $(am_tcmalloc_minimal_debug_unittest_OBJECTS) - @WITH_DEBUGALLOC_TRUE@tcmalloc_minimal_debug_unittest_DEPENDENCIES = \ -@@ -1932,8 +1938,7 @@ - src/google/malloc_hook_c.h \ - src/google/profiler.h \ - src/google/stacktrace.h \ -- src/google/tcmalloc.h \ -- src/windows/google/tcmalloc.h -+ src/google/tcmalloc.h - - # This is for HTML and other documentation you want to install. - # Add your documentation files (in doc/) in addition to these -@@ -2236,10 +2241,9 @@ - SG_TCMALLOC_MINIMAL_INCLUDES = src/gperftools/malloc_hook.h \ - src/gperftools/malloc_hook_c.h \ - src/gperftools/malloc_extension.h \ -- src/gperftools/malloc_extension_c.h \ -- src/gperftools/stacktrace.h -+ src/gperftools/malloc_extension_c.h - --TCMALLOC_MINIMAL_INCLUDES = $(S_TCMALLOC_MINIMAL_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) -+TCMALLOC_MINIMAL_INCLUDES = $(S_TCMALLOC_MINIMAL_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) $(SG_STACKTRACE_INCLUDES) - libtcmalloc_minimal_internal_la_SOURCES = src/common.cc \ - src/internal_logging.cc \ - $(SYSTEM_ALLOC_CC) \ -@@ -2459,11 +2463,12 @@ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ src/base/thread_lister.h \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ src/heap-profile-table.h - --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@SG_TCMALLOC_INCLUDES = $(SG_TCMALLOC_MINIMAL_INCLUDES) \ --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ src/gperftools/heap-profiler.h \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@SG_TCMALLOC_INCLUDES = src/gperftools/heap-profiler.h \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ src/gperftools/heap-checker.h - --@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@TCMALLOC_INCLUDES = $(S_TCMALLOC_INCLUDES) $(SG_TCMALLOC_INCLUDES) -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@TCMALLOC_INCLUDES = $(S_TCMALLOC_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) \ -+@WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(SG_TCMALLOC_INCLUDES) $(SG_STACKTRACE_INCLUDES) -+ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@libtcmalloc_internal_la_SOURCES = $(libtcmalloc_minimal_internal_la_SOURCES) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ $(TCMALLOC_INCLUDES) \ - @WITH_HEAP_PROFILER_OR_CHECKER_TRUE@ src/base/low_level_alloc.cc \ -@@ -2669,10 +2674,10 @@ - @WITH_CPU_PROFILER_TRUE@ $(SPINLOCK_INCLUDES) \ - @WITH_CPU_PROFILER_TRUE@ $(LOGGING_INCLUDES) - --@WITH_CPU_PROFILER_TRUE@SG_CPU_PROFILER_INCLUDES = src/gperftools/profiler.h \ --@WITH_CPU_PROFILER_TRUE@ src/gperftools/stacktrace.h -+@WITH_CPU_PROFILER_TRUE@SG_CPU_PROFILER_INCLUDES = src/gperftools/profiler.h -+@WITH_CPU_PROFILER_TRUE@CPU_PROFILER_INCLUDES = $(S_CPU_PROFILER_INCLUDES) $(SG_CPU_PROFILER_INCLUDES) \ -+@WITH_CPU_PROFILER_TRUE@ $(SG_STACKTRACE_INCLUDES) - --@WITH_CPU_PROFILER_TRUE@CPU_PROFILER_INCLUDES = $(S_CPU_PROFILER_INCLUDES) $(SG_CPU_PROFILER_INCLUDES) - @WITH_CPU_PROFILER_TRUE@libprofiler_la_SOURCES = src/profiler.cc \ - @WITH_CPU_PROFILER_TRUE@ src/profile-handler.cc \ - @WITH_CPU_PROFILER_TRUE@ src/profiledata.cc \ -@@ -4744,7 +4749,7 @@ - -rm -rf .libs _libs - - distclean-libtool: -- -rm -f libtool -+ -rm -f libtool config.lt - install-man1: $(man1_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" -@@ -4756,8 +4761,8 @@ - esac; \ - done; \ - for i in $$list; do \ -- if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ -- else file=$$i; fi; \ -+ if test -f $$i; then file=$$i; \ -+ else file=$(srcdir)/$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ -@@ -4881,7 +4886,7 @@ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ -- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ -+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique - tags: TAGS -@@ -4924,7 +4929,7 @@ - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - - check-TESTS: $(TESTS) -- @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \ -+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - if test -n "$$list"; then \ -@@ -4935,7 +4940,7 @@ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ -- *$$ws$$tst$$ws*) \ -+ *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - echo "XPASS: $$tst"; \ -@@ -4947,7 +4952,7 @@ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ -- *$$ws$$tst$$ws*) \ -+ *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - echo "XFAIL: $$tst"; \ - ;; \ -@@ -4961,23 +4966,36 @@ - echo "SKIP: $$tst"; \ - fi; \ - done; \ -+ if test "$$all" -eq 1; then \ -+ tests="test"; \ -+ All=""; \ -+ else \ -+ tests="tests"; \ -+ All="All "; \ -+ fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ -- banner="All $$all tests passed"; \ -+ banner="$$All$$all $$tests passed"; \ - else \ -- banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ -+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ -+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ -- banner="$$failed of $$all tests failed"; \ -+ banner="$$failed of $$all $$tests failed"; \ - else \ -- banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ -+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ -+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ -- skipped="($$skip tests were not run)"; \ -+ if test "$$skip" -eq 1; then \ -+ skipped="($$skip test was not run)"; \ -+ else \ -+ skipped="($$skip tests were not run)"; \ -+ fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ -@@ -4997,6 +5015,19 @@ - else :; fi - - distdir: $(DISTFILES) -+ @list='$(MANS)'; if test -n "$$list"; then \ -+ list=`for p in $$list; do \ -+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ -+ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ -+ if test -n "$$list" && \ -+ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ -+ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ -+ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ -+ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ -+ echo " typically \`make maintainer-clean' will remove them" >&2; \ -+ exit 1; \ -+ else :; fi; \ -+ else :; fi - $(am__remove_distdir) - test -d $(distdir) || mkdir $(distdir) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -@@ -5027,7 +5058,8 @@ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook -- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ -+ -find "$(distdir)" -type d ! -perm -755 \ -+ -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ -@@ -5187,6 +5219,8 @@ - - html: html-am - -+html-am: -+ - info: info-am - - info-am: -@@ -5197,19 +5231,29 @@ - - install-dvi: install-dvi-am - -+install-dvi-am: -+ - install-exec-am: install-binPROGRAMS install-binSCRIPTS \ - install-exec-local install-libLTLIBRARIES - - install-html: install-html-am - -+install-html-am: -+ - install-info: install-info-am - -+install-info-am: -+ - install-man: install-man1 - - install-pdf: install-pdf-am - -+install-pdf-am: -+ - install-ps: install-ps-am - -+install-ps-am: -+ - installcheck-am: - - maintainer-clean: maintainer-clean-am -diff -urP gperftools-2.0/NEWS /home/spot/gperftools/NEWS ---- gperftools-2.0/NEWS 2012-02-03 18:40:46.000000000 -0500 -+++ /home/spot/gperftools/NEWS 2013-03-01 14:25:39.165366808 -0500 -@@ -12,7 +12,7 @@ - I have both renamed the project (the Google Code site renamed a few - weeks ago), and bumped the major version number up to 2, to reflect - the new community ownership of the project. Almost all the --[http://sparsehash.googlecode.com/svn/tags/gperftools-2.0/ChangeLog changes] -+[http://gperftools.googlecode.com/svn/tags/gperftools-2.0/ChangeLog changes] - are related to the renaming. - - The main functional change from google-perftools 1.10 is that -diff -urP gperftools-2.0/src/base/atomicops-internals-linuxppc.h /home/spot/gperftools/src/base/atomicops-internals-linuxppc.h ---- gperftools-2.0/src/base/atomicops-internals-linuxppc.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/atomicops-internals-linuxppc.h 2013-03-01 14:25:38.722366824 -0500 -@@ -237,7 +237,7 @@ - Atomic64 prev; - __asm__ __volatile__( - "1: ldarx %0,0,%2\n\ -- cmpw 0,%0,%3\n\ -+ cmpd 0,%0,%3\n\ - bne- 2f\n\ - stdcx. %4,0,%2\n\ - bne- 1b\n\ -diff -urP gperftools-2.0/src/base/atomicops-internals-windows.h /home/spot/gperftools/src/base/atomicops-internals-windows.h ---- gperftools-2.0/src/base/atomicops-internals-windows.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/atomicops-internals-windows.h 2013-03-01 14:25:38.731366824 -0500 -@@ -434,16 +434,14 @@ - #endif - } - --inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { --#if 0 // Not implemented -- __asm { -- mov mm0, value; // Use mmx reg for 64-bit atomic moves -- mov ptr, mm0; -- emms; // Empty mmx state to enable FP registers -- } --#else -- NotImplementedFatalError("NoBarrier_Store"); --#endif -+inline void NoBarrier_Store(volatile Atomic64* ptrValue, Atomic64 value) -+{ -+ __asm { -+ movq mm0, value; // Use mmx reg for 64-bit atomic moves -+ mov eax, ptrValue; -+ movq [eax], mm0; -+ emms; // Empty mmx state to enable FP registers -+ } - } - - inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { -@@ -455,19 +453,16 @@ - NoBarrier_Store(ptr, value); - } - --inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { --#if 0 // Not implemented -- Atomic64 value; -- __asm { -- mov mm0, ptr; // Use mmx reg for 64-bit atomic moves -- mov value, mm0; -- emms; // Empty mmx state to enable FP registers -+inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptrValue) -+{ -+ Atomic64 value; -+ __asm { -+ mov eax, ptrValue; -+ movq mm0, [eax]; // Use mmx reg for 64-bit atomic moves -+ movq value, mm0; -+ emms; // Empty mmx state to enable FP registers - } - return value; --#else -- NotImplementedFatalError("NoBarrier_Store"); -- return 0; --#endif - } - - inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { -diff -urP gperftools-2.0/src/base/basictypes.h /home/spot/gperftools/src/base/basictypes.h ---- gperftools-2.0/src/base/basictypes.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/basictypes.h 2013-03-01 14:25:38.724366824 -0500 -@@ -1,10 +1,10 @@ - // Copyright (c) 2005, Google Inc. - // All rights reserved. --// -+// - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are - // met: --// -+// - // * Redistributions of source code must retain the above copyright - // notice, this list of conditions and the following disclaimer. - // * Redistributions in binary form must reproduce the above -@@ -14,7 +14,7 @@ - // * Neither the name of Google Inc. nor the names of its - // contributors may be used to endorse or promote products derived from - // this software without specific prior written permission. --// -+// - // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -@@ -331,8 +331,14 @@ - - #endif // HAVE___ATTRIBUTE__ and __ELF__ or __MACH__ - --#if defined(HAVE___ATTRIBUTE__) && (defined(__i386__) || defined(__x86_64__)) --# define CACHELINE_ALIGNED __attribute__((aligned(64))) -+#if defined(HAVE___ATTRIBUTE__) -+# if (defined(__i386__) || defined(__x86_64__)) -+# define CACHELINE_ALIGNED __attribute__((aligned(64))) -+# elif defined(__arm__) -+# define CACHELINE_ALIGNED __attribute__((aligned(32))) -+# elif (defined(__PPC__) || defined(__PPC64__)) -+# define CACHELINE_ALIGNED __attribute__((aligned(16))) -+# endif - #else - # define CACHELINE_ALIGNED - #endif // defined(HAVE___ATTRIBUTE__) && (__i386__ || __x86_64__) -diff -urP gperftools-2.0/src/base/cycleclock.h /home/spot/gperftools/src/base/cycleclock.h ---- gperftools-2.0/src/base/cycleclock.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/cycleclock.h 2013-03-01 14:25:38.729366824 -0500 -@@ -97,15 +97,24 @@ - uint64 low, high; - __asm__ volatile ("rdtsc" : "=a" (low), "=d" (high)); - return (high << 32) | low; -+#elif defined(__powerpc64__) || defined(__ppc64__) -+ uint64 tb; -+ __asm__ volatile (\ -+ "mfspr %0, 268" -+ : "=r" (tb)); -+ return tb; - #elif defined(__powerpc__) || defined(__ppc__) - // This returns a time-base, which is not always precisely a cycle-count. -- int64 tbl, tbu0, tbu1; -- asm("mftbu %0" : "=r" (tbu0)); -- asm("mftb %0" : "=r" (tbl)); -- asm("mftbu %0" : "=r" (tbu1)); -- tbl &= -static_cast(tbu0 == tbu1); -- // high 32 bits in tbu1; low 32 bits in tbl (tbu0 is garbage) -- return (tbu1 << 32) | tbl; -+ uint32 tbu, tbl, tmp; -+ __asm__ volatile (\ -+ "0:\n" -+ "mftbu %0\n" -+ "mftbl %1\n" -+ "mftbu %2\n" -+ "cmpw %0, %2\n" -+ "bne- 0b" -+ : "=r" (tbu), "=r" (tbl), "=r" (tmp)); -+ return (((uint64) tbu << 32) | tbl); - #elif defined(__sparc__) - int64 tick; - asm(".byte 0x83, 0x41, 0x00, 0x00"); -diff -urP gperftools-2.0/src/base/linux_syscall_support.h /home/spot/gperftools/src/base/linux_syscall_support.h ---- gperftools-2.0/src/base/linux_syscall_support.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/linux_syscall_support.h 2013-03-01 14:25:38.732366824 -0500 -@@ -243,14 +243,13 @@ - long ru_nivcsw; - }; - --struct siginfo; - #if defined(__i386__) || defined(__arm__) || defined(__PPC__) - - /* include/asm-{arm,i386,mips,ppc}/signal.h */ - struct kernel_old_sigaction { - union { - void (*sa_handler_)(int); -- void (*sa_sigaction_)(int, struct siginfo *, void *); -+ void (*sa_sigaction_)(int, siginfo_t *, void *); - }; - unsigned long sa_mask; - unsigned long sa_flags; -@@ -287,13 +286,13 @@ - unsigned long sa_flags; - union { - void (*sa_handler_)(int); -- void (*sa_sigaction_)(int, struct siginfo *, void *); -+ void (*sa_sigaction_)(int, siginfo_t *, void *); - }; - struct kernel_sigset_t sa_mask; - #else - union { - void (*sa_handler_)(int); -- void (*sa_sigaction_)(int, struct siginfo *, void *); -+ void (*sa_sigaction_)(int, siginfo_t *, void *); - }; - unsigned long sa_flags; - void (*sa_restorer)(void); -diff -urP gperftools-2.0/src/base/linuxthreads.cc /home/spot/gperftools/src/base/linuxthreads.cc ---- gperftools-2.0/src/base/linuxthreads.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/linuxthreads.cc 2013-03-01 14:25:38.729366824 -0500 -@@ -45,6 +45,8 @@ - #include - #include - #include -+#include -+#include - - #include "base/linux_syscall_support.h" - #include "base/thread_lister.h" -@@ -240,6 +242,7 @@ - ListAllProcessThreadsCallBack callback; - void *parameter; - va_list ap; -+ sem_t *lock; - }; - - -@@ -254,6 +257,13 @@ - struct kernel_stat marker_sb, proc_sb; - stack_t altstack; - -+ /* Wait for parent thread to set appropriate permissions -+ * to allow ptrace activity -+ */ -+ if (sem_wait(args->lock) < 0) { -+ goto failure; -+ } -+ - /* Create "marker" that we can use to detect threads sharing the same - * address space and the same file handles. By setting the FD_CLOEXEC flag - * we minimize the risk of misidentifying child processes as threads; -@@ -398,7 +408,7 @@ - /* Check if the marker is identical to the one we created */ - if (sys_stat(fname, &tmp_sb) >= 0 && - marker_sb.st_ino == tmp_sb.st_ino) { -- long i, j; -+ long i; - - /* Found one of our threads, make sure it is no duplicate */ - for (i = 0; i < num_threads; i++) { -@@ -434,28 +444,28 @@ - sig_num_threads = num_threads; - goto next_entry; - } -- while (sys_waitpid(pid, (int *)0, __WALL) < 0) { -+ /* Attaching to a process doesn't guarantee it'll stop before -+ * ptrace returns; you have to wait on it. Specifying __WCLONE -+ * means it will only wait for clone children (i.e. threads, -+ * not processes). -+ */ -+ while (sys_waitpid(pid, (int *)0, __WCLONE) < 0) { - if (errno != EINTR) { -- sys_ptrace_detach(pid); -- num_threads--; -- sig_num_threads = num_threads; -- goto next_entry; -+ /* Assumes ECHILD */ -+ if (pid == ppid) { -+ /* The parent is not a clone */ -+ found_parent = true; -+ break; -+ } else { -+ sys_ptrace_detach(pid); -+ num_threads--; -+ sig_num_threads = num_threads; -+ goto next_entry; -+ } - } - } -- -- if (sys_ptrace(PTRACE_PEEKDATA, pid, &i, &j) || i++ != j || -- sys_ptrace(PTRACE_PEEKDATA, pid, &i, &j) || i != j) { -- /* Address spaces are distinct, even though both -- * processes show the "marker". This is probably -- * a forked child process rather than a thread. -- */ -- sys_ptrace_detach(pid); -- num_threads--; -- sig_num_threads = num_threads; -- } else { -- found_parent |= pid == ppid; -- added_entries++; -- } -+ -+ added_entries++; - } - } - } -@@ -536,6 +546,7 @@ - pid_t clone_pid; - int dumpable = 1, sig; - struct kernel_sigset_t sig_blocked, sig_old; -+ sem_t lock; - - va_start(args.ap, callback); - -@@ -565,6 +576,7 @@ - args.altstack_mem = altstack_mem; - args.parameter = parameter; - args.callback = callback; -+ args.lock = &lock; - - /* Before cloning the thread lister, block all asynchronous signals, as we */ - /* are not prepared to handle them. */ -@@ -596,42 +608,63 @@ - #undef SYS_LINUX_SYSCALL_SUPPORT_H - #include "linux_syscall_support.h" - #endif -- -- int clone_errno; -- clone_pid = local_clone((int (*)(void *))ListerThread, &args); -- clone_errno = errno; -- -- sys_sigprocmask(SIG_SETMASK, &sig_old, &sig_old); -- -- if (clone_pid >= 0) { -- int status, rc; -- while ((rc = sys0_waitpid(clone_pid, &status, __WALL)) < 0 && -- ERRNO == EINTR) { -- /* Keep waiting */ -- } -- if (rc < 0) { -- args.err = ERRNO; -- args.result = -1; -- } else if (WIFEXITED(status)) { -- switch (WEXITSTATUS(status)) { -- case 0: break; /* Normal process termination */ -- case 2: args.err = EFAULT; /* Some fault (e.g. SIGSEGV) detected */ -- args.result = -1; -- break; -- case 3: args.err = EPERM; /* Process is already being traced */ -- args.result = -1; -- break; -- default:args.err = ECHILD; /* Child died unexpectedly */ -- args.result = -1; -- break; -+ -+ /* Lock before clone so that parent can set -+ * ptrace permissions (if necessary) prior -+ * to ListerThread actually executing -+ */ -+ if (sem_init(&lock, 0, 0) == 0) { -+ -+ int clone_errno; -+ clone_pid = local_clone((int (*)(void *))ListerThread, &args); -+ clone_errno = errno; -+ -+ sys_sigprocmask(SIG_SETMASK, &sig_old, &sig_old); -+ -+ if (clone_pid >= 0) { -+#ifdef PR_SET_PTRACER -+ /* In newer versions of glibc permission must explicitly -+ * be given to allow for ptrace. -+ */ -+ prctl(PR_SET_PTRACER, clone_pid, 0, 0, 0); -+#endif -+ /* Releasing the lock here allows the -+ * ListerThread to execute and ptrace us. -+ */ -+ sem_post(&lock); -+ int status, rc; -+ while ((rc = sys0_waitpid(clone_pid, &status, __WALL)) < 0 && -+ ERRNO == EINTR) { -+ /* Keep waiting */ -+ } -+ if (rc < 0) { -+ args.err = ERRNO; -+ args.result = -1; -+ } else if (WIFEXITED(status)) { -+ switch (WEXITSTATUS(status)) { -+ case 0: break; /* Normal process termination */ -+ case 2: args.err = EFAULT; /* Some fault (e.g. SIGSEGV) detected */ -+ args.result = -1; -+ break; -+ case 3: args.err = EPERM; /* Process is already being traced */ -+ args.result = -1; -+ break; -+ default:args.err = ECHILD; /* Child died unexpectedly */ -+ args.result = -1; -+ break; -+ } -+ } else if (!WIFEXITED(status)) { -+ args.err = EFAULT; /* Terminated due to an unhandled signal*/ -+ args.result = -1; - } -- } else if (!WIFEXITED(status)) { -- args.err = EFAULT; /* Terminated due to an unhandled signal*/ -+ sem_destroy(&lock); -+ } else { - args.result = -1; -+ args.err = clone_errno; - } - } else { - args.result = -1; -- args.err = clone_errno; -+ args.err = errno; - } - } - -diff -urP gperftools-2.0/src/base/spinlock_internal.cc /home/spot/gperftools/src/base/spinlock_internal.cc ---- gperftools-2.0/src/base/spinlock_internal.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/spinlock_internal.cc 2013-03-01 14:25:38.724366824 -0500 -@@ -80,6 +80,7 @@ - static int SuggestedDelayNS(int loop) { - // Weak pseudo-random number generator to get some spread between threads - // when many are spinning. -+#ifdef BASE_HAS_ATOMIC64 - static base::subtle::Atomic64 rand; - uint64 r = base::subtle::NoBarrier_Load(&rand); - r = 0x5deece66dLL * r + 0xb; // numbers from nrand48() -@@ -96,6 +97,24 @@ - // The futex path multiplies this by 16, since we expect explicit wakeups - // almost always on that path. - return r >> (44 - (loop >> 3)); -+#else -+ static Atomic32 rand; -+ uint32 r = base::subtle::NoBarrier_Load(&rand); -+ r = 0x343fd * r + 0x269ec3; // numbers from MSVC++ -+ base::subtle::NoBarrier_Store(&rand, r); -+ -+ r <<= 1; // 31-bit random number now in top 31-bits. -+ if (loop < 0 || loop > 32) { // limit loop to 0..32 -+ loop = 32; -+ } -+ // loop>>3 cannot exceed 4 because loop cannot exceed 32. -+ // Select top 20..24 bits of lower 31 bits, -+ // giving approximately 0ms to 16ms. -+ // Mean is exponential in loop for first 32 iterations, then 8ms. -+ // The futex path multiplies this by 16, since we expect explicit wakeups -+ // almost always on that path. -+ return r >> (12 - (loop >> 3)); -+#endif - } - - } // namespace internal -diff -urP gperftools-2.0/src/base/sysinfo.cc /home/spot/gperftools/src/base/sysinfo.cc ---- gperftools-2.0/src/base/sysinfo.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/base/sysinfo.cc 2013-03-01 14:25:38.732366824 -0500 -@@ -32,6 +32,7 @@ - # define PLATFORM_WINDOWS 1 - #endif - -+#include // for isspace() - #include // for getenv() - #include // for snprintf(), sscanf() - #include // for memmove(), memchr(), etc. -@@ -350,6 +351,22 @@ - if (newline != NULL) - *newline = '\0'; - -+#if defined(__powerpc__) || defined(__ppc__) -+ // PowerPC cpus report the frequency in "clock" line -+ if (strncasecmp(line, "clock", sizeof("clock")-1) == 0) { -+ const char* freqstr = strchr(line, ':'); -+ if (freqstr) { -+ // PowerPC frequencies are only reported as MHz (check 'show_cpuinfo' -+ // function at arch/powerpc/kernel/setup-common.c) -+ char *endp = strstr(line, "MHz"); -+ if (endp) { -+ *endp = 0; -+ cpuinfo_cycles_per_second = strtod(freqstr+1, &err) * 1000000.0; -+ if (freqstr[1] != '\0' && *err == '\0' && cpuinfo_cycles_per_second > 0) -+ saw_mhz = true; -+ } -+ } -+#else - // When parsing the "cpu MHz" and "bogomips" (fallback) entries, we only - // accept postive values. Some environments (virtual machines) report zero, - // which would cause infinite looping in WallTime_Init. -@@ -367,6 +384,7 @@ - if (freqstr[1] != '\0' && *err == '\0' && bogo_clock > 0) - saw_bogo = true; - } -+#endif - } else if (strncasecmp(line, "processor", sizeof("processor")-1) == 0) { - num_cpus++; // count up every time we see an "processor :" entry - } -@@ -558,6 +576,145 @@ - } - #endif - -+// Finds |c| in |text|, and assign '\0' at the found position. -+// The original character at the modified position should be |c|. -+// A pointer to the modified position is stored in |endptr|. -+// |endptr| should not be NULL. -+static bool ExtractUntilChar(char *text, int c, char **endptr) { -+ CHECK_NE(text, NULL); -+ CHECK_NE(endptr, NULL); -+ char *found; -+ found = strchr(text, c); -+ if (found == NULL) { -+ *endptr = NULL; -+ return false; -+ } -+ -+ *endptr = found; -+ *found = '\0'; -+ return true; -+} -+ -+// Increments |*text_pointer| while it points a whitespace character. -+// It is to follow sscanf's whilespace handling. -+static void SkipWhileWhitespace(char **text_pointer, int c) { -+ if (isspace(c)) { -+ while (isspace(**text_pointer) && isspace(*((*text_pointer) + 1))) { -+ ++(*text_pointer); -+ } -+ } -+} -+ -+template -+static T StringToInteger(char *text, char **endptr, int base) { -+ assert(false); -+ return T(); -+} -+ -+template<> -+int StringToInteger(char *text, char **endptr, int base) { -+ return strtol(text, endptr, base); -+} -+ -+template<> -+int64 StringToInteger(char *text, char **endptr, int base) { -+ return strtoll(text, endptr, base); -+} -+ -+template<> -+uint64 StringToInteger(char *text, char **endptr, int base) { -+ return strtoull(text, endptr, base); -+} -+ -+template -+static T StringToIntegerUntilChar( -+ char *text, int base, int c, char **endptr_result) { -+ CHECK_NE(endptr_result, NULL); -+ *endptr_result = NULL; -+ -+ char *endptr_extract; -+ if (!ExtractUntilChar(text, c, &endptr_extract)) -+ return 0; -+ -+ T result; -+ char *endptr_strto; -+ result = StringToInteger(text, &endptr_strto, base); -+ *endptr_extract = c; -+ -+ if (endptr_extract != endptr_strto) -+ return 0; -+ -+ *endptr_result = endptr_extract; -+ SkipWhileWhitespace(endptr_result, c); -+ -+ return result; -+} -+ -+static char *CopyStringUntilChar( -+ char *text, unsigned out_len, int c, char *out) { -+ char *endptr; -+ if (!ExtractUntilChar(text, c, &endptr)) -+ return NULL; -+ -+ strncpy(out, text, out_len); -+ out[out_len-1] = '\0'; -+ *endptr = c; -+ -+ SkipWhileWhitespace(&endptr, c); -+ return endptr; -+} -+ -+template -+static bool StringToIntegerUntilCharWithCheck( -+ T *outptr, char *text, int base, int c, char **endptr) { -+ *outptr = StringToIntegerUntilChar(*endptr, base, c, endptr); -+ if (*endptr == NULL || **endptr == '\0') return false; -+ ++(*endptr); -+ return true; -+} -+ -+static bool ParseProcMapsLine(char *text, uint64 *start, uint64 *end, -+ char *flags, uint64 *offset, -+ int *major, int *minor, int64 *inode, -+ unsigned *filename_offset) { -+#if defined(__linux__) -+ /* -+ * It's similar to: -+ * sscanf(text, "%"SCNx64"-%"SCNx64" %4s %"SCNx64" %x:%x %"SCNd64" %n", -+ * start, end, flags, offset, major, minor, inode, filename_offset) -+ */ -+ char *endptr = text; -+ if (endptr == NULL || *endptr == '\0') return false; -+ -+ if (!StringToIntegerUntilCharWithCheck(start, endptr, 16, '-', &endptr)) -+ return false; -+ -+ if (!StringToIntegerUntilCharWithCheck(end, endptr, 16, ' ', &endptr)) -+ return false; -+ -+ endptr = CopyStringUntilChar(endptr, 5, ' ', flags); -+ if (endptr == NULL || *endptr == '\0') return false; -+ ++endptr; -+ -+ if (!StringToIntegerUntilCharWithCheck(offset, endptr, 16, ' ', &endptr)) -+ return false; -+ -+ if (!StringToIntegerUntilCharWithCheck(major, endptr, 16, ':', &endptr)) -+ return false; -+ -+ if (!StringToIntegerUntilCharWithCheck(minor, endptr, 16, ' ', &endptr)) -+ return false; -+ -+ if (!StringToIntegerUntilCharWithCheck(inode, endptr, 10, ' ', &endptr)) -+ return false; -+ -+ *filename_offset = (endptr - text); -+ return true; -+#else -+ return false; -+#endif -+} -+ - ProcMapsIterator::ProcMapsIterator(pid_t pid) { - Init(pid, NULL, false); - } -@@ -712,13 +869,14 @@ - unsigned filename_offset = 0; - #if defined(__linux__) - // for now, assume all linuxes have the same format -- if (sscanf(stext_, "%"SCNx64"-%"SCNx64" %4s %"SCNx64" %x:%x %"SCNd64" %n", -- start ? start : &tmpstart, -- end ? end : &tmpend, -- flags_, -- offset ? offset : &tmpoffset, -- &major, &minor, -- inode ? inode : &tmpinode, &filename_offset) != 7) continue; -+ if (!ParseProcMapsLine( -+ stext_, -+ start ? start : &tmpstart, -+ end ? end : &tmpend, -+ flags_, -+ offset ? offset : &tmpoffset, -+ &major, &minor, -+ inode ? inode : &tmpinode, &filename_offset)) continue; - #elif defined(__CYGWIN__) || defined(__CYGWIN32__) - // cygwin is like linux, except the third field is the "entry point" - // rather than the offset (see format_process_maps at -@@ -749,7 +907,7 @@ - // start end resident privateresident obj(?) prot refcnt shadowcnt - // flags copy_on_write needs_copy type filename: - // 0x8048000 0x804a000 2 0 0xc104ce70 r-x 1 0 0x0 COW NC vnode /bin/cat -- if (sscanf(stext_, "0x%"SCNx64" 0x%"SCNx64" %*d %*d %*p %3s %*d %*d 0x%*x %*s %*s %*s %n", -+ if (sscanf(stext_, "0x%" SCNx64 " 0x%" SCNx64 " %*d %*d %*p %3s %*d %*d 0x%*x %*s %*s %*s %n", - start ? start : &tmpstart, - end ? end : &tmpend, - flags_, -@@ -786,7 +944,7 @@ - uint64 tmp_anon_mapping; - uint64 tmp_anon_pages; - -- sscanf(backing_ptr+1, "F %"SCNx64" %"SCNd64") (A %"SCNx64" %"SCNd64")", -+ sscanf(backing_ptr+1, "F %" SCNx64 " %" SCNd64 ") (A %" SCNx64 " %" SCNd64 ")", - file_mapping ? file_mapping : &tmp_file_mapping, - file_pages ? file_pages : &tmp_file_pages, - anon_mapping ? anon_mapping : &tmp_anon_mapping, -@@ -926,7 +1084,7 @@ - ? '-' : 'p'; - - const int rc = snprintf(buffer, bufsize, -- "%08"PRIx64"-%08"PRIx64" %c%c%c%c %08"PRIx64" %02x:%02x %-11"PRId64" %s\n", -+ "%08" PRIx64 "-%08" PRIx64 " %c%c%c%c %08" PRIx64 " %02x:%02x %-11" PRId64 " %s\n", - start, end, r,w,x,p, offset, - static_cast(dev/256), static_cast(dev%256), - inode, filename); -diff -urP gperftools-2.0/src/common.cc /home/spot/gperftools/src/common.cc ---- gperftools-2.0/src/common.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/common.cc 2013-03-01 14:25:38.074366847 -0500 -@@ -60,16 +60,16 @@ - } else if (size >= 128) { - // Space wasted due to alignment is at most 1/8, i.e., 12.5%. - alignment = (1 << LgFloor(size)) / 8; -- } else if (size >= 16) { -+ } else if (size >= kMinAlign) { - // We need an alignment of at least 16 bytes to satisfy - // requirements for some SSE types. -- alignment = 16; -+ alignment = kMinAlign; - } - // Maximum alignment allowed is page size alignment. - if (alignment > kPageSize) { - alignment = kPageSize; - } -- CHECK_CONDITION(size < 16 || alignment >= 16); -+ CHECK_CONDITION(size < kMinAlign || alignment >= kMinAlign); - CHECK_CONDITION((alignment & (alignment - 1)) == 0); - return alignment; - } -@@ -110,7 +110,7 @@ - // Compute the size classes we want to use - int sc = 1; // Next size class to assign - int alignment = kAlignment; -- CHECK_CONDITION(kAlignment <= 16); -+ CHECK_CONDITION(kAlignment <= kMinAlign); - for (size_t size = kAlignment; size <= kMaxSize; size += alignment) { - alignment = AlignmentForSize(size); - CHECK_CONDITION((size % alignment) == 0); -diff -urP gperftools-2.0/src/common.h /home/spot/gperftools/src/common.h ---- gperftools-2.0/src/common.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/common.h 2013-03-01 14:25:38.737366824 -0500 -@@ -1,10 +1,10 @@ - // Copyright (c) 2008, Google Inc. - // All rights reserved. --// -+// - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are - // met: --// -+// - // * Redistributions of source code must retain the above copyright - // notice, this list of conditions and the following disclaimer. - // * Redistributions in binary form must reproduce the above -@@ -14,7 +14,7 @@ - // * Neither the name of Google Inc. nor the names of its - // contributors may be used to endorse or promote products derived from - // this software without specific prior written permission. --// -+// - // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -@@ -41,6 +41,15 @@ - #include // for uintptr_t, uint64_t - #endif - #include "internal_logging.h" // for ASSERT, etc -+#include "base/basictypes.h" // for LIKELY, etc -+ -+#ifdef HAVE_BUILTIN_EXPECT -+#define LIKELY(x) __builtin_expect(!!(x), 1) -+#define UNLIKELY(x) __builtin_expect(!!(x), 0) -+#else -+#define LIKELY(x) (x) -+#define UNLIKELY(x) (x) -+#endif - - // Type that can hold a page number - typedef uintptr_t PageID; -@@ -64,9 +73,23 @@ - #if defined(TCMALLOC_LARGE_PAGES) - static const size_t kPageShift = 15; - static const size_t kNumClasses = 78; -+static const size_t kMinAlign = 16; -+#elif defined(TCMALLOC_LARGE_PAGES64K) -+static const size_t kPageShift = 16; -+static const size_t kNumClasses = 82; -+static const size_t kMinAlign = 16; -+#elif defined(TCMALLOC_ALIGN_8BYTES) -+static const size_t kPageShift = 13; -+static const size_t kNumClasses = 93; -+// Unless we force to use 8 bytes alignment we use an alignment of -+// at least 16 bytes to statisfy requirements for some SSE types. -+// Keep in mind when using the 16 bytes alignment you can have a space -+// waste due alignment of 25%. (eg malloc of 24 bytes will get 32 bytes) -+static const size_t kMinAlign = 8; - #else - static const size_t kPageShift = 13; - static const size_t kNumClasses = 86; -+static const size_t kMinAlign = 16; - #endif - static const size_t kMaxThreadCacheSize = 4 << 20; - -@@ -169,13 +192,15 @@ - unsigned char class_array_[kClassArraySize]; - - // Compute index of the class_array[] entry for a given size -- static inline int ClassIndex(int s) { -+ static inline size_t ClassIndex(int s) { -+ // Use unsigned arithmetic to avoid unnecessary sign extensions. - ASSERT(0 <= s); - ASSERT(s <= kMaxSize); -- const bool big = (s > kMaxSmallSize); -- const int add_amount = big ? (127 + (120<<7)) : 7; -- const int shift_amount = big ? 7 : 3; -- return (s + add_amount) >> shift_amount; -+ if (LIKELY(s <= kMaxSmallSize)) { -+ return (static_cast(s) + 7) >> 3; -+ } else { -+ return (static_cast(s) + 127 + (120 << 7)) >> 7; -+ } - } - - int NumMoveSize(size_t size); -diff -urP gperftools-2.0/src/config.h.in /home/spot/gperftools/src/config.h.in ---- gperftools-2.0/src/config.h.in 2012-02-03 14:47:15.000000000 -0500 -+++ /home/spot/gperftools/src/config.h.in 2013-03-01 14:25:38.205366843 -0500 -@@ -5,6 +5,9 @@ - #define GPERFTOOLS_CONFIG_H_ - - -+/* Define to 1 if compiler supports __builtin_expect */ -+#undef HAVE_BUILTIN_EXPECT -+ - /* Define to 1 if compiler supports __builtin_stack_pointer */ - #undef HAVE_BUILTIN_STACK_POINTER - -diff -urP gperftools-2.0/src/debugallocation.cc /home/spot/gperftools/src/debugallocation.cc ---- gperftools-2.0/src/debugallocation.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/debugallocation.cc 2013-03-01 14:25:37.966366851 -0500 -@@ -488,7 +488,7 @@ - // the address space could take more. - static size_t max_size_t = ~0; - if (size > max_size_t - sizeof(MallocBlock)) { -- RAW_LOG(ERROR, "Massive size passed to malloc: %"PRIuS"", size); -+ RAW_LOG(ERROR, "Massive size passed to malloc: %" PRIuS "", size); - return NULL; - } - MallocBlock* b = NULL; -@@ -958,7 +958,7 @@ - do { \ - if (FLAGS_malloctrace) { \ - SpinLockHolder l(&malloc_trace_lock); \ -- TracePrintf(TraceFd(), "%s\t%"PRIuS"\t%p\t%"GPRIuPTHREAD, \ -+ TracePrintf(TraceFd(), "%s\t%" PRIuS "\t%p\t%" GPRIuPTHREAD, \ - name, size, addr, PRINTABLE_PTHREAD(pthread_self())); \ - TraceStack(); \ - TracePrintf(TraceFd(), "\n"); \ -@@ -1215,7 +1215,7 @@ - void* ptr = debug_cpp_alloc(size, MallocBlock::kNewType, false); - MallocHook::InvokeNewHook(ptr, size); - if (ptr == NULL) { -- RAW_LOG(FATAL, "Unable to allocate %"PRIuS" bytes: new failed.", size); -+ RAW_LOG(FATAL, "Unable to allocate %" PRIuS " bytes: new failed.", size); - } - return ptr; - } -@@ -1242,7 +1242,7 @@ - void* ptr = debug_cpp_alloc(size, MallocBlock::kArrayNewType, false); - MallocHook::InvokeNewHook(ptr, size); - if (ptr == NULL) { -- RAW_LOG(FATAL, "Unable to allocate %"PRIuS" bytes: new[] failed.", size); -+ RAW_LOG(FATAL, "Unable to allocate %" PRIuS " bytes: new[] failed.", size); - } - return ptr; - } -diff -urP gperftools-2.0/src/getpc.h /home/spot/gperftools/src/getpc.h ---- gperftools-2.0/src/getpc.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/getpc.h 2013-03-01 14:25:37.973366851 -0500 -@@ -94,7 +94,7 @@ - int pc_offset; - // The actual instruction bytes. Feel free to make it larger if you - // need a longer sequence. -- char ins[16]; -+ unsigned char ins[16]; - // How many bytes to match from ins array? - int ins_size; - // The offset from the stack pointer (e)sp where to look for the -diff -urP gperftools-2.0/src/gperftools/malloc_extension.h /home/spot/gperftools/src/gperftools/malloc_extension.h ---- gperftools-2.0/src/gperftools/malloc_extension.h 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/gperftools/malloc_extension.h 2013-03-01 14:25:38.126366846 -0500 -@@ -169,6 +169,26 @@ - // Number of bytes used across all thread caches. - // This property is not writable. - // -+ // "tcmalloc.central_cache_free_bytes" -+ // Number of free bytes in the central cache that have been -+ // assigned to size classes. They always count towards virtual -+ // memory usage, and unless the underlying memory is swapped out -+ // by the OS, they also count towards physical memory usage. -+ // This property is not writable. -+ // -+ // "tcmalloc.transfer_cache_free_bytes" -+ // Number of free bytes that are waiting to be transfered between -+ // the central cache and a thread cache. They always count -+ // towards virtual memory usage, and unless the underlying memory -+ // is swapped out by the OS, they also count towards physical -+ // memory usage. This property is not writable. -+ // -+ // "tcmalloc.thread_cache_free_bytes" -+ // Number of free bytes in thread caches. They always count -+ // towards virtual memory usage, and unless the underlying memory -+ // is swapped out by the OS, they also count towards physical -+ // memory usage. This property is not writable. -+ // - // "tcmalloc.pageheap_free_bytes" - // Number of bytes in free, mapped pages in page heap. These - // bytes can be used to fulfill allocation requests. They -@@ -380,7 +400,7 @@ - INUSE, // Application is using this range - FREE, // Range is currently free - UNMAPPED, // Backing physical memory has been returned to the OS -- UNKNOWN, -+ UNKNOWN - // More enum values may be added in the future - }; - -diff -urP gperftools-2.0/src/gperftools/tcmalloc.h.in /home/spot/gperftools/src/gperftools/tcmalloc.h.in ---- gperftools-2.0/src/gperftools/tcmalloc.h.in 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/gperftools/tcmalloc.h.in 2013-03-01 14:25:38.126366846 -0500 -@@ -53,7 +53,17 @@ - #define TC_VERSION_PATCH "@TC_VERSION_PATCH@" - #define TC_VERSION_STRING "gperftools @TC_VERSION_MAJOR@.@TC_VERSION_MINOR@@TC_VERSION_PATCH@" - --#include // for struct mallinfo, if it's defined -+// For struct mallinfo, if it's defined. -+#ifdef HAVE_STRUCT_MALLINFO -+// Malloc can be in several places on older versions of OS X. -+# if defined(HAVE_MALLOC_H) -+# include -+# elif defined(HAVE_SYS_MALLOC_H) -+# include -+# elif defined(HAVE_MALLOC_MALLOC_H) -+# include -+# endif -+#endif - - // Annoying stuff for windows -- makes sure clients can import these functions - #ifndef PERFTOOLS_DLL_DECL -diff -urP gperftools-2.0/src/heap-checker.cc /home/spot/gperftools/src/heap-checker.cc ---- gperftools-2.0/src/heap-checker.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/heap-checker.cc 2013-03-01 14:25:38.722366824 -0500 -@@ -567,7 +567,7 @@ - if (ptr != NULL) { - const int counter = get_thread_disable_counter(); - const bool ignore = (counter > 0); -- RAW_VLOG(16, "Recording Alloc: %p of %"PRIuS "; %d", ptr, size, -+ RAW_VLOG(16, "Recording Alloc: %p of %" PRIuS "; %d", ptr, size, - int(counter)); - - // Fetch the caller's stack trace before acquiring heap_checker_lock. -@@ -587,7 +587,7 @@ - } - } - } -- RAW_VLOG(17, "Alloc Recorded: %p of %"PRIuS"", ptr, size); -+ RAW_VLOG(17, "Alloc Recorded: %p of %" PRIuS "", ptr, size); - } - } - -@@ -645,12 +645,12 @@ - if (MemoryRegionMap::FindAndMarkStackRegion(top, ®ion)) { - // Make the proper portion of the stack live: - if (stack_direction == GROWS_TOWARDS_LOW_ADDRESSES) { -- RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", -+ RAW_VLOG(11, "Live stack at %p of %" PRIuPTR " bytes", - top_ptr, region.end_addr - top); - live_objects->push_back(AllocObject(top_ptr, region.end_addr - top, - THREAD_DATA)); - } else { // GROWS_TOWARDS_HIGH_ADDRESSES -- RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", -+ RAW_VLOG(11, "Live stack at %p of %" PRIuPTR " bytes", - AsPtr(region.start_addr), - top - region.start_addr); - live_objects->push_back(AllocObject(AsPtr(region.start_addr), -@@ -692,12 +692,12 @@ - } - // Make the proper portion of the stack live: - if (stack_direction == GROWS_TOWARDS_LOW_ADDRESSES) { -- RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", -+ RAW_VLOG(11, "Live stack at %p of %" PRIuPTR " bytes", - top_ptr, stack_end - top); - live_objects->push_back( - AllocObject(top_ptr, stack_end - top, THREAD_DATA)); - } else { // GROWS_TOWARDS_HIGH_ADDRESSES -- RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", -+ RAW_VLOG(11, "Live stack at %p of %" PRIuPTR " bytes", - AsPtr(stack_start), top - stack_start); - live_objects->push_back( - AllocObject(AsPtr(stack_start), top - stack_start, THREAD_DATA)); -@@ -770,14 +770,14 @@ - // and the rest of the region where the stack lives can well - // contain outdated stack variables which are not live anymore, - // hence should not be treated as such. -- RAW_VLOG(11, "Not %s-disabling %"PRIuS" bytes at %p" -+ RAW_VLOG(11, "Not %s-disabling %" PRIuS " bytes at %p" - ": have stack inside: %p", - (stack_disable ? "stack" : "range"), - info.object_size, ptr, AsPtr(*iter)); - return; - } - } -- RAW_VLOG(11, "%s-disabling %"PRIuS" bytes at %p", -+ RAW_VLOG(11, "%s-disabling %" PRIuS " bytes at %p", - (stack_disable ? "Stack" : "Range"), info.object_size, ptr); - live_objects->push_back(AllocObject(ptr, info.object_size, - MUST_BE_ON_HEAP)); -@@ -1061,7 +1061,7 @@ - if (thread_registers.size()) { - // Make thread registers be live heap data sources. - // we rely here on the fact that vector is in one memory chunk: -- RAW_VLOG(11, "Live registers at %p of %"PRIuS" bytes", -+ RAW_VLOG(11, "Live registers at %p of %" PRIuS " bytes", - &thread_registers[0], thread_registers.size() * sizeof(void*)); - live_objects->push_back(AllocObject(&thread_registers[0], - thread_registers.size() * sizeof(void*), -@@ -1098,7 +1098,7 @@ - for (IgnoredObjectsMap::const_iterator object = ignored_objects->begin(); - object != ignored_objects->end(); ++object) { - const void* ptr = AsPtr(object->first); -- RAW_VLOG(11, "Ignored live object at %p of %"PRIuS" bytes", -+ RAW_VLOG(11, "Ignored live object at %p of %" PRIuS " bytes", - ptr, object->second); - live_objects-> - push_back(AllocObject(ptr, object->second, MUST_BE_ON_HEAP)); -@@ -1107,7 +1107,7 @@ - size_t object_size; - if (!(heap_profile->FindAlloc(ptr, &object_size) && - object->second == object_size)) { -- RAW_LOG(FATAL, "Object at %p of %"PRIuS" bytes from an" -+ RAW_LOG(FATAL, "Object at %p of %" PRIuS " bytes from an" - " IgnoreObject() has disappeared", ptr, object->second); - } - } -@@ -1214,7 +1214,7 @@ - if (VLOG_IS_ON(11)) { - for (LiveObjectsStack::const_iterator i = l->second.begin(); - i != l->second.end(); ++i) { -- RAW_VLOG(11, "Library live region at %p of %"PRIuPTR" bytes", -+ RAW_VLOG(11, "Library live region at %p of %" PRIuPTR " bytes", - i->ptr, i->size); - } - } -@@ -1335,7 +1335,7 @@ - IgnoreNonThreadLiveObjectsLocked(); - } - if (live_objects_total) { -- RAW_VLOG(10, "Ignoring %"PRId64" reachable objects of %"PRId64" bytes", -+ RAW_VLOG(10, "Ignoring %" PRId64 " reachable objects of %" PRId64 " bytes", - live_objects_total, live_bytes_total); - } - // Free these: we made them here and heap_profile never saw them -@@ -1394,7 +1394,7 @@ - live_object_count += 1; - live_byte_count += size; - } -- RAW_VLOG(13, "Looking for heap pointers in %p of %"PRIuS" bytes", -+ RAW_VLOG(13, "Looking for heap pointers in %p of %" PRIuS " bytes", - object, size); - const char* const whole_object = object; - size_t const whole_size = size; -@@ -1465,8 +1465,8 @@ - // a heap object which is in fact leaked. - // I.e. in very rare and probably not repeatable/lasting cases - // we might miss some real heap memory leaks. -- RAW_VLOG(14, "Found pointer to %p of %"PRIuS" bytes at %p " -- "inside %p of size %"PRIuS"", -+ RAW_VLOG(14, "Found pointer to %p of %" PRIuS " bytes at %p " -+ "inside %p of size %" PRIuS "", - ptr, object_size, object, whole_object, whole_size); - if (VLOG_IS_ON(15)) { - // log call stacks to help debug how come something is not a leak -@@ -1491,7 +1491,7 @@ - live_objects_total += live_object_count; - live_bytes_total += live_byte_count; - if (live_object_count) { -- RAW_VLOG(10, "Removed %"PRId64" live heap objects of %"PRId64" bytes: %s%s", -+ RAW_VLOG(10, "Removed %" PRId64 " live heap objects of %" PRId64 " bytes: %s%s", - live_object_count, live_byte_count, name, name2); - } - } -@@ -1513,7 +1513,7 @@ - if (!HaveOnHeapLocked(&ptr, &object_size)) { - RAW_LOG(ERROR, "No live heap object at %p to ignore", ptr); - } else { -- RAW_VLOG(10, "Going to ignore live object at %p of %"PRIuS" bytes", -+ RAW_VLOG(10, "Going to ignore live object at %p of %" PRIuS " bytes", - ptr, object_size); - if (ignored_objects == NULL) { - ignored_objects = new(Allocator::Allocate(sizeof(IgnoredObjectsMap))) -@@ -1540,7 +1540,7 @@ - ignored_objects->erase(object); - found = true; - RAW_VLOG(10, "Now not going to ignore live object " -- "at %p of %"PRIuS" bytes", ptr, object_size); -+ "at %p of %" PRIuS " bytes", ptr, object_size); - } - } - if (!found) RAW_LOG(FATAL, "Object at %p has not been ignored", ptr); -@@ -1588,8 +1588,8 @@ - const HeapProfileTable::Stats& t = heap_profile->total(); - const size_t start_inuse_bytes = t.alloc_size - t.free_size; - const size_t start_inuse_allocs = t.allocs - t.frees; -- RAW_VLOG(10, "Start check \"%s\" profile: %"PRIuS" bytes " -- "in %"PRIuS" objects", -+ RAW_VLOG(10, "Start check \"%s\" profile: %" PRIuS " bytes " -+ "in %" PRIuS " objects", - name_, start_inuse_bytes, start_inuse_allocs); - } else { - RAW_LOG(WARNING, "Heap checker is not active, " -@@ -1813,7 +1813,7 @@ - RAW_VLOG(heap_checker_info_level, - "No leaks found for check \"%s\" " - "(but no 100%% guarantee that there aren't any): " -- "found %"PRId64" reachable heap objects of %"PRId64" bytes", -+ "found %" PRId64 " reachable heap objects of %" PRId64 " bytes", - name_, - int64(stats.allocs - stats.frees), - int64(stats.alloc_size - stats.free_size)); -@@ -2021,9 +2021,9 @@ - // at the right time, on FreeBSD we always check after, even in the - // less strict modes. This just means FreeBSD is always a bit - // stricter in its checking than other OSes. --#ifdef __FreeBSD__ -+ // This now appears to be the case in other OSes as well; -+ // so always check afterwards. - FLAGS_heap_check_after_destructors = true; --#endif - - { SpinLockHolder l(&heap_checker_lock); - RAW_DCHECK(heap_checker_pid == getpid(), ""); -@@ -2353,7 +2353,7 @@ - const uintptr_t addr = AsInt(*ptr); - if (heap_profile->FindInsideAlloc( - *ptr, max_heap_object_size, ptr, object_size)) { -- RAW_VLOG(16, "Got pointer into %p at +%"PRIuPTR" offset", -+ RAW_VLOG(16, "Got pointer into %p at +%" PRIuPTR " offset", - *ptr, addr - AsInt(*ptr)); - return true; - } -diff -urP gperftools-2.0/src/heap-profiler.cc /home/spot/gperftools/src/heap-profiler.cc ---- gperftools-2.0/src/heap-profiler.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/heap-profiler.cc 2013-03-01 14:25:38.470366833 -0500 -@@ -107,6 +107,10 @@ - "If non-zero, dump heap profiling information whenever " - "the high-water memory usage mark increases by the specified " - "number of bytes."); -+DEFINE_int64(heap_profile_time_interval, -+ EnvToInt64("HEAP_PROFILE_TIME_INTERVAL", 0), -+ "If non-zero, dump heap profiling information once every " -+ "specified number of seconds since the last dump."); - DEFINE_bool(mmap_log, - EnvToBool("HEAP_PROFILE_MMAP_LOG", false), - "Should mmap/munmap calls be logged?"); -@@ -168,6 +172,7 @@ - static int64 last_dump_alloc = 0; // alloc_size when did we last dump - static int64 last_dump_free = 0; // free_size when did we last dump - static int64 high_water_mark = 0; // In-use-bytes at last high-water dump -+static int64 last_dump_time = 0; // The time of the last dump - - static HeapProfileTable* heap_profile = NULL; // the heap profile table - -@@ -264,26 +269,34 @@ - const int64 inuse_bytes = total.alloc_size - total.free_size; - bool need_to_dump = false; - char buf[128]; -+ int64 current_time = time(NULL); - if (FLAGS_heap_profile_allocation_interval > 0 && - total.alloc_size >= - last_dump_alloc + FLAGS_heap_profile_allocation_interval) { -- snprintf(buf, sizeof(buf), ("%"PRId64" MB allocated cumulatively, " -- "%"PRId64" MB currently in use"), -+ snprintf(buf, sizeof(buf), ("%" PRId64 " MB allocated cumulatively, " -+ "%" PRId64 " MB currently in use"), - total.alloc_size >> 20, inuse_bytes >> 20); - need_to_dump = true; - } else if (FLAGS_heap_profile_deallocation_interval > 0 && - total.free_size >= - last_dump_free + FLAGS_heap_profile_deallocation_interval) { -- snprintf(buf, sizeof(buf), ("%"PRId64" MB freed cumulatively, " -- "%"PRId64" MB currently in use"), -+ snprintf(buf, sizeof(buf), ("%" PRId64 " MB freed cumulatively, " -+ "%" PRId64 " MB currently in use"), - total.free_size >> 20, inuse_bytes >> 20); - need_to_dump = true; - } else if (FLAGS_heap_profile_inuse_interval > 0 && - inuse_bytes > - high_water_mark + FLAGS_heap_profile_inuse_interval) { -- snprintf(buf, sizeof(buf), "%"PRId64" MB currently in use", -+ snprintf(buf, sizeof(buf), "%" PRId64 " MB currently in use", - inuse_bytes >> 20); - need_to_dump = true; -+ } else if (FLAGS_heap_profile_time_interval > 0 && -+ current_time - last_dump_time >= -+ FLAGS_heap_profile_time_interval) { -+ snprintf(buf, sizeof(buf), "%d sec since the last dump", -+ current_time - last_dump_time); -+ need_to_dump = true; -+ last_dump_time = current_time; - } - if (need_to_dump) { - DumpProfileLocked(buf); -@@ -346,8 +359,8 @@ - // in pretty-printing of NULL as "nil". - // TODO(maxim): instead should use a safe snprintf reimplementation - RAW_LOG(INFO, -- "mmap(start=0x%"PRIxPTR", len=%"PRIuS", prot=0x%x, flags=0x%x, " -- "fd=%d, offset=0x%x) = 0x%"PRIxPTR"", -+ "mmap(start=0x%" PRIxPTR ", len=%" PRIuS ", prot=0x%x, flags=0x%x, " -+ "fd=%d, offset=0x%x) = 0x%" PRIxPTR "", - (uintptr_t) start, size, prot, flags, fd, (unsigned int) offset, - (uintptr_t) result); - #ifdef TODO_REENABLE_STACK_TRACING -@@ -364,9 +377,9 @@ - // in pretty-printing of NULL as "nil". - // TODO(maxim): instead should use a safe snprintf reimplementation - RAW_LOG(INFO, -- "mremap(old_addr=0x%"PRIxPTR", old_size=%"PRIuS", " -- "new_size=%"PRIuS", flags=0x%x, new_addr=0x%"PRIxPTR") = " -- "0x%"PRIxPTR"", -+ "mremap(old_addr=0x%" PRIxPTR ", old_size=%" PRIuS ", " -+ "new_size=%" PRIuS ", flags=0x%x, new_addr=0x%" PRIxPTR ") = " -+ "0x%" PRIxPTR "", - (uintptr_t) old_addr, old_size, new_size, flags, - (uintptr_t) new_addr, (uintptr_t) result); - #ifdef TODO_REENABLE_STACK_TRACING -@@ -380,7 +393,7 @@ - // We use PRIxS not just '%p' to avoid deadlocks - // in pretty-printing of NULL as "nil". - // TODO(maxim): instead should use a safe snprintf reimplementation -- RAW_LOG(INFO, "munmap(start=0x%"PRIxPTR", len=%"PRIuS")", -+ RAW_LOG(INFO, "munmap(start=0x%" PRIxPTR ", len=%" PRIuS ")", - (uintptr_t) ptr, size); - #ifdef TODO_REENABLE_STACK_TRACING - DumpStackTrace(1, RawInfoStackDumper, NULL); -@@ -390,7 +403,7 @@ - - static void SbrkHook(const void* result, ptrdiff_t increment) { - if (FLAGS_mmap_log) { // log it -- RAW_LOG(INFO, "sbrk(inc=%"PRIdS") = 0x%"PRIxPTR"", -+ RAW_LOG(INFO, "sbrk(inc=%" PRIdS ") = 0x%" PRIxPTR "", - increment, (uintptr_t) result); - #ifdef TODO_REENABLE_STACK_TRACING - DumpStackTrace(1, RawInfoStackDumper, NULL); -@@ -447,6 +460,7 @@ - last_dump_alloc = 0; - last_dump_free = 0; - high_water_mark = 0; -+ last_dump_time = 0; - - // We do not reset dump_count so if the user does a sequence of - // HeapProfilerStart/HeapProfileStop, we will get a continuous -diff -urP gperftools-2.0/src/heap-profile-table.cc /home/spot/gperftools/src/heap-profile-table.cc ---- gperftools-2.0/src/heap-profile-table.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/heap-profile-table.cc 2013-03-01 14:25:38.125366846 -0500 -@@ -303,7 +303,7 @@ - profile_stats->free_size += b.free_size; - } - int printed = -- snprintf(buf + buflen, bufsize - buflen, "%6d: %8"PRId64" [%6d: %8"PRId64"] @%s", -+ snprintf(buf + buflen, bufsize - buflen, "%6d: %8" PRId64 " [%6d: %8" PRId64 "] @%s", - b.allocs - b.frees, - b.alloc_size - b.free_size, - b.allocs, -@@ -616,8 +616,8 @@ - // This is only used by the heap leak checker, but is intimately - // tied to the allocation map that belongs in this module and is - // therefore placed here. -- RAW_LOG(ERROR, "Leak check %s detected leaks of %"PRIuS" bytes " -- "in %"PRIuS" objects", -+ RAW_LOG(ERROR, "Leak check %s detected leaks of %" PRIuS " bytes " -+ "in %" PRIuS " objects", - checker_name, - size_t(total_.alloc_size), - size_t(total_.allocs)); -@@ -663,7 +663,7 @@ - e.bytes, e.count); - for (int j = 0; j < e.bucket->depth; j++) { - const void* pc = e.bucket->stack[j]; -- printer.Printf("\t@ %"PRIxPTR" %s\n", -+ printer.Printf("\t@ %" PRIxPTR " %s\n", - reinterpret_cast(pc), symbolization_table.GetSymbol(pc)); - } - RAW_LOG(ERROR, "%s", buffer); -@@ -687,7 +687,7 @@ - char* unused) { - // Perhaps also log the allocation stack trace (unsymbolized) - // on this line in case somebody finds it useful. -- RAW_LOG(ERROR, "leaked %"PRIuS" byte object %p", v->bytes, ptr); -+ RAW_LOG(ERROR, "leaked %" PRIuS " byte object %p", v->bytes, ptr); - } - - void HeapProfileTable::Snapshot::ReportIndividualObjects() { -diff -urP gperftools-2.0/src/malloc_extension.cc /home/spot/gperftools/src/malloc_extension.cc ---- gperftools-2.0/src/malloc_extension.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/malloc_extension.cc 2013-03-01 14:25:38.471366833 -0500 -@@ -244,7 +244,7 @@ - uintptr_t count, uintptr_t size) { - char buf[100]; - snprintf(buf, sizeof(buf), -- "%6"PRIu64": %8"PRIu64" [%6"PRIu64": %8"PRIu64"] @", -+ "%6" PRIu64 ": %8" PRIu64 " [%6" PRIu64 ": %8" PRIu64 "] @", - static_cast(count), - static_cast(size), - static_cast(count), -diff -urP gperftools-2.0/src/malloc_hook-inl.h /home/spot/gperftools/src/malloc_hook-inl.h ---- gperftools-2.0/src/malloc_hook-inl.h 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/malloc_hook-inl.h 2013-03-01 14:25:38.474366833 -0500 -@@ -66,7 +66,7 @@ - // This prevents MSVC 2005, at least, from complaining (it has to - // do with __wp64; AtomicWord is __wp64, but Atomic32/64 aren't). - return reinterpret_cast(static_cast( -- base::subtle::Acquire_Load(&data_))); -+ base::subtle::NoBarrier_Load(&data_))); - } - - // Sets the contained value to new_val and returns the old value, -@@ -124,7 +124,7 @@ - - // Fast inline implementation for fast path of Invoke*Hook. - bool empty() const { -- return base::subtle::Acquire_Load(&priv_end) == 0; -+ return base::subtle::NoBarrier_Load(&priv_end) == 0; - } - - // This internal data is not private so that the class is an aggregate and can -diff -urP gperftools-2.0/src/memory_region_map.cc /home/spot/gperftools/src/memory_region_map.cc ---- gperftools-2.0/src/memory_region_map.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/memory_region_map.cc 2013-03-01 14:25:38.720366824 -0500 -@@ -512,7 +512,7 @@ - uintptr_t start_addr = reinterpret_cast(start); - uintptr_t end_addr = start_addr + size; - // subtract start_addr, end_addr from all the regions -- RAW_VLOG(10, "Removing global region %p..%p; have %"PRIuS" regions", -+ RAW_VLOG(10, "Removing global region %p..%p; have %" PRIuS " regions", - reinterpret_cast(start_addr), - reinterpret_cast(end_addr), - regions_->size()); -@@ -571,7 +571,7 @@ - } - ++region; - } -- RAW_VLOG(12, "Removed region %p..%p; have %"PRIuS" regions", -+ RAW_VLOG(12, "Removed region %p..%p; have %" PRIuS " regions", - reinterpret_cast(start_addr), - reinterpret_cast(end_addr), - regions_->size()); -@@ -584,10 +584,10 @@ - const void* start, size_t size, - int prot, int flags, - int fd, off_t offset) { -- // TODO(maxim): replace all 0x%"PRIxS" by %p when RAW_VLOG uses a safe -+ // TODO(maxim): replace all 0x%" PRIxS " by %p when RAW_VLOG uses a safe - // snprintf reimplementation that does not malloc to pretty-print NULL -- RAW_VLOG(10, "MMap = 0x%"PRIxPTR" of %"PRIuS" at %"PRIu64" " -- "prot %d flags %d fd %d offs %"PRId64, -+ RAW_VLOG(10, "MMap = 0x%" PRIxPTR " of %" PRIuS " at %" PRIu64 " " -+ "prot %d flags %d fd %d offs %" PRId64, - reinterpret_cast(result), size, - reinterpret_cast(start), prot, flags, fd, - static_cast(offset)); -@@ -597,7 +597,7 @@ - } - - void MemoryRegionMap::MunmapHook(const void* ptr, size_t size) { -- RAW_VLOG(10, "MUnmap of %p %"PRIuS"", ptr, size); -+ RAW_VLOG(10, "MUnmap of %p %" PRIuS "", ptr, size); - if (size != 0) { - RecordRegionRemoval(ptr, size); - } -@@ -607,8 +607,8 @@ - const void* old_addr, size_t old_size, - size_t new_size, int flags, - const void* new_addr) { -- RAW_VLOG(10, "MRemap = 0x%"PRIxPTR" of 0x%"PRIxPTR" %"PRIuS" " -- "to %"PRIuS" flags %d new_addr=0x%"PRIxPTR, -+ RAW_VLOG(10, "MRemap = 0x%" PRIxPTR " of 0x%" PRIxPTR " %" PRIuS " " -+ "to %" PRIuS " flags %d new_addr=0x%" PRIxPTR, - (uintptr_t)result, (uintptr_t)old_addr, - old_size, new_size, flags, - flags & MREMAP_FIXED ? (uintptr_t)new_addr : 0); -@@ -621,7 +621,7 @@ - extern "C" void* __sbrk(ptrdiff_t increment); // defined in libc - - void MemoryRegionMap::SbrkHook(const void* result, ptrdiff_t increment) { -- RAW_VLOG(10, "Sbrk = 0x%"PRIxPTR" of %"PRIdS"", (uintptr_t)result, increment); -+ RAW_VLOG(10, "Sbrk = 0x%" PRIxPTR " of %" PRIdS "", (uintptr_t)result, increment); - if (result != reinterpret_cast(-1)) { - if (increment > 0) { - void* new_end = sbrk(0); -@@ -641,8 +641,8 @@ - uintptr_t previous = 0; - for (RegionSet::const_iterator r = regions_->begin(); - r != regions_->end(); ++r) { -- RAW_LOG(INFO, "Memory region 0x%"PRIxPTR"..0x%"PRIxPTR" " -- "from 0x%"PRIxPTR" stack=%d", -+ RAW_LOG(INFO, "Memory region 0x%" PRIxPTR "..0x%" PRIxPTR " " -+ "from 0x%" PRIxPTR " stack=%d", - r->start_addr, r->end_addr, r->caller(), r->is_stack); - RAW_CHECK(previous < r->end_addr, "wow, we messed up the set order"); - // this must be caused by uncontrolled recursive operations on regions_ -diff -urP gperftools-2.0/src/page_heap.cc /home/spot/gperftools/src/page_heap.cc ---- gperftools-2.0/src/page_heap.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/page_heap.cc 2013-03-01 14:25:38.473366833 -0500 -@@ -50,6 +50,14 @@ - "to return memory slower. Reasonable rates are in the " - "range [0,10]"); - -+DEFINE_int64(tcmalloc_heap_limit_mb, -+ EnvToInt("TCMALLOC_HEAP_LIMIT_MB", 0), -+ "Limit total size of the process heap to the " -+ "specified number of MiB. " -+ "When we approach the limit the memory is released " -+ "to the system more aggressively (more minor page faults). " -+ "Zero means to allocate as long as system allows."); -+ - namespace tcmalloc { - - PageHeap::PageHeap() -@@ -82,8 +90,18 @@ - // Alternatively, maybe there's a usable returned span. - ll = &free_[s].returned; - if (!DLL_IsEmpty(ll)) { -- ASSERT(ll->next->location == Span::ON_RETURNED_FREELIST); -- return Carve(ll->next, n); -+ // We did not call EnsureLimit before, to avoid releasing the span -+ // that will be taken immediately back. -+ // Calling EnsureLimit here is not very expensive, as it fails only if -+ // there is no more normal spans (and it fails efficiently) -+ // or SystemRelease does not work (there is probably no returned spans). -+ if (EnsureLimit(n)) { -+ // ll may have became empty due to coalescing -+ if (!DLL_IsEmpty(ll)) { -+ ASSERT(ll->next->location == Span::ON_RETURNED_FREELIST); -+ return Carve(ll->next, n); -+ } -+ } - } - } - // No luck in free lists, our last chance is in a larger class. -@@ -125,6 +143,8 @@ - } - } - -+ Span *bestNormal = best; -+ - // Search through released list in case it has a better fit - for (Span* span = large_.returned.next; - span != &large_.returned; -@@ -139,7 +159,27 @@ - } - } - -- return best == NULL ? NULL : Carve(best, n); -+ if (best == bestNormal) { -+ return best == NULL ? NULL : Carve(best, n); -+ } -+ -+ // best comes from returned list. -+ -+ if (EnsureLimit(n, false)) { -+ return Carve(best, n); -+ } -+ -+ if (EnsureLimit(n, true)) { -+ // best could have been destroyed by coalescing. -+ // bestNormal is not a best-fit, and it could be destroyed as well. -+ // We retry, the limit is already ensured: -+ return AllocLarge(n); -+ } -+ -+ // If bestNormal existed, EnsureLimit would succeeded: -+ ASSERT(bestNormal == NULL); -+ // We are not allowed to take best from returned list. -+ return NULL; - } - - Span* PageHeap::Split(Span* span, Length n) { -@@ -294,28 +334,26 @@ - Length PageHeap::ReleaseLastNormalSpan(SpanList* slist) { - Span* s = slist->normal.prev; - ASSERT(s->location == Span::ON_NORMAL_FREELIST); -- RemoveFromFreeList(s); -- const Length n = s->length; -- TCMalloc_SystemRelease(reinterpret_cast(s->start << kPageShift), -- static_cast(s->length << kPageShift)); -- s->location = Span::ON_RETURNED_FREELIST; -- MergeIntoFreeList(s); // Coalesces if possible. -- return n; -+ -+ if (TCMalloc_SystemRelease(reinterpret_cast(s->start << kPageShift), -+ static_cast(s->length << kPageShift))) { -+ RemoveFromFreeList(s); -+ const Length n = s->length; -+ s->location = Span::ON_RETURNED_FREELIST; -+ MergeIntoFreeList(s); // Coalesces if possible. -+ return n; -+ } -+ -+ return 0; - } - - Length PageHeap::ReleaseAtLeastNPages(Length num_pages) { - Length released_pages = 0; -- Length prev_released_pages = -1; - - // Round robin through the lists of free spans, releasing the last -- // span in each list. Stop after releasing at least num_pages. -- while (released_pages < num_pages) { -- if (released_pages == prev_released_pages) { -- // Last iteration of while loop made no progress. -- break; -- } -- prev_released_pages = released_pages; -- -+ // span in each list. Stop after releasing at least num_pages -+ // or when there is nothing more to release. -+ while (released_pages < num_pages && stats_.free_bytes > 0) { - for (int i = 0; i < kMaxPages+1 && released_pages < num_pages; - i++, release_index_++) { - if (release_index_ > kMaxPages) release_index_ = 0; -@@ -323,6 +361,8 @@ - &large_ : &free_[release_index_]; - if (!DLL_IsEmpty(&slist->normal)) { - Length released_len = ReleaseLastNormalSpan(slist); -+ // Some systems do not support release -+ if (released_len == 0) return released_pages; - released_pages += released_len; - } - } -@@ -330,6 +370,30 @@ - return released_pages; - } - -+bool PageHeap::EnsureLimit(Length n, bool withRelease) -+{ -+ Length limit = (FLAGS_tcmalloc_heap_limit_mb*1024*1024) >> kPageShift; -+ if (limit == 0) return true; //there is no limit -+ -+ // We do not use stats_.system_bytes because it does not take -+ // MetaDataAllocs into account. -+ Length takenPages = TCMalloc_SystemTaken >> kPageShift; -+ //XXX takenPages may be slightly bigger than limit for two reasons: -+ //* MetaDataAllocs ignore the limit (it is not easy to handle -+ // out of memory there) -+ //* sys_alloc may round allocation up to huge page size, -+ // although smaller limit was ensured -+ -+ ASSERT(takenPages >= stats_.unmapped_bytes >> kPageShift); -+ takenPages -= stats_.unmapped_bytes >> kPageShift; -+ -+ if (takenPages + n > limit && withRelease) { -+ takenPages -= ReleaseAtLeastNPages(takenPages + n - limit); -+ } -+ -+ return takenPages + n <= limit; -+} -+ - void PageHeap::RegisterSizeClass(Span* span, size_t sc) { - // Associate span object with all interior pages as well - ASSERT(span->location == Span::IN_USE); -@@ -407,12 +471,17 @@ - if (n > kMaxValidPages) return false; - Length ask = (n>kMinSystemAlloc) ? n : static_cast(kMinSystemAlloc); - size_t actual_size; -- void* ptr = TCMalloc_SystemAlloc(ask << kPageShift, &actual_size, kPageSize); -+ void* ptr = NULL; -+ if (EnsureLimit(ask)) { -+ ptr = TCMalloc_SystemAlloc(ask << kPageShift, &actual_size, kPageSize); -+ } - if (ptr == NULL) { - if (n < ask) { - // Try growing just "n" pages - ask = n; -- ptr = TCMalloc_SystemAlloc(ask << kPageShift, &actual_size, kPageSize); -+ if (EnsureLimit(ask)) { -+ ptr = TCMalloc_SystemAlloc(ask << kPageShift, &actual_size, kPageSize); -+ } - } - if (ptr == NULL) return false; - } -diff -urP gperftools-2.0/src/page_heap.h /home/spot/gperftools/src/page_heap.h ---- gperftools-2.0/src/page_heap.h 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/page_heap.h 2013-03-01 14:25:38.072366848 -0500 -@@ -274,9 +274,13 @@ - void IncrementalScavenge(Length n); - - // Release the last span on the normal portion of this list. -- // Return the length of that span. -+ // Return the length of that span or zero if release failed. - Length ReleaseLastNormalSpan(SpanList* slist); - -+ // Checks if we are allowed to take more memory from the system. -+ // If limit is reached and allowRelease is true, tries to release -+ // some unused spans. -+ bool EnsureLimit(Length n, bool allowRelease = true); - - // Number of pages to deallocate before doing more scavenging - int64_t scavenge_counter_; -diff -urP gperftools-2.0/src/pprof /home/spot/gperftools/src/pprof ---- gperftools-2.0/src/pprof 2012-02-03 18:39:48.000000000 -0500 -+++ /home/spot/gperftools/src/pprof 2013-03-01 14:25:37.971366851 -0500 -@@ -285,7 +285,6 @@ - my $msg = shift; - print STDERR "$msg\n\n"; - print STDERR usage_string(); -- print STDERR "\nFATAL ERROR: $msg\n"; # just as a reminder - exit(1); - } - -diff -urP gperftools-2.0/src/profiler.cc /home/spot/gperftools/src/profiler.cc ---- gperftools-2.0/src/profiler.cc 2012-02-03 14:18:22.000000000 -0500 -+++ /home/spot/gperftools/src/profiler.cc 2013-03-01 14:25:38.206366843 -0500 -@@ -70,8 +70,21 @@ - - using std::string; - --// Collects up all profile data. This is a singleton, which is --// initialized by a constructor at startup. -+DEFINE_bool(cpu_profiler_unittest, -+ EnvToBool("PERFTOOLS_UNITTEST", true), -+ "Determines whether or not we are running under the \ -+ control of a unit test. This allows us to include or \ -+ exclude certain behaviours."); -+ -+// Collects up all profile data. This is a singleton, which is -+// initialized by a constructor at startup. If no cpu profiler -+// signal is specified then the profiler lifecycle is either -+// manaully controlled via the API or attached to the scope of -+// the singleton (program scope). Otherwise the cpu toggle is -+// used to allow for user selectable control via signal generation. -+// This is very useful for profiling a daemon process without -+// having to start and stop the daemon or having to modify the -+// source code to use the cpu profiler API. - class CpuProfiler { - public: - CpuProfiler(); -@@ -126,6 +139,40 @@ - void* cpu_profiler); - }; - -+// Signal handler that is registered when a user selectable signal -+// number is defined in the environment variable CPUPROFILESIGNAL. -+static void CpuProfilerSwitch(int signal_number) -+{ -+ bool static started = false; -+ static unsigned profile_count = 0; -+ static char base_profile_name[1024] = "\0"; -+ -+ if (base_profile_name[0] == '\0') { -+ if (!GetUniquePathFromEnv("CPUPROFILE", base_profile_name)) { -+ RAW_LOG(FATAL,"Cpu profiler switch is registered but no CPUPROFILE is defined"); -+ return; -+ } -+ } -+ if (!started) -+ { -+ char full_profile_name[1024]; -+ -+ snprintf(full_profile_name, sizeof(full_profile_name), "%s.%u", -+ base_profile_name, profile_count++); -+ -+ if(!ProfilerStart(full_profile_name)) -+ { -+ RAW_LOG(FATAL, "Can't turn on cpu profiling for '%s': %s\n", -+ full_profile_name, strerror(errno)); -+ } -+ } -+ else -+ { -+ ProfilerStop(); -+ } -+ started = !started; -+} -+ - // Profile data structure singleton: Constructor will check to see if - // profiling should be enabled. Destructor will write profile data - // out to disk. -@@ -137,19 +184,60 @@ - // TODO(cgd) Move this code *out* of the CpuProfile constructor into a - // separate object responsible for initialization. With ProfileHandler there - // is no need to limit the number of profilers. -- char fname[PATH_MAX]; -- if (!GetUniquePathFromEnv("CPUPROFILE", fname)) { -+ if (getenv("CPUPROFILE") == NULL) { -+ if (!FLAGS_cpu_profiler_unittest) { -+ RAW_LOG(WARNING, "CPU profiler linked but no valid CPUPROFILE environment variable found\n"); -+ } - return; - } -+ - // We don't enable profiling if setuid -- it's a security risk - #ifdef HAVE_GETEUID -- if (getuid() != geteuid()) -+ if (getuid() != geteuid()) { -+ if (!FLAGS_cpu_profiler_unittest) { -+ RAW_LOG(WARNING, "Cannot perform CPU profiling when running with setuid\n"); -+ } - return; -+ } - #endif - -- if (!Start(fname, NULL)) { -- RAW_LOG(FATAL, "Can't turn on cpu profiling for '%s': %s\n", -- fname, strerror(errno)); -+ char *signal_number_str = getenv("CPUPROFILESIGNAL"); -+ if (signal_number_str != NULL) -+ { -+ long int signal_number = strtol(signal_number_str, NULL, 10); -+ printf(" signal_number=%d\n", signal_number); -+ if (signal_number >=1 && signal_number <=64) -+ { -+ sighandler_t old_signal_handler = signal(signal_number, CpuProfilerSwitch); -+ if (old_signal_handler == NULL) -+ { -+ RAW_LOG(INFO,"Using signal %d as cpu profiling switch", signal_number); -+ -+ } -+ else -+ { -+ RAW_LOG(FATAL, "Signal %d already in use\n", signal_number); -+ } -+ } -+ else -+ { -+ RAW_LOG(FATAL, "Signal number %s is invalid\n", signal_number_str); -+ } -+ } -+ else -+ { -+ char fname[PATH_MAX]; -+ if (!GetUniquePathFromEnv("CPUPROFILE", fname)) { -+ if (!FLAGS_cpu_profiler_unittest) { -+ RAW_LOG(WARNING, "CPU profiler linked but no valid CPUPROFILE environment variable found\n"); -+ } -+ return; -+ } -+ -+ if (!Start(fname, NULL)) { -+ RAW_LOG(FATAL, "Can't turn on cpu profiling for '%s': %s\n", -+ fname, strerror(errno)); -+ } - } - } - -diff -urP gperftools-2.0/src/static_vars.h /home/spot/gperftools/src/static_vars.h ---- gperftools-2.0/src/static_vars.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/static_vars.h 2013-03-01 14:25:38.720366824 -0500 -@@ -82,6 +82,9 @@ - return &bucket_allocator_; - } - -+ // Check if InitStaticVars() has been run. -+ static bool IsInited() { return pageheap() != NULL; } -+ - private: - static SpinLock pageheap_lock_; - -diff -urP gperftools-2.0/src/symbolize.cc /home/spot/gperftools/src/symbolize.cc ---- gperftools-2.0/src/symbolize.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/symbolize.cc 2013-03-01 14:25:38.474366833 -0500 -@@ -229,7 +229,7 @@ - iter != symbolization_table_.end(); ++iter) { - written += snprintf(pprof_buffer + written, kOutBufSize - written, - // pprof expects format to be 0xXXXXXX -- "0x%"PRIxPTR"\n", reinterpret_cast(iter->first)); -+ "0x%" PRIxPTR "\n", reinterpret_cast(iter->first)); - } - write(child_in[1], pprof_buffer, strlen(pprof_buffer)); - close(child_in[1]); // that's all we need to write -diff -urP gperftools-2.0/src/system-alloc.cc /home/spot/gperftools/src/system-alloc.cc ---- gperftools-2.0/src/system-alloc.cc 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/system-alloc.cc 2013-03-01 14:25:38.721366824 -0500 -@@ -122,6 +122,9 @@ - // The current system allocator - SysAllocator* sys_alloc = NULL; - -+// Number of bytes taken from system. -+size_t TCMalloc_SystemTaken = 0; -+ - // Configuration parameters. - DEFINE_int32(malloc_devmem_start, - EnvToInt("TCMALLOC_DEVMEM_START", 0), -@@ -137,6 +140,10 @@ - DEFINE_bool(malloc_skip_mmap, - EnvToBool("TCMALLOC_SKIP_MMAP", false), - "Whether mmap can be used to obtain memory."); -+DEFINE_bool(malloc_disable_memory_release, -+ EnvToBool("TCMALLOC_DISABLE_MEMORY_RELEASE", false), -+ "Whether MADV_FREE/MADV_DONTNEED should be used" -+ " to return unused memory to the system."); - - // static allocators - class SbrkSysAllocator : public SysAllocator { -@@ -442,6 +449,12 @@ - return NULL; - } - -+ATTRIBUTE_WEAK ATTRIBUTE_NOINLINE -+SysAllocator *tc_get_sysalloc_override(SysAllocator *def) -+{ -+ return def; -+} -+ - static bool system_alloc_inited = false; - void InitSystemAllocators(void) { - MmapSysAllocator *mmap = new (mmap_space) MmapSysAllocator(); -@@ -462,7 +475,8 @@ - sdef->SetChildAllocator(sbrk, 0, sbrk_name); - sdef->SetChildAllocator(mmap, 1, mmap_name); - } -- sys_alloc = sdef; -+ -+ sys_alloc = tc_get_sysalloc_override(sdef); - } - - void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, -@@ -485,21 +499,24 @@ - if (actual_size) { - CheckAddressBits( - reinterpret_cast(result) + *actual_size - 1); -+ TCMalloc_SystemTaken += *actual_size; - } else { - CheckAddressBits( - reinterpret_cast(result) + size - 1); -+ TCMalloc_SystemTaken += size; - } - } - return result; - } - --void TCMalloc_SystemRelease(void* start, size_t length) { -+bool TCMalloc_SystemRelease(void* start, size_t length) { - #ifdef MADV_FREE - if (FLAGS_malloc_devmem_start) { - // It's not safe to use MADV_FREE/MADV_DONTNEED if we've been - // mapping /dev/mem for heap memory. -- return; -+ return false; - } -+ if (FLAGS_malloc_disable_memory_release) return false; - if (pagesize == 0) pagesize = getpagesize(); - const size_t pagemask = pagesize - 1; - -@@ -518,13 +535,14 @@ - ASSERT(new_end <= end); - - if (new_end > new_start) { -- // Note -- ignoring most return codes, because if this fails it -- // doesn't matter... -- while (madvise(reinterpret_cast(new_start), new_end - new_start, -- MADV_FREE) == -1 && -- errno == EAGAIN) { -- // NOP -- } -+ int result; -+ do { -+ result = madvise(reinterpret_cast(new_start), -+ new_end - new_start, MADV_FREE); -+ } while (result == -1 && errno == EAGAIN); -+ -+ return result != -1; - } - #endif -+ return false; - } -diff -urP gperftools-2.0/src/system-alloc.h /home/spot/gperftools/src/system-alloc.h ---- gperftools-2.0/src/system-alloc.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/system-alloc.h 2013-03-01 14:25:38.474366833 -0500 -@@ -69,9 +69,14 @@ - // the address space next time they are touched, which can impact - // performance. (Only pages fully covered by the memory region will - // be released, partial pages will not.) --extern void TCMalloc_SystemRelease(void* start, size_t length); -+// -+// Returns false if release failed or not supported. -+extern bool TCMalloc_SystemRelease(void* start, size_t length); - - // The current system allocator. - extern PERFTOOLS_DLL_DECL SysAllocator* sys_alloc; - -+// Number of bytes taken from system. -+extern PERFTOOLS_DLL_DECL size_t TCMalloc_SystemTaken; -+ - #endif /* TCMALLOC_SYSTEM_ALLOC_H_ */ -diff -urP gperftools-2.0/src/tcmalloc.cc /home/spot/gperftools/src/tcmalloc.cc ---- gperftools-2.0/src/tcmalloc.cc 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/tcmalloc.cc 2013-03-01 14:25:37.968366851 -0500 -@@ -131,18 +131,6 @@ - #include "tcmalloc_guard.h" // for TCMallocGuard - #include "thread_cache.h" // for ThreadCache - --// We only need malloc.h for struct mallinfo. --#ifdef HAVE_STRUCT_MALLINFO --// Malloc can be in several places on older versions of OS X. --# if defined(HAVE_MALLOC_H) --# include --# elif defined(HAVE_SYS_MALLOC_H) --# include --# elif defined(HAVE_MALLOC_MALLOC_H) --# include --# endif --#endif -- - #if (defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)) && !defined(WIN32_OVERRIDE_ALLOCATORS) - # define WIN32_DO_PATCHING 1 - #endif -@@ -311,7 +299,10 @@ - PageHeap::Stats pageheap; // Stats from page heap - }; - --// Get stats into "r". Also get per-size-class counts if class_count != NULL -+// Get stats into "r". Also, if class_count != NULL, class_count[k] -+// will be set to the total number of objects of size class k in the -+// central cache, transfer cache, and per-thread caches. If small_spans -+// is non-NULL, it is filled. Same for large_spans. - static void ExtractStats(TCMallocStats* r, uint64_t* class_count, - PageHeap::SmallSpanStats* small_spans, - PageHeap::LargeSpanStats* large_spans) { -@@ -325,7 +316,12 @@ - Static::sizemap()->ByteSizeForClass(cl)); - r->central_bytes += (size * length) + cache_overhead; - r->transfer_bytes += (size * tc_length); -- if (class_count) class_count[cl] = length + tc_length; -+ if (class_count) { -+ // Sum the lengths of all per-class freelists, except the per-thread -+ // freelists, which get counted when we call GetThreadStats(), below. -+ class_count[cl] = length + tc_length; -+ } -+ - } - - // Add stats from per-thread heaps -@@ -414,7 +410,8 @@ - - if (level >= 2) { - out->printf("------------------------------------------------\n"); -- out->printf("Size class breakdown\n"); -+ out->printf("Total size of freelists for per-thread caches,\n"); -+ out->printf("transfer cache, and central cache, by size class\n"); - out->printf("------------------------------------------------\n"); - uint64_t cumulative = 0; - for (int cl = 0; cl < kNumClasses; ++cl) { -@@ -656,6 +653,27 @@ - return true; - } - -+ if (strcmp(name, "tcmalloc.central_cache_free_bytes") == 0) { -+ TCMallocStats stats; -+ ExtractStats(&stats, NULL, NULL, NULL); -+ *value = stats.central_bytes; -+ return true; -+ } -+ -+ if (strcmp(name, "tcmalloc.transfer_cache_free_bytes") == 0) { -+ TCMallocStats stats; -+ ExtractStats(&stats, NULL, NULL, NULL); -+ *value = stats.transfer_bytes; -+ return true; -+ } -+ -+ if (strcmp(name, "tcmalloc.thread_cache_free_bytes") == 0) { -+ TCMallocStats stats; -+ ExtractStats(&stats, NULL, NULL, NULL); -+ *value = stats.thread_bytes; -+ return true; -+ } -+ - if (strcmp(name, "tcmalloc.pageheap_free_bytes") == 0) { - SpinLockHolder l(Static::pageheap_lock()); - *value = Static::pageheap()->stats().free_bytes; -@@ -951,13 +969,13 @@ - SpinLockHolder h(Static::pageheap_lock()); - // Allocate span - Span *span = Static::pageheap()->New(tcmalloc::pages(size == 0 ? 1 : size)); -- if (span == NULL) { -+ if (UNLIKELY(span == NULL)) { - return NULL; - } - - // Allocate stack trace - StackTrace *stack = Static::stacktrace_allocator()->New(); -- if (stack == NULL) { -+ if (UNLIKELY(stack == NULL)) { - // Sampling failed because of lack of memory - return span; - } -@@ -984,7 +1002,7 @@ - static const int N = 1000; - char buffer[N]; - TCMalloc_Printer printer(buffer, N); -- printer.printf("tcmalloc: large alloc %"PRIu64" bytes == %p @ ", -+ printer.printf("tcmalloc: large alloc %" PRIu64 " bytes == %p @ ", - static_cast(num_pages) << kPageShift, - result); - for (int i = 0; i < stack.depth; i++) { -@@ -996,6 +1014,7 @@ - - inline void* cpp_alloc(size_t size, bool nothrow); - inline void* do_malloc(size_t size); -+inline void* do_malloc_no_errno(size_t size); - - // TODO(willchan): Investigate whether or not lining this much is harmful to - // performance. -@@ -1005,6 +1024,10 @@ - return tc_new_mode ? cpp_alloc(size, true) : do_malloc(size); - } - -+inline void* do_malloc_no_errno_or_cpp_alloc(size_t size) { -+ return tc_new_mode ? cpp_alloc(size, true) : do_malloc_no_errno(size); -+} -+ - void* cpp_memalign(size_t align, size_t size); - void* do_memalign(size_t align, size_t size); - -@@ -1041,7 +1064,7 @@ - } else { - SpinLockHolder h(Static::pageheap_lock()); - Span* span = Static::pageheap()->New(num_pages); -- result = (span == NULL ? NULL : SpanToMallocResult(span)); -+ result = (UNLIKELY(span == NULL) ? NULL : SpanToMallocResult(span)); - report_large = should_report_large(num_pages); - } - -@@ -1051,26 +1074,35 @@ - return result; - } - --inline void* do_malloc(size_t size) { -- void* ret = NULL; -+inline void* do_malloc_small(ThreadCache* heap, size_t size) { -+ ASSERT(Static::IsInited()); -+ ASSERT(heap != NULL); -+ size_t cl = Static::sizemap()->SizeClass(size); -+ size = Static::sizemap()->class_to_size(cl); - -- // The following call forces module initialization -- ThreadCache* heap = ThreadCache::GetCache(); -- if (size <= kMaxSize) { -- size_t cl = Static::sizemap()->SizeClass(size); -- size = Static::sizemap()->class_to_size(cl); -+ if ((FLAGS_tcmalloc_sample_parameter > 0) && heap->SampleAllocation(size)) { -+ return DoSampledAllocation(size); -+ } else { -+ // The common case, and also the simplest. This just pops the -+ // size-appropriate freelist, after replenishing it if it's empty. -+ return CheckedMallocResult(heap->Allocate(size, cl)); -+ } -+} - -- if ((FLAGS_tcmalloc_sample_parameter > 0) && heap->SampleAllocation(size)) { -- ret = DoSampledAllocation(size); -- } else { -- // The common case, and also the simplest. This just pops the -- // size-appropriate freelist, after replenishing it if it's empty. -- ret = CheckedMallocResult(heap->Allocate(size, cl)); -- } -+inline void* do_malloc_no_errno(size_t size) { -+ if (ThreadCache::have_tls && -+ LIKELY(size < ThreadCache::MinSizeForSlowPath())) { -+ return do_malloc_small(ThreadCache::GetCacheWhichMustBePresent(), size); -+ } else if (size <= kMaxSize) { -+ return do_malloc_small(ThreadCache::GetCache(), size); - } else { -- ret = do_malloc_pages(heap, size); -+ return do_malloc_pages(ThreadCache::GetCache(), size); - } -- if (ret == NULL) errno = ENOMEM; -+} -+ -+inline void* do_malloc(size_t size) { -+ void* ret = do_malloc_no_errno(size); -+ if (UNLIKELY(ret == NULL)) errno = ENOMEM; - return ret; - } - -@@ -1079,55 +1111,72 @@ - const size_t size = n * elem_size; - if (elem_size != 0 && size / elem_size != n) return NULL; - -- void* result = do_malloc_or_cpp_alloc(size); -- if (result != NULL) { -+ void* result = do_malloc_no_errno_or_cpp_alloc(size); -+ if (result == NULL) { -+ errno = ENOMEM; -+ } else { - memset(result, 0, size); - } - return result; - } - --static inline ThreadCache* GetCacheIfPresent() { -- void* const p = ThreadCache::GetCacheIfPresent(); -- return reinterpret_cast(p); -+// If ptr is NULL, do nothing. Otherwise invoke the given function. -+inline void free_null_or_invalid(void* ptr, void (*invalid_free_fn)(void*)) { -+ if (ptr != NULL) { -+ (*invalid_free_fn)(ptr); -+ } - } - --// This lets you call back to a given function pointer if ptr is invalid. --// It is used primarily by windows code which wants a specialized callback. --inline void do_free_with_callback(void* ptr, void (*invalid_free_fn)(void*)) { -- if (ptr == NULL) return; -- if (Static::pageheap() == NULL) { -+// Helper for do_free_with_callback(), below. Inputs: -+// ptr is object to be freed -+// invalid_free_fn is a function that gets invoked on certain "bad frees" -+// heap is the ThreadCache for this thread, or NULL if it isn't known -+// heap_must_be_valid is whether heap is known to be non-NULL -+// -+// This function may only be used after Static::IsInited() is true. -+// -+// We can usually detect the case where ptr is not pointing to a page that -+// tcmalloc is using, and in those cases we invoke invalid_free_fn. -+// -+// To maximize speed in the common case, we usually get here with -+// heap_must_be_valid being a manifest constant equal to true. -+inline void do_free_helper(void* ptr, -+ void (*invalid_free_fn)(void*), -+ ThreadCache* heap, -+ bool heap_must_be_valid) { -+ ASSERT((Static::IsInited() && heap != NULL) || !heap_must_be_valid); -+ if (!heap_must_be_valid && !Static::IsInited()) { - // We called free() before malloc(). This can occur if the - // (system) malloc() is called before tcmalloc is loaded, and then - // free() is called after tcmalloc is loaded (and tc_free has - // replaced free), but before the global constructor has run that - // sets up the tcmalloc data structures. -- (*invalid_free_fn)(ptr); // Decide how to handle the bad free request -+ free_null_or_invalid(ptr, invalid_free_fn); - return; - } -- const PageID p = reinterpret_cast(ptr) >> kPageShift; - Span* span = NULL; -+ const PageID p = reinterpret_cast(ptr) >> kPageShift; - size_t cl = Static::pageheap()->GetSizeClassIfCached(p); -- -- if (cl == 0) { -+ if (UNLIKELY(cl == 0)) { - span = Static::pageheap()->GetDescriptor(p); -- if (!span) { -- // span can be NULL because the pointer passed in is invalid -+ if (UNLIKELY(!span)) { -+ // span can be NULL because the pointer passed in is NULL or invalid - // (not something returned by malloc or friends), or because the - // pointer was allocated with some other allocator besides - // tcmalloc. The latter can happen if tcmalloc is linked in via - // a dynamic library, but is not listed last on the link line. - // In that case, libraries after it on the link line will - // allocate with libc malloc, but free with tcmalloc's free. -- (*invalid_free_fn)(ptr); // Decide how to handle the bad free request -+ free_null_or_invalid(ptr, invalid_free_fn); - return; - } - cl = span->sizeclass; - Static::pageheap()->CacheSizeClass(p, cl); - } -- if (cl != 0) { -+ ASSERT(ptr != NULL); -+ if (LIKELY(cl != 0)) { - ASSERT(!Static::pageheap()->GetDescriptor(p)->sample); -- ThreadCache* heap = GetCacheIfPresent(); -- if (heap != NULL) { -+ if (heap_must_be_valid || heap != NULL) { - heap->Deallocate(ptr, cl); - } else { - // Delete directly into central cache -@@ -1148,6 +1197,23 @@ - } - } - -+// Helper for the object deletion (free, delete, etc.). Inputs: -+// ptr is object to be freed -+// invalid_free_fn is a function that gets invoked on certain "bad frees" -+// -+// We can usually detect the case where ptr is not pointing to a page that -+// tcmalloc is using, and in those cases we invoke invalid_free_fn. -+inline void do_free_with_callback(void* ptr, void (*invalid_free_fn)(void*)) { -+ ThreadCache* heap = NULL; -+ if (LIKELY(ThreadCache::IsFastPathAllowed())) { -+ heap = ThreadCache::GetCacheWhichMustBePresent(); -+ do_free_helper(ptr, invalid_free_fn, heap, true); -+ } else { -+ heap = ThreadCache::GetCacheIfPresent(); -+ do_free_helper(ptr, invalid_free_fn, heap, false); -+ } -+} -+ - // The default "do_free" that uses the default callback. - inline void do_free(void* ptr) { - return do_free_with_callback(ptr, &InvalidFree); -@@ -1165,7 +1231,7 @@ - return Static::sizemap()->ByteSizeForClass(cl); - } else { - const Span *span = Static::pageheap()->GetDescriptor(p); -- if (span == NULL) { // means we do not own this memory -+ if (UNLIKELY(span == NULL)) { // means we do not own this memory - return (*invalid_getsize_fn)(ptr); - } else if (span->sizeclass != 0) { - Static::pageheap()->CacheSizeClass(p, span->sizeclass); -@@ -1191,20 +1257,20 @@ - // . If we need to grow, grow to max(new_size, old_size * 1.X) - // . Don't shrink unless new_size < old_size * 0.Y - // X and Y trade-off time for wasted space. For now we do 1.25 and 0.5. -- const int lower_bound_to_grow = old_size + old_size / 4; -- const int upper_bound_to_shrink = old_size / 2; -+ const size_t lower_bound_to_grow = old_size + old_size / 4ul; -+ const size_t upper_bound_to_shrink = old_size / 2ul; - if ((new_size > old_size) || (new_size < upper_bound_to_shrink)) { - // Need to reallocate. - void* new_ptr = NULL; - - if (new_size > old_size && new_size < lower_bound_to_grow) { -- new_ptr = do_malloc_or_cpp_alloc(lower_bound_to_grow); -+ new_ptr = do_malloc_no_errno_or_cpp_alloc(lower_bound_to_grow); - } - if (new_ptr == NULL) { - // Either new_size is not a tiny increment, or last do_malloc failed. - new_ptr = do_malloc_or_cpp_alloc(new_size); - } -- if (new_ptr == NULL) { -+ if (UNLIKELY(new_ptr == NULL)) { - return NULL; - } - MallocHook::InvokeNewHook(new_ptr, new_size); -@@ -1247,7 +1313,7 @@ - return p; - } - -- if (Static::pageheap() == NULL) ThreadCache::InitModule(); -+ if (UNLIKELY(Static::pageheap() == NULL)) ThreadCache::InitModule(); - - // Allocate at least one byte to avoid boundary conditions below - if (size == 0) size = 1; -@@ -1279,13 +1345,13 @@ - // TODO: We could put the rest of this page in the appropriate - // TODO: cache but it does not seem worth it. - Span* span = Static::pageheap()->New(tcmalloc::pages(size)); -- return span == NULL ? NULL : SpanToMallocResult(span); -+ return UNLIKELY(span == NULL) ? NULL : SpanToMallocResult(span); - } - - // Allocate extra pages and carve off an aligned portion - const Length alloc = tcmalloc::pages(size + align); - Span* span = Static::pageheap()->New(alloc); -- if (span == NULL) return NULL; -+ if (UNLIKELY(span == NULL)) return NULL; - - // Skip starting portion so that we end up aligned - Length skip = 0; -@@ -1350,12 +1416,12 @@ - static SpinLock set_new_handler_lock(SpinLock::LINKER_INITIALIZED); - - inline void* cpp_alloc(size_t size, bool nothrow) { -- for (;;) { -- void* p = do_malloc(size); - #ifdef PREANSINEW -- return p; -+ return do_malloc(size); - #else -- if (p == NULL) { // allocation failed -+ for (;;) { -+ void* p = do_malloc_no_errno(size); -+ if (UNLIKELY(p == NULL)) { // allocation failed - // Get the current new handler. NB: this function is not - // thread-safe. We make a feeble stab at making it so here, but - // this lock only protects against tcmalloc interfering with -@@ -1373,11 +1439,11 @@ - (*nh)(); - continue; - } -- return 0; -+ goto fail; - #else - // If no new_handler is established, the allocation failed. - if (!nh) { -- if (nothrow) return 0; -+ if (nothrow) goto fail; - throw std::bad_alloc(); - } - // Otherwise, try the new_handler. If it returns, retry the -@@ -1387,7 +1453,7 @@ - (*nh)(); - } catch (const std::bad_alloc&) { - if (!nothrow) throw; -- return p; -+ goto fail; - } - #endif // (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) - } else { // allocation success -@@ -1395,6 +1461,9 @@ - } - #endif // PREANSINEW - } -+fail: -+ errno = ENOMEM; -+ return 0; - } - - void* cpp_memalign(size_t align, size_t size) { -@@ -1403,7 +1472,7 @@ - #ifdef PREANSINEW - return p; - #else -- if (p == NULL) { // allocation failed -+ if (UNLIKELY(p == NULL)) { // allocation failed - // Get the current new handler. NB: this function is not - // thread-safe. We make a feeble stab at making it so here, but - // this lock only protects against tcmalloc interfering with -@@ -1447,6 +1516,8 @@ - - // As promised, the definition of this function, declared above. - size_t TCMallocImplementation::GetAllocatedSize(const void* ptr) { -+ if (ptr == NULL) -+ return 0; - ASSERT(TCMallocImplementation::GetOwnership(ptr) - != TCMallocImplementation::kNotOwned); - return GetSizeWithCallback(ptr, &InvalidGetAllocatedSize); -@@ -1601,7 +1672,7 @@ - - void* result = do_memalign_or_cpp_memalign(align, size); - MallocHook::InvokeNewHook(result, size); -- if (result == NULL) { -+ if (UNLIKELY(result == NULL)) { - return ENOMEM; - } else { - *result_ptr = result; -diff -urP gperftools-2.0/src/tests/getpc_test.cc /home/spot/gperftools/src/tests/getpc_test.cc ---- gperftools-2.0/src/tests/getpc_test.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/tests/getpc_test.cc 2013-03-01 14:25:38.480366833 -0500 -@@ -106,7 +106,7 @@ - // ElfW(Addr) gp; /* global pointer */ - // }; - // We want the code entry point. --#if defined(__ia64) || defined(__ppc64) // NOTE: ppc64 is UNTESTED -+#if defined(__ia64) || defined(__powerpc64__) // NOTE: ppc64 is UNTESTED - expected = ((char**)expected)[0]; // this is "ip" - #endif - -diff -urP gperftools-2.0/src/tests/malloc_hook_test.cc /home/spot/gperftools/src/tests/malloc_hook_test.cc ---- gperftools-2.0/src/tests/malloc_hook_test.cc 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/tests/malloc_hook_test.cc 2013-03-01 14:25:38.478366833 -0500 -@@ -97,11 +97,11 @@ - // values as integers for testing. - typedef base::internal::HookList TestHookList; - --int TestHookList_Traverse(const TestHookList& list, int* output_array, int n) { -+int TestHookList_Traverse(const TestHookList& list, uintptr_t* output_array, int n) { - MallocHook::NewHook values_as_hooks[kHookListMaxValues]; - int result = list.Traverse(values_as_hooks, min(n, kHookListMaxValues)); - for (int i = 0; i < result; ++i) { -- output_array[i] = reinterpret_cast(values_as_hooks[i]); -+ output_array[i] = reinterpret_cast(*values_as_hooks[i]); - } - return result; - } -@@ -120,7 +120,7 @@ - - TEST(HookListTest, InitialValueExists) { - TestHookList list = INIT_HOOK_LIST(69); -- int values[2] = { 0, 0 }; -+ uintptr_t values[2] = { 0, 0 }; - EXPECT_EQ(1, TestHookList_Traverse(list, values, 2)); - EXPECT_EQ(69, values[0]); - EXPECT_EQ(1, list.priv_end); -@@ -131,7 +131,7 @@ - ASSERT_TRUE(TestHookList_Remove(&list, 69)); - EXPECT_EQ(0, list.priv_end); - -- int values[2] = { 0, 0 }; -+ uintptr_t values[2] = { 0, 0 }; - EXPECT_EQ(0, TestHookList_Traverse(list, values, 2)); - } - -@@ -140,7 +140,7 @@ - ASSERT_TRUE(TestHookList_Add(&list, 42)); - EXPECT_EQ(2, list.priv_end); - -- int values[2] = { 0, 0 }; -+ uintptr_t values[2] = { 0, 0 }; - EXPECT_EQ(2, TestHookList_Traverse(list, values, 2)); - EXPECT_EQ(69, values[0]); - EXPECT_EQ(42, values[1]); -@@ -153,7 +153,7 @@ - ASSERT_TRUE(TestHookList_Remove(&list, 69)); - EXPECT_EQ(2, list.priv_end); - -- int values[2] = { 0, 0 }; -+ uintptr_t values[2] = { 0, 0 }; - EXPECT_EQ(1, TestHookList_Traverse(list, values, 2)); - EXPECT_EQ(42, values[0]); - -@@ -172,7 +172,7 @@ - ASSERT_TRUE(TestHookList_Add(&list, 7)); - EXPECT_EQ(2, list.priv_end); - -- int values[2] = { 0, 0 }; -+ uintptr_t values[2] = { 0, 0 }; - EXPECT_EQ(2, TestHookList_Traverse(list, values, 2)); - EXPECT_EQ(7, values[0]); - EXPECT_EQ(42, values[1]); -@@ -182,7 +182,7 @@ - TestHookList list = INIT_HOOK_LIST(69); - EXPECT_FALSE(TestHookList_Add(&list, 0)); - -- int values[2] = { 0, 0 }; -+ uintptr_t values[2] = { 0, 0 }; - EXPECT_EQ(1, TestHookList_Traverse(list, values, 2)); - EXPECT_EQ(69, values[0]); - EXPECT_EQ(1, list.priv_end); -@@ -196,7 +196,7 @@ - EXPECT_EQ(kHookListMaxValues, num_inserts); - EXPECT_EQ(kHookListMaxValues, list.priv_end); - -- int values[kHookListMaxValues + 1]; -+ uintptr_t values[kHookListMaxValues + 1]; - EXPECT_EQ(kHookListMaxValues, TestHookList_Traverse(list, values, - kHookListMaxValues)); - EXPECT_EQ(69, values[0]); -@@ -218,7 +218,7 @@ - int value = (i << shift) + thread_num; - EXPECT_TRUE(TestHookList_Add(list, value)); - sched_yield(); // Ensure some more interleaving. -- int values[kHookListMaxValues + 1]; -+ uintptr_t values[kHookListMaxValues + 1]; - int num_values = TestHookList_Traverse(*list, values, kHookListMaxValues); - EXPECT_LT(0, num_values); - int value_index; -@@ -284,7 +284,7 @@ - RunManyThreadsWithId(&MultithreadedTestThreadRunner, num_threads_remaining, - 1 << 15); - -- int values[kHookListMaxValues + 1]; -+ uintptr_t values[kHookListMaxValues + 1]; - EXPECT_EQ(0, TestHookList_Traverse(list, values, kHookListMaxValues)); - EXPECT_EQ(0, list.priv_end); - } -diff -urP gperftools-2.0/src/tests/markidle_unittest.cc /home/spot/gperftools/src/tests/markidle_unittest.cc ---- gperftools-2.0/src/tests/markidle_unittest.cc 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/tests/markidle_unittest.cc 2013-03-01 14:25:38.485366833 -0500 -@@ -92,9 +92,9 @@ - CHECK_LE(post_idle, original); - - // Log after testing because logging can allocate heap memory. -- VLOG(0, "Original usage: %"PRIuS"\n", original); -- VLOG(0, "Post allocation: %"PRIuS"\n", post_allocation); -- VLOG(0, "Post idle: %"PRIuS"\n", post_idle); -+ VLOG(0, "Original usage: %" PRIuS "\n", original); -+ VLOG(0, "Post allocation: %" PRIuS "\n", post_allocation); -+ VLOG(0, "Post idle: %" PRIuS "\n", post_idle); - } - - int main(int argc, char** argv) { -diff -urP gperftools-2.0/src/tests/page_heap_test.cc /home/spot/gperftools/src/tests/page_heap_test.cc ---- gperftools-2.0/src/tests/page_heap_test.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/tests/page_heap_test.cc 2013-03-01 14:25:38.483366833 -0500 -@@ -3,17 +3,29 @@ - - #include "config_for_unittests.h" - #include "page_heap.h" -+#include "system-alloc.h" - #include - #include "base/logging.h" - #include "common.h" - -+DECLARE_int64(tcmalloc_heap_limit_mb); -+ - namespace { - -+static bool HaveSystemRelease = -+ TCMalloc_SystemRelease(TCMalloc_SystemAlloc(kPageSize, NULL, 0), kPageSize); -+ - static void CheckStats(const tcmalloc::PageHeap* ph, - uint64_t system_pages, - uint64_t free_pages, - uint64_t unmapped_pages) { - tcmalloc::PageHeap::Stats stats = ph->stats(); -+ -+ if (!HaveSystemRelease) { -+ free_pages += unmapped_pages; -+ unmapped_pages = 0; -+ } -+ - EXPECT_EQ(system_pages, stats.system_bytes >> kPageShift); - EXPECT_EQ(free_pages, stats.free_bytes >> kPageShift); - EXPECT_EQ(unmapped_pages, stats.unmapped_bytes >> kPageShift); -@@ -36,7 +48,7 @@ - CheckStats(ph, 256, 128, 0); - - // Unmap deleted span 's2' -- EXPECT_EQ(s2_len, ph->ReleaseAtLeastNPages(1)); -+ ph->ReleaseAtLeastNPages(1); - CheckStats(ph, 256, 0, 128); - - // Delete span 's1' -@@ -46,10 +58,99 @@ - delete ph; - } - -+static void TestPageHeap_Limit() { -+ tcmalloc::PageHeap* ph = new tcmalloc::PageHeap(); -+ -+ CHECK_EQ(kMaxPages, 1 << (20 - kPageShift)); -+ -+ // We do not know much is taken from the system for other purposes, -+ // so we detect the proper limit: -+ { -+ FLAGS_tcmalloc_heap_limit_mb = 1; -+ tcmalloc::Span* s = NULL; -+ while((s = ph->New(kMaxPages)) == NULL) { -+ FLAGS_tcmalloc_heap_limit_mb++; -+ } -+ FLAGS_tcmalloc_heap_limit_mb += 9; -+ ph->Delete(s); -+ // We are [10, 11) mb from the limit now. -+ } -+ -+ // Test AllocLarge and GrowHeap first: -+ { -+ tcmalloc::Span * spans[10]; -+ for (int i=0; i<10; ++i) { -+ spans[i] = ph->New(kMaxPages); -+ EXPECT_NE(spans[i], NULL); -+ } -+ EXPECT_EQ(ph->New(kMaxPages), NULL); -+ -+ for (int i=0; i<10; i += 2) { -+ ph->Delete(spans[i]); -+ } -+ -+ tcmalloc::Span *defragmented = ph->New(5 * kMaxPages); -+ -+ if (HaveSystemRelease) { -+ // EnsureLimit should release deleted normal spans -+ EXPECT_NE(defragmented, NULL); -+ EXPECT_TRUE(ph->CheckExpensive()); -+ ph->Delete(defragmented); -+ } -+ else -+ { -+ EXPECT_EQ(defragmented, NULL); -+ EXPECT_TRUE(ph->CheckExpensive()); -+ } -+ -+ for (int i=1; i<10; i += 2) { -+ ph->Delete(spans[i]); -+ } -+ } -+ -+ // Once again, testing small lists this time (twice smaller spans): -+ { -+ tcmalloc::Span * spans[20]; -+ for (int i=0; i<20; ++i) { -+ spans[i] = ph->New(kMaxPages >> 1); -+ EXPECT_NE(spans[i], NULL); -+ } -+ // one more half size allocation may be possible: -+ tcmalloc::Span * lastHalf = ph->New(kMaxPages >> 1); -+ EXPECT_EQ(ph->New(kMaxPages >> 1), NULL); -+ -+ for (int i=0; i<20; i += 2) { -+ ph->Delete(spans[i]); -+ } -+ -+ for(Length len = kMaxPages >> 2; len < 5 * kMaxPages; len = len << 1) -+ { -+ if(len <= kMaxPages >> 1 || HaveSystemRelease) { -+ tcmalloc::Span *s = ph->New(len); -+ EXPECT_NE(s, NULL); -+ ph->Delete(s); -+ } -+ } -+ -+ EXPECT_TRUE(ph->CheckExpensive()); -+ -+ for (int i=1; i<20; i += 2) { -+ ph->Delete(spans[i]); -+ } -+ -+ if (lastHalf != NULL) { -+ ph->Delete(lastHalf); -+ } -+ } -+ -+ delete ph; -+} -+ - } // namespace - - int main(int argc, char **argv) { - TestPageHeap_Stats(); -+ TestPageHeap_Limit(); - printf("PASS\n"); - return 0; - } -diff -urP gperftools-2.0/src/tests/profiler_unittest.sh /home/spot/gperftools/src/tests/profiler_unittest.sh ---- gperftools-2.0/src/tests/profiler_unittest.sh 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/tests/profiler_unittest.sh 2013-03-01 14:25:38.476366833 -0500 -@@ -85,6 +85,14 @@ - # It's meaningful to the profiler, so make sure we know its state - unset CPUPROFILE - -+# Some output/logging in the profiler can cause issues when running the unit -+# tests. For example, logging a warning when the profiler is detected as being -+# present but no CPUPROFILE is specified in the environment. Especially when -+# we are checking for a silent run or specific timing constraints are being -+# checked. So set the env variable signifying that we are running in a unit -+# test environment. -+PERFTOOLS_UNITTEST=1 -+ - rm -rf "$TMPDIR" - mkdir "$TMPDIR" || exit 2 - -@@ -95,11 +103,11 @@ - } - - # Takes two filenames representing profiles, with their executable scripts, --# and a multiplier, and verifies that the 'contentful' functions in --# each profile take the same time (possibly scaled by the given --# multiplier). It used to be "same" meant within 50%, after adding an --# noise-reducing X units to each value. But even that would often --# spuriously fail, so now it's "both non-zero". We're pretty forgiving. -+# and a multiplier, and verifies that the 'contentful' functions in each -+# profile take the same time (possibly scaled by the given multiplier). It -+# used to be "same" meant within 50%, after adding an noise-reducing X units -+# to each value. But even that would often spuriously fail, so now it's -+# "both non-zero". We're pretty forgiving. - VerifySimilar() { - prof1="$TMPDIR/$1" - exec1="$2" -diff -urP gperftools-2.0/src/tests/tcmalloc_unittest.cc /home/spot/gperftools/src/tests/tcmalloc_unittest.cc ---- gperftools-2.0/src/tests/tcmalloc_unittest.cc 2012-02-03 14:18:23.000000000 -0500 -+++ /home/spot/gperftools/src/tests/tcmalloc_unittest.cc 2013-03-01 14:25:38.476366833 -0500 -@@ -92,6 +92,7 @@ - #include "gperftools/malloc_extension.h" - #include "gperftools/tcmalloc.h" - #include "thread_cache.h" -+#include "system-alloc.h" - #include "tests/testutil.h" - - // Windows doesn't define pvalloc and a few other obsolete unix -@@ -579,7 +580,7 @@ - static void TestCalloc(size_t n, size_t s, bool ok) { - char* p = reinterpret_cast(calloc(n, s)); - if (FLAGS_verbose) -- fprintf(LOGSTREAM, "calloc(%"PRIxS", %"PRIxS"): %p\n", n, s, p); -+ fprintf(LOGSTREAM, "calloc(%" PRIxS ", %" PRIxS "): %p\n", n, s, p); - if (!ok) { - CHECK(p == NULL); // calloc(n, s) should not succeed - } else { -@@ -759,9 +760,10 @@ - CHECK((p % sizeof(void*)) == 0); - CHECK((p % sizeof(double)) == 0); - -- // Must have 16-byte alignment for large enough objects -- if (size >= 16) { -- CHECK((p % 16) == 0); -+ // Must have 16-byte (or 8-byte in case of -DTCMALLOC_ALIGN_8BYTES) -+ // alignment for large enough objects -+ if (size >= kMinAlign) { -+ CHECK((p % kMinAlign) == 0); - } - } - for (int i = 0; i < kNum; i++) { -@@ -834,20 +836,26 @@ - - } - -+static bool HaveSystemRelease = -+ TCMalloc_SystemRelease(TCMalloc_SystemAlloc(kPageSize, NULL, 0), kPageSize); -+ - static void TestRanges() { - static const int MB = 1048576; - void* a = malloc(MB); - void* b = malloc(MB); -+ base::MallocRange::Type releasedType = -+ HaveSystemRelease ? base::MallocRange::UNMAPPED : base::MallocRange::FREE; -+ - CheckRangeCallback(a, base::MallocRange::INUSE, MB); - CheckRangeCallback(b, base::MallocRange::INUSE, MB); - free(a); - CheckRangeCallback(a, base::MallocRange::FREE, MB); - CheckRangeCallback(b, base::MallocRange::INUSE, MB); - MallocExtension::instance()->ReleaseFreeMemory(); -- CheckRangeCallback(a, base::MallocRange::UNMAPPED, MB); -+ CheckRangeCallback(a, releasedType, MB); - CheckRangeCallback(b, base::MallocRange::INUSE, MB); - free(b); -- CheckRangeCallback(a, base::MallocRange::UNMAPPED, MB); -+ CheckRangeCallback(a, releasedType, MB); - CheckRangeCallback(b, base::MallocRange::FREE, MB); - } - -@@ -865,6 +873,9 @@ - // messes up all the equality tests here. I just disable the - // teset in this mode. TODO(csilvers): get it to work for debugalloc? - #ifndef DEBUGALLOCATION -+ -+ if(!HaveSystemRelease) return; -+ - const double old_tcmalloc_release_rate = FLAGS_tcmalloc_release_rate; - FLAGS_tcmalloc_release_rate = 0; - -diff -urP gperftools-2.0/src/thread_cache.cc /home/spot/gperftools/src/thread_cache.cc ---- gperftools-2.0/src/thread_cache.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/thread_cache.cc 2013-03-01 14:25:38.720366824 -0500 -@@ -63,11 +63,9 @@ - int ThreadCache::thread_heap_count_ = 0; - ThreadCache* ThreadCache::next_memory_steal_ = NULL; - #ifdef HAVE_TLS --__thread ThreadCache* ThreadCache::threadlocal_heap_ --# ifdef HAVE___ATTRIBUTE__ -- __attribute__ ((tls_model ("initial-exec"))) --# endif -- ; -+__thread ThreadCache::ThreadLocalData ThreadCache::threadlocal_data_ -+ ATTR_INITIAL_EXEC -+ = {0, 0}; - #endif - bool ThreadCache::tsd_inited_ = false; - pthread_key_t ThreadCache::heap_key_; -@@ -379,7 +377,8 @@ - perftools_pthread_setspecific(heap_key_, heap); - #ifdef HAVE_TLS - // Also keep a copy in __thread for faster retrieval -- threadlocal_heap_ = heap; -+ threadlocal_data_.heap = heap; -+ SetMinSizeForSlowPath(kMaxSize + 1); - #endif - heap->in_setspecific_ = false; - } -@@ -414,7 +413,8 @@ - perftools_pthread_setspecific(heap_key_, NULL); - #ifdef HAVE_TLS - // Also update the copy in __thread -- threadlocal_heap_ = NULL; -+ threadlocal_data_.heap = NULL; -+ SetMinSizeForSlowPath(0); - #endif - heap->in_setspecific_ = false; - if (GetThreadHeap() == heap) { -@@ -434,7 +434,8 @@ - if (ptr == NULL) return; - #ifdef HAVE_TLS - // Prevent fast path of GetThreadHeap() from returning heap. -- threadlocal_heap_ = NULL; -+ threadlocal_data_.heap = NULL; -+ SetMinSizeForSlowPath(0); - #endif - DeleteCache(reinterpret_cast(ptr)); - } -diff -urP gperftools-2.0/src/thread_cache.h /home/spot/gperftools/src/thread_cache.h ---- gperftools-2.0/src/thread_cache.h 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/thread_cache.h 2013-03-01 14:25:37.965366851 -0500 -@@ -75,6 +75,12 @@ - - class ThreadCache { - public: -+#ifdef HAVE_TLS -+ enum { have_tls = true }; -+#else -+ enum { have_tls = false }; -+#endif -+ - // All ThreadCache objects are kept in a linked list (for stats collection) - ThreadCache* next_; - ThreadCache* prev_; -@@ -106,16 +112,21 @@ - static ThreadCache* GetThreadHeap(); - static ThreadCache* GetCache(); - static ThreadCache* GetCacheIfPresent(); -+ static ThreadCache* GetCacheWhichMustBePresent(); - static ThreadCache* CreateCacheIfNecessary(); - static void BecomeIdle(); -+ static size_t MinSizeForSlowPath(); -+ static void SetMinSizeForSlowPath(size_t size); -+ -+ static bool IsFastPathAllowed() { return MinSizeForSlowPath() != 0; } - - // Return the number of thread heaps in use. - static inline int HeapsInUse(); - -- // Writes to total_bytes the total number of bytes used by all thread heaps. -- // class_count must be an array of size kNumClasses. Writes the number of -- // items on the corresponding freelist. class_count may be NULL. -- // The storage of both parameters must be zero intialized. -+ // Adds to *total_bytes the total number of bytes used by all thread heaps. -+ // Also, if class_count is not NULL, it must be an array of size kNumClasses, -+ // and this function will increment each element of class_count by the number -+ // of items in all thread-local freelists of the corresponding size class. - // REQUIRES: Static::pageheap_lock is held. - static void GetThreadStats(uint64_t* total_bytes, uint64_t* class_count); - -@@ -251,12 +262,24 @@ - // Since we don't really use dlopen in google code -- and using dlopen - // on a malloc replacement is asking for trouble in any case -- that's - // a good tradeoff for us. -+#ifdef HAVE___ATTRIBUTE__ -+#define ATTR_INITIAL_EXEC __attribute__ ((tls_model ("initial-exec"))) -+#else -+#define ATTR_INITIAL_EXEC -+#endif -+ - #ifdef HAVE_TLS -- static __thread ThreadCache* threadlocal_heap_ --# ifdef HAVE___ATTRIBUTE__ -- __attribute__ ((tls_model ("initial-exec"))) --# endif -- ; -+ struct ThreadLocalData { -+ ThreadCache* heap; -+ // min_size_for_slow_path is 0 if heap is NULL or kMaxSize + 1 otherwise. -+ // The latter is the common case and allows allocation to be faster -+ // than it would be otherwise: typically a single branch will -+ // determine that the requested allocation is no more than kMaxSize -+ // and we can then proceed, knowing that global and thread-local tcmalloc -+ // state is initialized. -+ size_t min_size_for_slow_path; -+ }; -+ static __thread ThreadLocalData threadlocal_data_ ATTR_INITIAL_EXEC; - #endif - - // Thread-specific key. Initialization here is somewhat tricky -@@ -373,12 +396,23 @@ - #ifdef HAVE_TLS - // __thread is faster, but only when the kernel supports it - if (KernelSupportsTLS()) -- return threadlocal_heap_; -+ return threadlocal_data_.heap; - #endif - return reinterpret_cast( - perftools_pthread_getspecific(heap_key_)); - } - -+inline ThreadCache* ThreadCache::GetCacheWhichMustBePresent() { -+#ifdef HAVE_TLS -+ ASSERT(threadlocal_data_.heap); -+ return threadlocal_data_.heap; -+#else -+ ASSERT(perftools_pthread_getspecific(heap_key_)); -+ return reinterpret_cast( -+ perftools_pthread_getspecific(heap_key_)); -+#endif -+} -+ - inline ThreadCache* ThreadCache::GetCache() { - ThreadCache* ptr = NULL; - if (!tsd_inited_) { -@@ -398,6 +432,20 @@ - return GetThreadHeap(); - } - -+inline size_t ThreadCache::MinSizeForSlowPath() { -+#ifdef HAVE_TLS -+ return threadlocal_data_.min_size_for_slow_path; -+#else -+ return 0; -+#endif -+} -+ -+inline void ThreadCache::SetMinSizeForSlowPath(size_t size) { -+#ifdef HAVE_TLS -+ threadlocal_data_.min_size_for_slow_path = size; -+#endif -+} -+ - } // namespace tcmalloc - - #endif // TCMALLOC_THREAD_CACHE_H_ -diff -urP gperftools-2.0/src/windows/port.cc /home/spot/gperftools/src/windows/port.cc ---- gperftools-2.0/src/windows/port.cc 2012-02-02 16:36:23.000000000 -0500 -+++ /home/spot/gperftools/src/windows/port.cc 2013-03-01 14:25:38.029366849 -0500 -@@ -218,6 +218,11 @@ - // ----------------------------------------------------------------------- - // These functions replace system-alloc.cc - -+// The current system allocator declaration (unused here) -+SysAllocator* sys_alloc = NULL; -+// Number of bytes taken from system. -+size_t TCMalloc_SystemTaken = 0; -+ - // This is mostly like MmapSysAllocator::Alloc, except it does these weird - // munmap's in the middle of the page, which is forbidden in windows. - extern void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, -@@ -243,6 +248,8 @@ - if (result == NULL) - return NULL; - -+ TCMalloc_SystemTaken += size + extra; -+ - // Adjust the return memory so it is aligned - uintptr_t ptr = reinterpret_cast(result); - size_t adjust = 0; -@@ -254,8 +261,9 @@ - return reinterpret_cast(ptr); - } - --void TCMalloc_SystemRelease(void* start, size_t length) { -+bool TCMalloc_SystemRelease(void* start, size_t length) { - // TODO(csilvers): should I be calling VirtualFree here? -+ return false; - } - - bool RegisterSystemAllocator(SysAllocator *allocator, int priority) { -@@ -266,9 +274,6 @@ - // We don't dump stats on windows, right now - } - --// The current system allocator --SysAllocator* sys_alloc = NULL; -- - - // ----------------------------------------------------------------------- - // These functions rework existing functions of the same name in the -diff -urP gperftools-2.0/src/windows/TODO /home/spot/gperftools/src/windows/TODO ---- gperftools-2.0/src/windows/TODO 1969-12-31 19:00:00.000000000 -0500 -+++ /home/spot/gperftools/src/windows/TODO 2013-03-01 14:25:38.027366849 -0500 -@@ -0,0 +1,86 @@ -+* Get heap-profile-table.cc using DeleteMatchingFiles -+* Get heap-profile-table.cc using FillProcSelfMaps, DumpProcSelfMaps -+* Play around with ExperimentalGetStackTrace -+* Support the windows-level memory-allocation functions? See -+ /home/build/googleclient/earth/client/tools/memorytracking/client/memorytrace/src/memorytrace.cpp -+ /home/build/googleclient/total_recall/common/sitestep/* -+ http://www.internals.com/articles/apispy/apispy.htm -+ http://www.wheaty.net/APISPY32.zip -+* Verify /proc/xxx/maps: -+ http://www.geocities.com/wah_java_dotnet/procmap/index.html -+* Figure out how to edit the executable IAT so tcmalloc.dll is loaded first -+* Use QueryPerformanceCounter instead of GetTickCount() (also for sparsehash) -+ -+---- -+More info on windows-level memory-allocation functions: -+ C runtime malloc -+ LocalAlloc -+ GlobalAlloc -+ HeapAlloc -+ VirtualAlloc -+ mmap stuff -+ -+malloc, LocalAlloc and GlobalAlloc call HeapAlloc, which calls -+VirtualAlloc when needed, which calls VirtualAllocEx (the __sbrk equiv?) -+ -+siggi sez: If you want to do a generic job, you probably need to -+preserve the semantics of all of these Win32 calls: -+ Heap32First -+ Heap32ListFirst -+ Heap32ListNext -+ Heap32Next -+ HeapAlloc -+ HeapCompact -+ HeapCreate -+ HeapCreateTagsW -+ HeapDestroy -+ HeapExtend -+ HeapFree -+ HeapLock -+ HeapQueryInformation -+ HeapQueryTagW -+ HeapReAlloc -+ HeapSetInformation -+ HeapSize -+ HeapSummary -+ HeapUnlock -+ HeapUsage -+ HeapValidate -+ HeapWalk -+ -+kernel32.dll export functions and nt.dll export functions: -+ http://www.shorthike.com/svn/trunk/tools_win32/dm/lib/kernel32.def -+ http://undocumented.ntinternals.net/ -+ -+You can edit the executable IAT to have the patching DLL be the -+first one loaded. -+ -+Most complete way to intercept system calls is patch the functions -+(not the IAT). -+ -+Microsoft has somee built-in routines for heap-checking: -+ http://support.microsoft.com/kb/268343 -+ -+---- -+Itimer replacement: -+ http://msdn2.microsoft.com/en-us/library/ms712713.aspx -+ -+---- -+Changes I've had to make to the project file: -+ -+0) When creating the project file, click on "no autogenerated files" -+ -+--- For each project: -+1) Alt-F7 -> General -> [pulldown "all configurations" ] -> Output Directory -> $(SolutionDir)$(ConfigurationName) -+2) Alt-F7 -> General -> [pulldown "all configurations" ] -> Intermediate Directory -> $(ConfigurationName) -+ -+--- For each .cc file: -+1) Alt-F7 -> C/C++ -> General -> [pulldown "all configurations"] -> Additional Include Directives --> src/windows + src/ -+2) Alt-F7 -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded, debug/release, DLL or not -+ -+--- For DLL: -+3) Alt-F7 -> Linker -> Input -> [pulldown "all configurations" ] -> Module Definition File -> src\windows\vc7and8.def -+--- For binaries depending on a DLL: -+3) Right-click on project -> Project Dependencies -> [add dll] -+--- For static binaries (not depending on a DLL) -+3) Alt-F7 -> C/C++ -> Command Line -> [pulldown "all configurations"] -> /D PERFTOOLS_DLL_DECL= diff --git a/gperftools.spec b/gperftools.spec deleted file mode 100644 index 27d5688..0000000 --- a/gperftools.spec +++ /dev/null @@ -1,317 +0,0 @@ -# This package used to be called "google-perftools", but it was renamed on 2012-02-03. - -%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{name}-%{version}} - -Name: gperftools -Version: 2.4 -Release: 5%{?dist} -License: BSD -Group: Development/Tools -Summary: Very fast malloc and performance analysis tools -URL: http://code.google.com/p/gperftools/ -Source0: https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/%{name}-%{version}.tar.gz -# https://code.google.com/p/gperftools/issues/detail?id=693 -Patch0: gperftools-arm-has-futex.patch -ExcludeArch: s390 s390x -%ifnarch ppc %{power64} -BuildRequires: libunwind-devel -%endif -Requires: gperftools-devel = %{version}-%{release} -Requires: pprof = %{version}-%{release} - -%description -Perf Tools is a collection of performance analysis tools, including a -high-performance multi-threaded malloc() implementation that works -particularly well with threads and STL, a thread-friendly heap-checker, -a heap profiler, and a cpu-profiler. - -This is a metapackage which pulls in all of the gperftools (and pprof) -binaries, libraries, and development headers, so that you can use them. - -%package devel -Summary: Development libraries and headers for gperftools -Group: Development/Libraries -Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Provides: google-perftools-devel = %{version}-%{release} -Obsoletes: google-perftools-devel < 2.0 - -%description devel -Libraries and headers for developing applications that use gperftools. - -%package libs -Summary: Libraries provided by gperftools -Provides: google-perftools-libs = %{version}-%{release} -Obsoletes: google-perftools-libs < 2.0 - -%description libs -Libraries provided by gperftools, including libtcmalloc and libprofiler. - -%package -n pprof -Summary: CPU and Heap Profiler tool -Requires: gv, graphviz -BuildArch: noarch -Provides: google-perftools = %{version}-%{release} -Obsoletes: google-perftools < 2.0 - -%description -n pprof -Pprof is a heap and CPU profiler tool, part of the gperftools suite. - -%prep -%setup -q -%patch0 -p1 -b .armfutex - -# Fix end-of-line encoding -sed -i 's/\r//' README_windows.txt - -# No need to have exec permissions on source code -chmod -x src/*.h src/*.cc - -%build -CFLAGS=`echo $RPM_OPT_FLAGS -fno-strict-aliasing -Wno-unused-local-typedefs -DTCMALLOC_LARGE_PAGES | sed -e 's|-fexceptions||g'` -CXXFLAGS=`echo $RPM_OPT_FLAGS -fno-strict-aliasing -Wno-unused-local-typedefs -DTCMALLOC_LARGE_PAGES | sed -e 's|-fexceptions||g'` -%configure --disable-static - -# Bad rpath! -sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool -sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool -# Can't build with smp_mflags -make - -%install -make DESTDIR=%{buildroot} docdir=%{_pkgdocdir}/ install -find %{buildroot} -type f -name "*.la" -exec rm -f {} ';' - -# Delete useless files -rm -rf %{buildroot}%{_pkgdocdir}/INSTALL - -%check -# http://code.google.com/p/google-perftools/issues/detail?id=153 -%ifnarch ppc -# Their test suite is almost always broken. -# LD_LIBRARY_PATH=./.libs make check -%endif - -%post libs -p /sbin/ldconfig -%postun libs -p /sbin/ldconfig - -%files - -%files -n pprof -%{_bindir}/pprof -%{_mandir}/man1/* - -%files devel -%{_pkgdocdir}/ -%{_includedir}/google/ -%{_includedir}/gperftools/ -%{_libdir}/*.so -%{_libdir}/pkgconfig/*.pc - -%files libs -%{_libdir}/*.so.* - -%changelog -* Wed Jun 17 2015 Fedora Release Engineering - 2.4-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue Jun 9 2015 Tom Callaway - 2.4-4 -- fix modern futex handling (thanks to Paolo Bonzini) - -* Mon Jun 1 2015 Tom Callaway - 2.4-3 -- enable futex for ARM - -* Sat May 02 2015 Kalev Lember - 2.4-2 -- Rebuilt for GCC 5 C++11 ABI change - -* Fri Mar 27 2015 Tom Callaway 2.4-1 -- update to 2.4 - -* Sat Aug 16 2014 Fedora Release Engineering - 2.2.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Thu Jul 10 2014 Dan Horák - 2.2.1-1 -- Update to new upstream 2.2.1 release -- Fixes build on ppc arches - -* Sat Jun 07 2014 Fedora Release Engineering - 2.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed Jun 4 2014 Peter Robinson 2.2-1 -- Update to new upstream 2.2 release -- Add support for new arches (aarch64, ppc64le, mips) - -* Tue May 13 2014 Jaromir Capik - 2.1-5 -- Replacing ppc64 with the power64 macro (#1077632) - -* Sat Jan 4 2014 Tom Callaway - 2.1-4 -- re-enable FORTIFY_SOURCE - -* Fri Dec 6 2013 Ville Skyttä - 2.1-3 -- Install docs to %%{_pkgdocdir} where available (#993798), include NEWS. -- Fix bogus date in %%changelog. - -* Sat Aug 03 2013 Petr Pisar - 2.1-2 -- Perl 5.18 rebuild - -* Wed Jul 31 2013 Tom Callaway - 2.1-1 -- update to 2.1 (fixes arm) -- disable -fexceptions, as that breaks things on el6, possibly arm - -* Wed Jul 17 2013 Petr Pisar - 2.0-12 -- Perl 5.18 rebuild - -* Tue Jun 4 2013 Tom Callaway - 2.0-11 -- pass -fno-strict-aliasing -- create "gperftools" metapackage. -- update to svn r218 (cleanups, some ARM fixes) - -* Thu Mar 14 2013 Dan Horák - 2.0-10 -- build on ppc64 as well - -* Fri Mar 1 2013 Tom Callaway - 2.0-9 -- update to svn r190 (because google can't make releases) - -* Thu Feb 14 2013 Fedora Release Engineering - 2.0-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Fri Aug 3 2012 Tom Callaway - 2.0-7 -- fix compile with glibc 2.16 - -* Thu Jul 19 2012 Fedora Release Engineering - 2.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Mon Feb 20 2012 Peter Robinson - 2.0-5 -- Enable ARM as a supported arch - -* Thu Feb 16 2012 Tom Callaway - 2.0-4 -- fix bug in -devel Requires - -* Tue Feb 14 2012 Tom Callaway - 2.0-3 -- pprof doesn't actually need gperftools-libs - -* Tue Feb 14 2012 Tom Callaway - 2.0-2 -- rework package so that pprof is a noarch subpackage, while still - enforcing the ExclusiveArch for the libs - -* Tue Feb 14 2012 Tom Callaway - 2.0-1 -- rename to gperftools -- update to 2.0 - -* Wed Jan 4 2012 Tom Callaway - 1.9.1-1 -- update to 1.9.1 - -* Mon Oct 24 2011 Tom Callaway - 1.8.3-3 -- split libraries out into subpackage to minimize dependencies - -* Wed Sep 21 2011 Remi Collet - 1.8.3-2 -- rebuild for new libunwind - -* Tue Aug 30 2011 Tom Callaway - 1.8.3-1 -- update to 1.8.3 - -* Mon Aug 22 2011 Tom Callaway - 1.8.2-1 -- update to 1.8.2 - -* Thu Jul 28 2011 Tom Callaway - 1.8.1-1 -- update to 1.8.1 - -* Mon Jul 18 2011 Tom Callaway - 1.8-1 -- update to 1.8 - -* Wed Jun 29 2011 Tom Callaway - 1.7-4 -- fix tcmalloc compile against current glibc, fix derived from: - http://src.chromium.org/viewvc/chrome?view=rev&revision=89800 - -* Thu May 12 2011 Tom Callaway - 1.7-3 -- add Requires: graphviz, gv for pprof - -* Fri Mar 11 2011 Dan Horák - 1.7-2 -- switch to ExclusiveArch - -* Fri Feb 18 2011 Tom Callaway - 1.7-1 -- update to 1.7 - -* Tue Feb 08 2011 Fedora Release Engineering - 1.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Thu Dec 2 2010 Tom "spot" Callaway - 1.6-2 -- fix pprof to work properly with jemalloc (bz 657118) - -* Fri Aug 6 2010 Tom "spot" Callaway - 1.6-1 -- update to 1.6 - -* Wed Jan 20 2010 Tom "spot" Callaway - 1.5-1 -- update to 1.5 -- disable broken test suite - -* Sat Sep 12 2009 Tom "spot" Callaway - 1.4-1 -- update to 1.4 - -* Fri Jul 24 2009 Fedora Release Engineering - 1.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Thu Jul 2 2009 Tom "spot" Callaway - 1.3-2 -- disable tests for ppc, upstream ticket #153 - -* Thu Jul 2 2009 Tom "spot" Callaway - 1.3-1 -- update to 1.3 - -* Wed May 20 2009 Tom "spot" Callaway - 1.2-1 -- update to 1.2 - -* Tue Feb 24 2009 Fedora Release Engineering - 0.99.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Mon Sep 22 2008 Tom "spot" Callaway - 0.99.1-1 -- update to 0.99.1 -- previous patches in 0.98-1 were taken upstream - -* Mon Aug 25 2008 Tom "spot" Callaway - 0.98-1 -- update to 0.98 -- fix linuxthreads.c compile (upstream issue 74) -- fix ppc compile (upstream issue 75) -- enable ppc - -* Tue Feb 19 2008 Fedora Release Engineering - 0.95-4 -- Autorebuild for GCC 4.3 - -* Tue Feb 19 2008 Tom "spot" Callaway 0.95-3 -- re-disable ppc/ppc64 - -* Tue Feb 19 2008 Tom "spot" Callaway 0.95-2 -- ppc/ppc64 doesn't have libunwind - -* Tue Feb 19 2008 Tom "spot" Callaway 0.95-1 -- 0.95 (all patches taken upstream) -- enable ppc support -- workaround broken ptrace header (no typedef for u32) - -* Fri Jan 4 2008 Tom "spot" Callaway 0.94.1-1 -- bump to 0.94.1 -- fix for gcc4.3 -- fix unittest link issue - -* Thu Aug 23 2007 Tom "spot" Callaway 0.93-1 -- upstream merged my patch! -- rebuild for BuildID - -* Wed Aug 1 2007 Tom "spot" Callaway 0.92-1 -- bump to 0.92 - -* Thu May 17 2007 Tom "spot" Callaway 0.91-3.1 -- excludearch ppc64 - -* Sun Apr 29 2007 Tom "spot" Callaway 0.91-3 -- The tests work fine for me locally, but some of them fail inside mock. - -* Sun Apr 29 2007 Tom "spot" Callaway 0.91-2 -- no support for ppc yet - -* Mon Apr 23 2007 Tom "spot" Callaway 0.91-1 -- alright, lets see if this works now. - -* Wed Oct 12 2005 Tom "spot" Callaway 0.3-2 -- change group to Development/Tools - -* Mon Oct 10 2005 Tom "spot" Callaway 0.3-1 -- initial package for Fedora Extras diff --git a/sources b/sources deleted file mode 100644 index c6b369a..0000000 --- a/sources +++ /dev/null @@ -1 +0,0 @@ -2171cea3bbe053036fb5d5d25176a160 gperftools-2.4.tar.gz