- Add ppc64-fix-367fd5731a8c68225cb870aa656ea0ce677fe040.patch
in order to address power targets.
- Update to version 2.7:
* bug in span stats printing introduced by new scalable page heap
change was fixed.
* Christoph Müllner has contributed couple warnings fixes and
initial support for aarch64_ilp32 architecture.
* Ben Dang contributed documentation fix for heap checker.
* Fabrice Fontaine contributed fixed for linking benchmarks
with --disable-static.
* Holy Wu has added sized deallocation unit tests.
* Holy Wu has enabled support of sized deallocation (c++14)
on recent MSVC.
* Holy Wu has fixed MSVC build in WIN32_OVERRIDE_ALLOCATORS
mode. This closed issue #716.
* Holy Wu has contributed cleanup of config.h used on windows.
* Mao Huang has contributed couple simple tcmalloc changes from
chromium code base. Making our tcmalloc forks a tiny bit closer.
* issue #946 that caused compilation failures on some Linux
clang installations has been fixed. Much thanks to github
user htuch for helping to diagnose issue and proposing a fix.
* Tulio Magno Quites Machado Filho has contributed build-time
fix for PPC (for problem introduced in one of commits
since RC).
- Add gcc-dont-clobber-rsp.patch (bsc#1121265).
- Remove ucontext.patch, gperftools-s390.patch
and gperftools-aarch64.patch patches.
OBS-URL: https://build.opensuse.org/request/show/682171
OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gperftools?expand=0&rev=46
- gperftools 2.5, available 12 March 2016.
See https://github.com/gperftools/gperftools/releases
* Bryan Chan has contributed s390x support
* stacktrace capturing via libgcc's _Unwind_Backtrace was implemented
(for architectures with missing or broken libunwind).
* "emergency malloc" was implemented. Which unbreaks recursive calls
to malloc/free from stacktrace capturing functions (such us glib'c
backtrace() or libunwind on arm). It is enabled by
--enable-emergency-malloc configure flag or by default on arm when
--enable-stacktrace-via-backtrace is given. It is another fix for a
number common issues people had on platforms with missing or broken
libunwind.
* C++14 sized-deallocation is now supported (on gcc 5 and recent
clangs). It is off by default and can be enabled at configure time
via --enable-sized-delete. On GNU/Linux it can also be enabled at
run-time by either TCMALLOC_ENABLE_SIZED_DELETE environment variable
or by defining tcmalloc_sized_delete_enabled function which should
return 1 to enable it.
* we've lowered default value of transfer batch size to 512. Previous
value (bumped up in 2.1) was too high and caused performance
regression for some users. 512 should still give us performance
boost for workloads that need higher transfer batch size while not
penalizing other workloads too much.
* Brian Silverman's patch finally stopped arming profiling timer
unless profiling is started.
* Andrew Morrow has contributed support for obtaining cache size of the
current thread and softer idling (for use in MongoDB).
* we've implemented few minor performance improvements, particularly
on malloc fast-path.
* issue that caused spurious profiler_unittest.sh failures was fixed.
OBS-URL: https://build.opensuse.org/request/show/378351
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gperftools?expand=0&rev=16
- gperftools 2.4, available 10 Jan 2015.
Skipped version 2.3, release 7 Dec 2014.
Changes for version 2.4
* enabled aggressive decommit option by default. It was found to
significantly improve memory fragmentation with negligible impact
on performance. (Thanks to investigation work performed by Adhemerval
Zanella)
* added ./configure flags for tcmalloc pagesize and tcmalloc allocation
alignment. Larger page sizes have been reported to improve performance
occasionally. (Patch by Raphael Moreira Zinsly)
* sped-up hot-path of malloc/free. By about 5% on static library and
about 10% on shared library. Mainly due to more efficient checking
of malloc hooks.
* improved accuracy of stacktrace capturing in cpu profiler (due to
issue found by Arun Sharma). As part of that issue pprof's handling
of cpu profiles was also improved.
- Removed missing_includes.patch; incorporated upstream.
old: devel:libraries:c_c++/gperftools
new: home:ganglia:perftools-2.4/gperftools rev 3
Index: gperftools.changes
===================================================================
--- gperftools.changes (revision 26)
+++ gperftools.changes (revision 3)
@@ -1,4 +1,60 @@
-------------------------------------------------------------------
+Mon Jan 10 16:30:24 UTC 2015 - cgardner@suse.com
+
+- gperftools 2.4, available 10 Jan 2015.
+ Skipped version 2.3, release 7 Dec 2014. 2.3 changes included:
+ * ( issue 631 ) fixed debugallocation miscompilation on mmap-less
+ platforms (courtesy of user iamxujian)
+ * ( issue 630 ) reference to wrong PROFILE (vs. correct CPUPROFILE)
+ environment variable was fixed (courtesy of WenSheng He)
+ * pprof now has option to display stack traces in output for heap
+ checker (courtesy of Michael Pasieka)
+ * ( issue 636 ) pprof web command now works on mingw
+ * ( issue 635 ) pprof now handles library paths that contain spaces
+ (courtesy of user mich...@sebesbefut.com)
+ * ( issue 637 ) pprof now has an option to not strip template
+ arguments (patch by jiakai)
+ * ( issue 644 ) possible out-of-bounds access in GetenvBeforeMain
+ was fixed (thanks to user abyss.7)
+ * ( issue 641 ) pprof now has an option --show_addresses (thanks to
+ user yurivict). New option prints instruction address in addition
+ to function name in stack traces
+ * ( issue 646 ) pprof now works around some issues of addr2line
+ reportedly when DWARF v4 format is used (patch by Adam McNeeney)
+ * ( issue 645 ) heap profiler exit message now includes remaining
+ memory allocated info (patch by user yurivict)
+ * pprof code that finds location of /proc/pid/maps in cpu profile
+ files is now fixed (patch by Ricardo M. Correia)
+ * ( issue 654 ) pprof now handles "split text segments" feature of
+ Chromium for Android (patch by simonb)
+ * ( issue 655 ) potential deadlock on windows caused by early call
+ to getenv in malloc initialization code was fixed (bug reported
+ and fix proposed by user zndmitry)
+ * incorrect detection of arm 6zk instruction set support
+ (-mcpu=arm1176jzf-s) was fixed. (Reported by pedronavf on old issue-493)
+ * new cpu profiling mode on Linux is now implemented. It sets up separate
+ profiling timers for separate threads. Which improves accuracy of
+ profiling on Linux a lot. It is off by default. And is enabled if both
+ librt.f is loaded and CPUPROFILE_PER_THREAD_TIMERS environment
+ variable is set. But note that all threads need to be registered
+ via ProfilerRegisterThread.
+ Changes for version 2.4~rc
+ * enabled aggressive decommit option by default. It was found to
+ significantly improve memory fragmentation with negligible impact
+ on performance. (Thanks to investigation work performed by Adhemerval
+ Zanella)
+ * added ./configure flags for tcmalloc pagesize and tcmalloc allocation
+ alignment. Larger page sizes have been reported to improve performance
+ occasionally. (Patch by Raphael Moreira Zinsly)
+ * sped-up hot-path of malloc/free. By about 5% on static library and
+ about 10% on shared library. Mainly due to more efficient checking
+ of malloc hooks.
+ * improved accuracy of stacktrace capturing in cpu profiler (due to
+ issue found by Arun Sharma). As part of that issue pprof's handling
+ of cpu profiles was also improved.
+- Removed missing_includes.patch; incorporated upstream.
+
+-------------------------------------------------------------------
Sun Sep 28 18:44:03 UTC 2014 - jengelh@inai.de
- Implement shlib packaging guidelines: split libraries
Index: gperftools.spec
===================================================================
--- gperftools.spec (revision 26)
+++ gperftools.spec (revision 3)
@@ -15,9 +15,8 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
-
Name: gperftools
-Version: 2.2
+Version: 2.4
Release: 0
Summary: Performance Tools for C++
License: BSD-3-Clause
@@ -28,8 +27,6 @@
Patch4: %{name}-fix_docdir.patch
Patch12: %{name}_fix_unassigned_malloc_in_unittest.patch
Patch14: %{name}_gcc46.patch
-#PATCH-FIX-UPSTREAM https://code.google.com/p/gperftools/issues/detail?id=268
-Patch15: missing_includes.patch
BuildRequires: autoconf >= 2.59
BuildRequires: automake
BuildRequires: gcc-c++
@@ -82,7 +79,6 @@
%patch4 -p1
%patch12 -p1
%patch14 -p1
-%patch15 -p1
%build
autoreconf -fi
@@ -109,7 +105,6 @@
%files -n libprofiler0
%defattr(-,root,root)
%_libdir/libprofiler.so.0*
-# %_libdir/libstacktrace.so.0* # libstacktrace.so got removed in 0.96
%files -n libtcmalloc4
%defattr(-,root,root)
@@ -124,8 +119,6 @@
%_includedir/google
%_includedir/gperftools
%_libdir/libprofiler.so
-# %_libdir/libstacktrace.*a # libstacktrace.so got removed in 0.96
-# %_libdir/libstacktrace.so # libstacktrace.so got removed in 0.96
%_libdir/libtcmalloc.so
%_libdir/libtcmalloc_debug.so
%_libdir/libtcmalloc_minimal.so
Index: gperftools-2.4.tar.gz
===================================================================
Binary files gperftools-2.4.tar.gz (revision 3) added
Index: gperftools-2.2.tar.gz
===================================================================
Binary files gperftools-2.2.tar.gz (revision 26) deleted
Index: missing_includes.patch
===================================================================
--- missing_includes.patch (revision 26)
+++ missing_includes.patch (deleted)
@@ -1,415 +0,0 @@
-commit 75b65f96b0bb44d70e0a461a03a3f8c928390283
-Author: Raphael Moreira Zinsly <rzinsly@linux.vnet.ibm.com>
-Date: Tue Apr 8 17:45:13 2014 -0300
-
- PowerPC: stacktrace function refactor and fixes
-
- This patch fixes the stacktrace creating when the function is
- interrupted by a signal. For Linux, the vDSO signal trampoline symbol is
- compared against LR from stack backchain and handled different in that
- case (since the signal trampoline layout a different stack frame).
-
- Because of this extensive change the PowerPC stacktrace code has now
- been refactored to split in Linux and Darwin specific codes.
-
-diff --git a/src/stacktrace_powerpc-darwin-inl.h b/src/stacktrace_powerpc-darwin-inl.h
-new file mode 100644
-index 0000000..c4c2edb
---- /dev/null
-+++ b/src/stacktrace_powerpc-darwin-inl.h
-@@ -0,0 +1,158 @@
-+// Copyright (c) 2007, 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.
-+
-+// ---
-+// Produce stack trace. ABI documentation reference can be found at:
-+// * PowerPC32 ABI: https://www.power.org/documentation/
-+// power-architecture-32-bit-abi-supplement-1-0-embeddedlinuxunified/
-+// * PowerPC64 ABI:
-+// http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK
-+
-+#ifndef BASE_STACKTRACE_POWERPC_INL_H_
-+#define BASE_STACKTRACE_POWERPC_INL_H_
-+// Note: this file is included into stacktrace.cc more than once.
-+// Anything that should only be defined once should be here:
-+
-+#include <stdint.h> // for uintptr_t
-+#include <stdlib.h> // for NULL
-+#include <gperftools/stacktrace.h>
-+
-+// Given a pointer to a stack frame, locate and return the calling
-+// stackframe, or return NULL if no stackframe can be found. Perform sanity
-+// checks (the strictness of which is controlled by the boolean parameter
-+// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned.
-+template<bool STRICT_UNWINDING>
-+static void **NextStackFrame(void **old_sp) {
-+ void **new_sp = (void **) *old_sp;
-+
-+ // Check that the transition from frame pointer old_sp to frame
-+ // pointer new_sp isn't clearly bogus
-+ if (STRICT_UNWINDING) {
-+ // With the stack growing downwards, older stack frame must be
-+ // at a greater address that the current one.
-+ if (new_sp <= old_sp) return NULL;
-+ // Assume stack frames larger than 100,000 bytes are bogus.
-+ if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL;
-+ } else {
-+ // In the non-strict mode, allow discontiguous stack frames.
-+ // (alternate-signal-stacks for example).
-+ if (new_sp == old_sp) return NULL;
-+ // And allow frames upto about 1MB.
-+ if ((new_sp > old_sp)
-+ && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL;
-+ }
-+ if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL;
-+ return new_sp;
-+}
-+
-+// This ensures that GetStackTrace stes up the Link Register properly.
-+void StacktracePowerPCDummyFunction() __attribute__((noinline));
-+void StacktracePowerPCDummyFunction() { __asm__ volatile(""); }
-+#endif // BASE_STACKTRACE_POWERPC_INL_H_
-+
-+// Note: this part of the file is included several times.
-+// Do not put globals below.
-+
-+// The following 4 functions are generated from the code below:
-+// GetStack{Trace,Frames}()
-+// GetStack{Trace,Frames}WithContext()
-+//
-+// These functions take the following args:
-+// void** result: the stack-trace, as an array
-+// int* sizes: the size of each stack frame, as an array
-+// (GetStackFrames* only)
-+// int max_depth: the size of the result (and sizes) array(s)
-+// int skip_count: how many stack pointers to skip before storing in result
-+// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only)
-+int GET_STACK_TRACE_OR_FRAMES {
-+ void **sp;
-+ // Apple OS X uses an old version of gnu as -- both Darwin 7.9.0 (Panther)
-+ // and Darwin 8.8.1 (Tiger) use as 1.38. This means we have to use a
-+ // different asm syntax. I don't know quite the best way to discriminate
-+ // systems using the old as from the new one; I've gone with __APPLE__.
-+ // TODO(csilvers): use autoconf instead, to look for 'as --version' == 1 or 2
-+ __asm__ volatile ("mr %0,r1" : "=r" (sp));
-+
-+ // On PowerPC, the "Link Register" or "Link Record" (LR), is a stack
-+ // entry that holds the return address of the subroutine call (what
-+ // instruction we run after our function finishes). This is the
-+ // same as the stack-pointer of our parent routine, which is what we
-+ // want here. While the compiler will always(?) set up LR for
-+ // subroutine calls, it may not for leaf functions (such as this one).
-+ // This routine forces the compiler (at least gcc) to push it anyway.
-+ StacktracePowerPCDummyFunction();
-+
-+#if IS_STACK_FRAMES
-+ // Note we do *not* increment skip_count here for the SYSV ABI. If
-+ // we did, the list of stack frames wouldn't properly match up with
-+ // the list of return addresses. Note this means the top pc entry
-+ // is probably bogus for linux/ppc (and other SYSV-ABI systems).
-+#else
-+ // The LR save area is used by the callee, so the top entry is bogus.
-+ skip_count++;
-+#endif
-+
-+ int n = 0;
-+ while (sp && n < max_depth) {
-+ // The GetStackFrames routine is called when we are in some
-+ // informational context (the failure signal handler for example).
-+ // Use the non-strict unwinding rules to produce a stack trace
-+ // that is as complete as possible (even if it contains a few
-+ // bogus entries in some rare cases).
-+ void **next_sp = NextStackFrame<!IS_STACK_FRAMES>(sp);
-+
-+ if (skip_count > 0) {
-+ skip_count--;
-+ } else {
-+ // PowerPC has 3 main ABIs, which say where in the stack the
-+ // Link Register is. For DARWIN and AIX (used by apple and
-+ // linux ppc64), it's in sp[2]. For SYSV (used by linux ppc),
-+ // it's in sp[1].
-+#if defined(__PPC64__)
-+ // This check is in case the compiler doesn't define _CALL_AIX/etc.
-+ result[n] = *(sp+2);
-+#elif defined(__linux)
-+ // This check is in case the compiler doesn't define _CALL_SYSV.
-+ result[n] = *(sp+1);
-+#endif
-+
-+#if IS_STACK_FRAMES
-+ if (next_sp > sp) {
-+ sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp;
-+ } else {
-+ // A frame-size of 0 is used to indicate unknown frame size.
-+ sizes[n] = 0;
-+ }
-+#endif
-+ n++;
-+ }
-+ sp = next_sp;
-+ }
-+ return n;
-+}
-diff --git a/src/stacktrace_powerpc-linux-inl.h b/src/stacktrace_powerpc-linux-inl.h
-new file mode 100644
-index 0000000..5d16fa1
---- /dev/null
-+++ b/src/stacktrace_powerpc-linux-inl.h
-@@ -0,0 +1,231 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*-
-+// Copyright (c) 2007, 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: Craig Silverstein
-+//
-+// Produce stack trace. ABI documentation reference can be found at:
-+// * PowerPC32 ABI: https://www.power.org/documentation/
-+// power-architecture-32-bit-abi-supplement-1-0-embeddedlinuxunified/
-+// * PowerPC64 ABI:
-+// http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK
-+
-+#ifndef BASE_STACKTRACE_POWERPC_INL_H_
-+#define BASE_STACKTRACE_POWERPC_INL_H_
-+// Note: this file is included into stacktrace.cc more than once.
-+// Anything that should only be defined once should be here:
-+
-+#include <stdint.h> // for uintptr_t
-+#include <stdlib.h> // for NULL
-+#include <gperftools/stacktrace.h>
-+#include <base/vdso_support.h>
-+
-+#if defined(HAVE_SYS_UCONTEXT_H)
-+#include <sys/ucontext.h>
-+#elif defined(HAVE_UCONTEXT_H)
-+#include <ucontext.h> // for ucontext_t
-+#endif
-+typedef ucontext ucontext_t;
-+
-+// PowerPC64 Little Endian follows BE wrt. backchain, condition register,
-+// and LR save area, so no need to adjust the reading struct.
-+struct layout_ppc {
-+ struct layout_ppc *next;
-+#ifdef __PPC64__
-+ long condition_register;
-+#endif
-+ void *return_addr;
-+};
-+
-+// Signal callbacks are handled by the vDSO symbol:
-+//
-+// * PowerPC64 Linux (arch/powerpc/kernel/vdso64/sigtramp.S):
-+// __kernel_sigtramp_rt64
-+// * PowerPC32 Linux (arch/powerpc/kernel/vdso32/sigtramp.S):
-+// __kernel_sigtramp32
-+// __kernel_sigtramp_rt32
-+//
-+// So a backtrace may need to specially handling if the symbol readed is
-+// the signal trampoline.
-+
-+// Given a pointer to a stack frame, locate and return the calling
-+// stackframe, or return NULL if no stackframe can be found. Perform sanity
-+// checks (the strictness of which is controlled by the boolean parameter
-+// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned.
-+template<bool STRICT_UNWINDING>
-+static layout_ppc *NextStackFrame(layout_ppc *current) {
-+ uintptr_t old_sp = (uintptr_t)(current);
-+ uintptr_t new_sp = (uintptr_t)(current->next);
-+
-+ // Check that the transition from frame pointer old_sp to frame
-+ // pointer new_sp isn't clearly bogus
-+ if (STRICT_UNWINDING) {
-+ // With the stack growing downwards, older stack frame must be
-+ // at a greater address that the current one.
-+ if (new_sp <= old_sp)
-+ return NULL;
-+ // Assume stack frames larger than 100,000 bytes are bogus.
-+ if (new_sp - old_sp > 100000)
-+ return NULL;
-+ } else {
-+ // In the non-strict mode, allow discontiguous stack frames.
-+ // (alternate-signal-stacks for example).
-+ if (new_sp == old_sp)
-+ return NULL;
-+ // And allow frames upto about 1MB.
-+ if ((new_sp > old_sp) && (new_sp - old_sp > 1000000))
-+ return NULL;
-+ }
-+ if (new_sp & (sizeof(void *) - 1))
-+ return NULL;
-+ return current->next;
-+}
-+
-+// This ensures that GetStackTrace stes up the Link Register properly.
-+void StacktracePowerPCDummyFunction() __attribute__((noinline));
-+void StacktracePowerPCDummyFunction() { __asm__ volatile(""); }
-+#endif // BASE_STACKTRACE_POWERPC_INL_H_
-+
-+// Note: this part of the file is included several times.
-+// Do not put globals below.
-+
-+// Load instruction used on top-of-stack get.
-+#if defined(__PPC64__) || defined(__LP64__)
-+# define LOAD "ld"
-+#else
-+# define LOAD "lwz"
-+#endif
-+
-+// The following 4 functions are generated from the code below:
-+// GetStack{Trace,Frames}()
-+// GetStack{Trace,Frames}WithContext()
-+//
-+// These functions take the following args:
-+// void** result: the stack-trace, as an array
-+// int* sizes: the size of each stack frame, as an array
-+// (GetStackFrames* only)
-+// int max_depth: the size of the result (and sizes) array(s)
-+// int skip_count: how many stack pointers to skip before storing in result
-+// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only)
-+static int GET_STACK_TRACE_OR_FRAMES {
-+ layout_ppc *current;
-+ int n;
-+
-+ // Get the address on top-of-stack
-+ current = reinterpret_cast<layout_ppc*> (__builtin_frame_address (0));
-+ // And ignore the current symbol
-+ current = current->next;
-+
-+ StacktracePowerPCDummyFunction();
-+
-+ n = 0;
-+ skip_count++; // skip parent's frame due to indirection in
-+ // stacktrace.cc
-+
-+ base::VDSOSupport vdso;
-+ base::ElfMemImage::SymbolInfo rt_sigreturn_symbol_info;
-+#ifdef __PPC64__
-+ const void *sigtramp64_vdso = 0;
-+ if (vdso.LookupSymbol("__kernel_sigtramp_rt64", "LINUX_2.6.15", STT_NOTYPE,
-+ &rt_sigreturn_symbol_info))
-+ sigtramp64_vdso = rt_sigreturn_symbol_info.address;
-+#else
-+ const void *sigtramp32_vdso = 0;
-+ if (vdso.LookupSymbol("__kernel_sigtramp32", "LINUX_2.6.15", STT_NOTYPE,
-+ &rt_sigreturn_symbol_info))
-+ sigtramp32_vdso = rt_sigreturn_symbol_info.address;
-+ const void *sigtramp32_rt_vdso = 0;
-+ if (vdso.LookupSymbol("__kernel_sigtramp_rt32", "LINUX_2.6.15", STT_NOTYPE,
-+ &rt_sigreturn_symbol_info))
-+ sigtramp32_rt_vdso = rt_sigreturn_symbol_info.address;
-+#endif
-+
-+ while (current && n < max_depth) {
-+
-+ // The GetStackFrames routine is called when we are in some
-+ // informational context (the failure signal handler for example).
-+ // Use the non-strict unwinding rules to produce a stack trace
-+ // that is as complete as possible (even if it contains a few
-+ // bogus entries in some rare cases).
-+ layout_ppc *next = NextStackFrame<!IS_STACK_FRAMES>(current);
-+ if (skip_count > 0) {
-+ skip_count--;
-+ } else {
-+ result[n] = current->return_addr;
-+#ifdef __PPC64__
-+ if (sigtramp64_vdso && (sigtramp64_vdso == current->return_addr)) {
-+ struct signal_frame_64 {
-+ char dummy[128];
-+ ucontext_t uc;
-+ // We don't care about the rest, since the IP value is at 'uc' field.
-+ } *sigframe = reinterpret_cast<signal_frame_64*>(current);
-+ result[n] = (void*) sigframe->uc.uc_mcontext.gp_regs[PT_NIP];
-+ }
-+#else
-+ if (sigtramp32_vdso && (sigtramp32_vdso == current->return_addr)) {
-+ struct signal_frame_32 {
-+ char dummy[64];
-+ struct sigcontext sctx;
-+ mcontext_t mctx;
-+ // We don't care about the rest, since IP value is at 'mctx' field.
-+ } *sigframe = reinterpret_cast<signal_frame_32*>(current);
-+ result[n] = (void*) sigframe->mctx.gregs[PT_NIP];
-+ } else if (sigtramp32_rt_vdso && (sigtramp32_rt_vdso == current->return_addr)) {
-+ struct rt_signal_frame_32 {
-+ char dummy[64 + 16];
-+ siginfo_t info;
-+ struct ucontext uc;
-+ // We don't care about the rest, since IP value is at 'uc' field.A
-+ } *sigframe = reinterpret_cast<rt_signal_frame_32*>(current);
-+ result[n] = (void*) sigframe->uc.uc_mcontext.uc_regs->gregs[PT_NIP];
-+ }
-+#endif
-+
-+#if IS_STACK_FRAMES
-+ if (next > current) {
-+ sizes[n] = (uintptr_t)next - (uintptr_t)current;
-+ } else {
-+ // A frame-size of 0 is used to indicate unknown frame size.
-+ sizes[n] = 0;
-+ }
-+#endif
-+ n++;
-+ }
-+ current = next;
-+ }
-+
-+ // It's possible the second-last stack frame can't return
-+ // (that is, it's __libc_start_main), in which case
-+ // the CRT startup code will have set its LR to 'NULL'.
-+ if (n > 0 && result[n-1] == NULL)
-+ n--;
-+
-+ return n;
-+}
OBS-URL: https://build.opensuse.org/request/show/280951
OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gperftools?expand=0&rev=27
- gperftools 2.1, released 30 July 2013.
* fixes for building on newer platforms. Notably, there's now initial
support for x32 ABI (--enable-minimal only at this time))
* Some fixes for debug allocation on POWER/Linux
* new getNumericProperty stats for cache sizes
* added HEAP_PROFILER_TIME_INTERVAL variable (see documentation)
* added environment variable to control heap size (TCMALLOC_HEAP_LIMIT_MB)
* added environment variable to disable release of memory back to OS
(TCMALLOC_DISABLE_MEMORY_RELEASE)
* cpu profiler can now be switched on and off by sending it a signal
(specified in CPUPROFILESIGNAL)
* (issue 491) fixed race-ful spinlock wake-ups
* (issue 496) added some support for fork-ing of process that is using
tcmalloc
* (issue 368) improved memory fragmentation when large chunks of
memory are allocated/freed (forwarded request 184993 from ganglia)
OBS-URL: https://build.opensuse.org/request/show/185078
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gperftools?expand=0&rev=6
- gperftools 2.1, released 30 July 2013.
* fixes for building on newer platforms. Notably, there's now initial
support for x32 ABI (--enable-minimal only at this time))
* Some fixes for debug allocation on POWER/Linux
* new getNumericProperty stats for cache sizes
* added HEAP_PROFILER_TIME_INTERVAL variable (see documentation)
* added environment variable to control heap size (TCMALLOC_HEAP_LIMIT_MB)
* added environment variable to disable release of memory back to OS
(TCMALLOC_DISABLE_MEMORY_RELEASE)
* cpu profiler can now be switched on and off by sending it a signal
(specified in CPUPROFILESIGNAL)
* (issue 491) fixed race-ful spinlock wake-ups
* (issue 496) added some support for fork-ing of process that is using
tcmalloc
* (issue 368) improved memory fragmentation when large chunks of
memory are allocated/freed
OBS-URL: https://build.opensuse.org/request/show/184993
OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gperftools?expand=0&rev=15
- Primarily renamed from google-perftools to gperftools, with ownership
shifted from Google to the community.
- Version 1.9.1, released 23 Dec 2011.
* google-perftools: version 1.9 release
* Lightweight check for double-frees (blount)
* BUGFIX: Fix pprof to exit properly if run with no args (dagitses)
* Suggest ASan as a way to diagnose buggy code (ppluzhnikov)
* Get rid of unused CACHELINE_SIZE (csilvers)
* Replace atexit() calls with global dtors; helps freebsd (csilvers)
* Disable heap-checker under AddressSanitizer (kcc)
* Fix bug in powerpc stacktracing (ppluzhnikov)
* PERF: Use exponential backoff waiting for spinlocks (m3b)
* Fix 64-bit nm on 32-bit binaries in pprof (csilvers)
* Add ProfileHandlerDisallowForever (rsc)
* BUGFIX: Shell escape when forking in pprof (csilvers)
* No longer combine overloaded functions in pprof (csilvers)
* Fix address-normalizing bug in pprof (csilvers)
* More consistently call abort() instead of exit() on failure (csilvers)
* Allow NoGlobalLeaks to be safely called more than once (csilvers)
* PORTING/BUGFIX: Fix ARM cycleclock to use volatile asm (dougkwan)
* PORTING: 64-bit atomic ops for ARMv7 (dougkwan)
* PORTING: Implement stacktrace for ARM (dougkwan)
* PORTING: Fix malloc_hook_mmap_linux for ARM (dougkwan)
* PORTING: Update linux_syscall_support.h for ARM/etc (evannier, sanek)
* PORTING: Fix freebsd to work on x86_64 (chapp...@gmail.com)
* PORTING: Added additional SYS_mmap fixes for FreeBSD (chappedm)
* PORTING: Allow us to compile on OS X 10.6 and run on 10.5 (raltherr)
* PORTING: Check for mingw compilers that *do* define timespec
OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/gperftools?expand=0&rev=1