As part of cpu profiler we're extracting current PC (program counter)
of out signal's ucontext. Different OS and hardware combinations have
different ways for that. We had a list of variants that we tested at
compile time and populated PC_FROM_UCONTEXT macro into config.h. It
caused duplication and occasional mismatches between our autoconf and
cmake bits.
So this commit changes testing to be compile-time. We remove
complexity from build system and add some to C++ source.
We use SFINAE to find which of those variants compile (and we silently
assume that 'compiles' implies 'works'; this is what config-time
testing did too). Occasionally we'll face situations where several
variants compile. And we couldn't handle this case in pure C++. So we
have a small Ruby program that generates chain of inheritance among
SFINAE-specialized class templates. This handles prioritization among
variants.
List of ucontext->pc extraction variants is mostly same. We dropped
super-obsolete (circa Linux kernel 2.0) arm variant. And NetBSD case
is now improved. We now use their nice architecture-independent macro
instead of x86-specific access.
As part of that we also upgrade required autoconf version to 2.69
which is what I see in rhel/centos 7 and ubuntu 14.04. Both are old
enough. And, of course, .tar.gz releases still ship "packaged" configure,
so will work on older distros.
This fixes issue #1335.
In some architectures (e.g. powerpc, powerpc64 and powerpc64le), the
macro that specifies the position of the program counter is defined in
header asm/ptrace.h.
When glibc bug 21457 got fixed in version 2.27, header sys/ucontext.h
stopped including signal.h, which indirectly removed asm/ptrace.h too.
Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
So that it's easier to contribute and review contributions.
People wishing to build gperftools from svn checkout should run
autogen.sh first which will create those files and then ./configure &&
make as usual
INSTALL file has updated instructions too.
git-svn-id: http://gperftools.googlecode.com/svn/trunk@200 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
- Used aclocal, autoupdate, autoconf, and automake to correctly apply changes made to Makefile.am. Detailed instructions on this procedure can be found here http://inti.sourceforge.net/tutorial/libinti/autotoolsproject.html.
- Fixed a number of error/warning messages due to use of newer aclocal, autoconf, and automake utilities.
- Directly and indirectly related to issue-385 and issue-480.
git-svn-id: http://gperftools.googlecode.com/svn/trunk@173 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
In revisions 151 and 150 an attempt was made to enable frame pointers by default for i386. However, in the process of doing so a number of files were inadvertently touched as a result of running autogen.sh. As a result, I have needed to roll back these revisions so that I can reattempt the change.
git-svn-id: http://gperftools.googlecode.com/svn/trunk@172 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 1.7 release
* Reduce page map key size under x86_64 by 4.4MB (rus)
* Remove a flaky malloc-extension test (fdabek)
* Improve the performance of PageHeap::New (ond..., csilvers)
* Improve sampling_test with no-inline additions/etc (fdabek)
* 16-byte align debug allocs (jyasskin)
* Change FillProcSelfMaps to detect out-of-buffer-space (csilvers)
* Document the need for sampling to use GetHeapSample (csilvers)
* Try to read TSC frequency from tsc_freq_khs (adurbin)
* Do better at figuring out if tests are running under gdb (ppluzhnikov)
* Improve spinlock contention performance (ruemmler)
* Better internal-function list for pprof's /contention (ruemmler)
* Speed up GoogleOnce (m3b)
* Limit number of incoming/outgoing edges in pprof (sanjay)
* Add pprof --evince to go along with --gv (csilvers)
* Document the various ways to get heap-profiling information (csilvers)
* Separate out synchronization profiling routines (ruemmler)
* Improve malloc-stats output to be more understandable (csilvers)
* Add support for census profiler in pporf (nabeelmian)
* Document how pprof's /symbol must support GET requests (csilvers)
* Improve acx_pthread.m4 (ssuomi, liujisi)
* Speed up pprof's ExtractSymbols (csilvers)
* Ignore some known-leaky (java) libraries in the heap checker (davidyu)
* Make kHideMask use all 64 bits in tests (ppluzhnikov)
* Clean up pprof input-file handling (csilvers)
* BUGFIX: Don't crash if __environ is NULL (csilvers)
* BUGFIX: Fix totally broken debugallocation tests (csilvers)
* BUGFIX: Fix up fake_VDSO handling for unittest (ppluzhnikov)
* BUGFIX: Suppress all large allocs when report threshold is 0 (lexie)
* BUGFIX: mmap2 on i386 takes an off_t, not off64_t (csilvers)
* PORTING: Add missing PERFTOOLS_DLL_DECL (csilvers)
* PORTING: Add stddef.h to make newer gcc's happy (csilvers)
* PORTING: Document some tricks for working under OS X (csilvers)
* PORTING: Don't try to check valgrind for windows (csilvers)
* PORTING: Make array-size a var to compile under clang (chandlerc)
* PORTING: No longer hook _aligned_malloc and _aligned_free (csilvers)
* PORTING: Quiet some gcc warnings (csilvers)
* PORTING: Replace %PRIxPTR with %p to be more portable (csilvers)
* PORTING: Support systems that capitalize /proc weirdly (sanek)
* PORTING: Treat arm3 the same as arm5t in cycletimer (csilvers)
* PORTING: Update windows logging to not allocate memory (csilvers)
* PORTING: avoid double-patching newer windows DLLs (roger.orr)
* PORTING: get dynamic_annotations.c to work on windows (csilvers)
* Add pkg-config .pc files for the 5 libraries we produce (csilvers)
* Added proper libtool versioning, so this lib will be 0.1.0 (csilvers)
* Moved from autoconf 2.64 to 2.65
git-svn-id: http://gperftools.googlecode.com/svn/trunk@102 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* Clarified meaning of various malloc stats
* Change from ATTRIBUTED_DEPRECATED to comments
* Make array-size a var to compile under clang
* Reduce page map key size under x86_64 by 4.4MB
* Added full qualification to MemoryBarrier
* Support systems that capitalize /proc weirdly
* Avoid gcc warning: exporting type in unnamed ns
* Add some dynamic annotations for gcc attributes
* Add support for census profiler in pprof
* Speed up pprof's ExtractSymbols
* Speed up GoogleOnce
* Add pkg-config (.pc) files
* Detect when __environ exists but is NULL
* Improve spinlock contention performance
* Add GetFreeListSizes
* Improve sampling_test, eg by adding no-inline
* Relax malloc_extension test-check for big pages
* Add proper library version number information
* Update from autoconf 2.64 to 2.65
* Better document how to write a server that works with pprof
* Change FillProcSelfMaps to better handle out-of-space
* No longer hook _aligned_malloc/free in windows
* Handle function-forwarding in DLLs when patching (in windows)
* Update .vcproj files that had wrong .cc files in them (!)
* get rid of unnecessary 'size < 0'
* fix comments a bit in sysinfo.cc
* another go at improving malloc-stats output
* fix comment typo in profiler.cc
* Add a few more thread annotations
* Try to read TSC frequency from 'tsc_freq_khz'
* Fix annotalysis/TSAN incompatibility
* Add pprof --evince to go along with --gv
* Document need for sampling to use GetHeapSample
* Fix flakiness in malloc_extension_test
* Separate out synchronization profiling routines
git-svn-id: http://gperftools.googlecode.com/svn/trunk@99 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 1.6 release
* Add tc_malloc_usable_size for compatibility with glibc (csilvers)
* Override malloc_usable_size with tc_malloc_usable_size (csilvers)
* Default to no automatic heap sampling in tcmalloc (csilvers)
* Add -DTCMALLOC_LARGE_PAGES, a possibly faster tcmalloc (rus)
* Make some functions extern "C" to avoid false ODR warnings (jyasskin)
* pprof: Add SVG-based output (rsc)
* pprof: Extend pprof --tools to allow per-tool configs (csilvers)
* pprof: Improve support of 64-bit and big-endian profiles (csilvers)
* pprof: Add interactive callgrind suport (weidenri...)
* pprof: Improve address->function mapping a bit (dpeng)
* Better detection of when we're running under valgrind (csilvers)
* Better CPU-speed detection under valgrind (saito)
* Use, and recommend, -fno-builtin-malloc when compiling (csilvers)
* Avoid false-sharing of memory between caches (bmaurer)
* BUGFIX: Fix heap sampling to use correct alloc size (bmauer)
* BUGFIX: Avoid gcc 4.0.x bug by making hook-clearing atomic (csilvers)
* BUGFIX: Avoid gcc 4.5.x optimization bug (csilvers)
* BUGFIX: Work around deps-determining bug in libtool 1.5.26 (csilvers)
* BUGFIX: Fixed test to use HAVE_PTHREAD, not HAVE_PTHREADS (csilvers)
* BUGFIX: Fix tls callback behavior on windows when using wpo (wtc)
* BUGFIX: properly align allocation sizes on Windows (antonm)
* BUGFIX: Fix prototypes for tcmalloc/debugalloc wrt throw() (csilvers)
* DOC: Updated heap-checker doc to match reality better (fischman)
* DOC: Document ProfilerFlush, ProfilerStartWithOptions (csilvers)
* DOC: Update docs for heap-profiler functions (csilvers)
* DOC: Clean up documentation around tcmalloc.slack_bytes (fikes)
* DOC: Renamed README.windows to README_windows.txt (csilvers)
* DOC: Update the NEWS file to be non-empty (csilvers)
* PORTING: Fix windows addr2line and nm with proper rc code (csilvers)
* PORTING: Add CycleClock and atomicops support for arm 5 (sanek)
* PORTING: Improve PC finding on cygwin and redhat 7 (csilvers)
* PORTING: speed up function-patching under windows (csilvers)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@97 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* Add a flag to ingore unaligned-ptr leaks (archanakannan)
* PORTING: Add get-pc capabilities for a new OS (csilvers)
* Don't register malloc extension under valgrind (csilvers)
* Fix throw specs for our global operator new (chandlerc)
* PORTING: link to instructions on windows static overrides (mbelshe)
* Fix prototype differences in debugalloc (chandlerc, csilvers, wan)
* Change pprof to handle big-endian input files (csilvers)
* Properly align allocation sizes on Windows (antonm)
* Improve IsRunningOnValgrind, using valgrind.h (csilvers, kcc)
* Improve the accuracy of system_alloc actual_size (csilvers)
* Add interactive callgrind support to pprof (weidenri...)
* Fix off-by-one problems when symbolizing in pprof (dpeng)
* Be more permissive in allowed library names, in pprof (csilvers)
* PORTING: Fix pc_from_ucontext to handle cygwin and redhat7 (csilvers)
* Fix stacktrace to avoid inlining (ppluzhnikov)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@91 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* Add HEAP_CHECK_MAX_LEAKS envvar (glider)
* BUGFIX: debugallocation now calls cpp_alloc for new (willchan)
* BUGFIX: tc_set_new_mode() respected for realloc and calloc (willchan)
* BUGFIX: fix opt-mode maybe-crash on debugallocation_test (csilvers)
* Print alloc size when mmap fails (hakon)
* Add ITIMER_REAL support (csilvers, nabeelmian)
* BUGFIX: correctly report double-frees (csilvers)
* Export tc_set_new_mode() from the .h file (willchan)
* Restructure Symbolize to make it more efficient (glider)
* PORTING: Augment sysinfo to work on 64-bit OS X (csilvers)
* Add two numeric pageheap properties to MallocExtension (fikes)
* PORTING: Use libunwind for i386 when using --omitfp (ppluzhnikov)
* Add ReleaseToSystem(num_bytes) (kash)
* Provide correct library filenames under solaris (jeffrey)
* BUGFIX: simple fix in pprof --raw mode (mrabkin)
* PORTING: Prefer sys/ucontext.h to fix OS 10.6 builds (csilvers)
* Improve support for inlined functions in pprof (sanjay)
* Update wget code to not use keepalive (mrabkin, csilvers)
* PORTING: correctly handle x86_64 machines that use fp's (csilvers)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@79 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* Document problems with _recalloc (csilvers)
* Detect when x86_64 doesn't turn off frame pointers (csilvers)
* Fix sysinfo.cc/etc to work with 64-bit os x (csilvers)
* BUGFIX: Use __TEXT instead of __DATA to store tcmalloc fns (csilvers)
* Added two numeric pageheap properties to tcmalloc (fikes)
* Support for mallocranges stats visualization (sanjay)
* Use libunwind for i386, not just x86_64 (ppluzhnikov)
* Add ReleaseToSystem(num_bytes) (kash)
* Provide corect library filenames under solaris (jeffrey)
* BUGFIX: a simple bug in pprof --raw mode (mrabkin)
* Prfer sys/ucontext.h to ucontext.h, to fix OS X 10.6 (csilvers)
* Improve supprot for inlined functions in pprof (sanjay)
* Document inaccuracies in profiling mmap calls (csilvers)
* Update wget code to not use keepalive (mrabkin, csilvers)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@78 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 1.4 release
* Add debugallocation library, to catch memory leaks, stomping, etc
* Add --raw mode to allow for delayed processing of pprof files
* Use less memory when reading CPU profiles
* New environment variables to control kernel-allocs (sbrk, memfs, etc)
* Add MarkThreadBusy(): performance improvement
* Remove static thread-cache-size code; all is dynamic now
* Add new HiddenPointer class to heap checker
* BUGFIX: pvalloc(0) allocates now (found by new debugalloc library)
* BUGFIX: valloc test (not implementation) no longer overruns memory
* BUGFIX: GetHeapProfile no longer deadlocks
* BUGFIX: Support unmapping memory regions before main
* BUGFIX: Fix some malloc-stats formatting
* BUGFIX: Don't crash as often when freeing libc-allocated memory
* BUGFIX: Deal better with incorrect PPROF_PATH when symbolizing
* BUGFIX: weaken new/delete/etc in addition to malloc/free/etc
* BUGFIX: Fix return value of GetAllocatedSize
* PORTING: Fix mmap-#define problem on some 64-bit systems
* PORTING: Call ranlib again (some OS X versions need it)
* PORTING: Fix a leak when building with LLVM
* PORTING: Remove some unneeded bash-ishs from testing scripts
* WINDOWS: Support library unloading as well as loading
* WINDOWS/BUGFIX: Set page to 'xrw' instead of 'rw' when patching
git-svn-id: http://gperftools.googlecode.com/svn/trunk@76 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 1.3 release
* Provide our own name for memory functions: tc_malloc, etc (csilvers)
* Weaken memory-alloc functions so user can override them (csilvers)
* Remove meaningless delete(nothrow) and delete[](nothrow) (csilvers)
* BUILD: replace clever libtcmalloc/profiler.a with a new .a (csilvers)
* PORTING: improve windows port by using google spinlocks (csilvers)
* PORTING: Fix RedHat 9 memory allocation in heapchecker (csilvers)
* PORTING: Rename OS_WINDOWS macro to PLATFORM_WINDOWS (mbelshe)
* PORTING/BUGFIX: Make sure we don't clobber GetLastError (mbelshe)
* BUGFIX: get rid of useless data for callgrind (weidenrinde)
* BUGFIX: Modify windows patching to deadlock sometimes (csilvers)
* BUGFIX: an improved fix for hook handling during fork (csilvers)
* BUGFIX: revamp profiler_unittest.sh, which was very broken (csilvers)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@74 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 1.1 release
* Dynamically resize thread caches -- nice perf. improvement (kash)
* Add VDSO support to give better stacktraces in linux (ppluzhnikov)
* Improve heap-profiling sampling algorithm (ford)
* Rewrite leak-checking code: should be faster and more robust (sanjay)
* Use ps2 instead of ps for dot: better page cropping for gv (csilvers)
* Disable malloc-failure warning messages by default (csilvers)
* Update config/Makefile to disable tests on a per-OS basis (csilvers)
* PORTING: Get perftools compiling under MSVC 7.1 again (csilvers)
* PORTING: Get perftools compiling under cygwin again (csilvers)
* PORTING: automatically set library flags for solaris x86 (csilvers)
* Add TCMALLOC_SKIP_SBRK to mirror TCMALLOC_SKIP_MMAP (csilvers)
* Add --enable flags to allow selective building (csilvers)
* Put addr2line-pdb and nm-pdb in proper output directory (csilvers)
* Remove deprecated DisableChecksIn (sanjay)
* DOCUMENTATION: Document most MallocExtension routines (csilvers)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@66 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 0.98 release
* Add ProfilerStartWithOptions() (cgd)
* Change tcmalloc_minimal to not do any stack-tracing at all (csilvers)
* Prefer mmap to sbrk for 64-buit debug mode (sanjay)
* Fix accounting for some tcmalloc stats (sanjay)
* Use setrlimit() to keep unittests from killing the machine (odo)
* Fix a bug when sbrk-ing near address 4G (csilvers)
* Make MallocHook thread-safe (jyasskin)
* Fix windows build for MemoryBarrier (jyasskin)
* Fix CPU-profiler docs to mention correct libs (csilvers)
* Fix for GetHeapProfile() when heap-profiling is off (maxim)
* Avoid realloc resizing ping-pongs using hysteresis (csilvers)
* Add --callgrind output support to pprof (klimek)
* Fix profiler.h and heap-profiler.h to be C-compatible (csilvers)
* Break malloc_hook.h into two parts to reduce dependencies (csilvers)
* Better handle systems that don't implement mmap (csilvers)
* PORTING: disable system_alloc_unittest for msvc (csilvers)
* PORTING: Makefile tweaks to build better on cygwin (csilvers)
git-svn-id: http://gperftools.googlecode.com/svn/trunk@52 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* PORTING: everything compiles on Solaris, OS X, FreeBSD (see INSTALL)
* PORTING: cpu-profiler works on most platforms (much better GetPC())
* PORTING: heap-profiler works on most platforms
* PORTING: improved windows support, including release builds
* No longer build or run ptmalloc tests by default
* Add support for using memfs filesystem to allocate memory in linux
* WINDOWS: give debug library and release library different names
Tue Jul 17 22:26:27 2007 Google Inc. <opensource@google.com>
git-svn-id: http://gperftools.googlecode.com/svn/trunk@38 6b5cf1ce-ec42-a296-1ba9-69fdba395a50
* google-perftools: version 0.92 release
* PERFORMANCE: use a packed cache to speed up tcmalloc
* PORTING: preliminary windows support! (see README.windows)
* PORTING: better support for solaris, OS X, FreeBSD (see INSTALL)
* Envvar support for running the heap-checker under gdb
* Add weak declarations to maybe_threads to fix no-pthreads compile bugs
* Some 64bit fixes, especially with pprof
* Better heap-checker support for some low-level allocations
* Fix bug where heap-profiles would sometimes get truncated
* New documentation about how to handle common heap leak situations
* Use computed includes for hash_map/set: easier config
* Added all used .m4 templates to the distribution
git-svn-id: http://gperftools.googlecode.com/svn/trunk@36 6b5cf1ce-ec42-a296-1ba9-69fdba395a50