http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9661f956/third_party/gperftools/configure.ac ---------------------------------------------------------------------- diff --git a/third_party/gperftools/configure.ac b/third_party/gperftools/configure.ac deleted file mode 100644 index 59d275a..0000000 --- a/third_party/gperftools/configure.ac +++ /dev/null @@ -1,538 +0,0 @@ -## Process this file with autoconf to produce configure. -## In general, the safest way to proceed is to run ./autogen.sh - -# make sure we're interpreted by some minimal autoconf -AC_PREREQ([2.59]) - -AC_INIT([gperftools],[2.4],[google-perfto...@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=6:6:2 -PROFILER_SO_VERSION=4:5:4 - -AC_SUBST(TCMALLOC_SO_VERSION) -AC_SUBST(PROFILER_SO_VERSION) - -# The argument here is just something that should be in the current directory -# (for sanity checking) -AC_CONFIG_SRCDIR(README) -AC_CONFIG_MACRO_DIR([m4]) -AC_CANONICAL_HOST -AM_INIT_AUTOMAKE([dist-zip]) -AC_CONFIG_HEADERS([src/config.h]) - -AM_MAINTAINER_MODE() -# Export the version information (for tc_version and friends) -TC_VERSION_MAJOR=`expr "$PACKAGE_VERSION" : '\([[0-9]]*\)'` -TC_VERSION_MINOR=`expr "$PACKAGE_VERSION" : '[[0-9]]*\.\([[0-9]]*\)'` -TC_VERSION_PATCH=`expr "$PACKAGE_VERSION" : '[[0-9]]*\.[[0-9]]*\(.*\)$'` -AC_SUBST(TC_VERSION_MAJOR) -AC_SUBST(TC_VERSION_MINOR) -AC_SUBST(TC_VERSION_PATCH) -AC_SUBST(PACKAGE_STRING) - -# The user can choose not to compile in the heap-profiler, the -# heap-checker, or the cpu-profiler. There's also the possibility -# for a 'fully minimal' compile, which leaves out the stacktrace -# code as well. By default, we include all of these that the -# target system supports. -default_enable_cpu_profiler=yes -default_enable_heap_profiler=yes -default_enable_heap_checker=yes -default_enable_debugalloc=yes -default_enable_minimal=no -default_tcmalloc_alignment=16 -need_nanosleep=yes # Used later, to decide if to run ACX_NANOSLEEP -case "$host" in - *-mingw*) default_enable_minimal=yes; default_enable_debugalloc=no; - need_nanosleep=no;; - *-cygwin*) default_enable_heap_checker=no; default_enable_cpu_profiler=no;; - *-freebsd*) default_enable_heap_checker=no;; - *-darwin*) default_enable_heap_checker=no;; -esac - -# Disable libunwind linking on ppc64 by default. -AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __PPC64__])], - [default_enable_libunwind=no - default_tcmalloc_pagesize=64], - [default_enable_libunwind=yes - default_tcmalloc_pagesize=8]) - -AC_ARG_ENABLE([cpu-profiler], - [AS_HELP_STRING([--disable-cpu-profiler], - [do not build the cpu profiler])], - [], - [enable_cpu_profiler="$default_enable_cpu_profiler"]) -AC_ARG_ENABLE([heap-profiler], - [AS_HELP_STRING([--disable-heap-profiler], - [do not build the heap profiler])], - [], - [enable_heap_profiler="$default_enable_heap_profiler"]) -AC_ARG_ENABLE([heap-checker], - [AS_HELP_STRING([--disable-heap-checker], - [do not build the heap checker])], - [], - [enable_heap_checker="$default_enable_heap_checker"]) -AC_ARG_ENABLE([debugalloc], - [AS_HELP_STRING([--disable-debugalloc], - [do not build versions of libs with debugalloc])], - [], - [enable_debugalloc="$default_enable_debugalloc"]) -AC_ARG_ENABLE([minimal], - [AS_HELP_STRING([--enable-minimal], - [build only tcmalloc-minimal (and maybe tcmalloc-minimal-debug)])], - [], - [enable_minimal="$default_enable_minimal"]) -if test "$enable_minimal" = yes; then - enable_cpu_profiler=no - enable_heap_profiler=no - enable_heap_checker=no -fi -AC_ARG_ENABLE([stacktrace-via-backtrace], - [AS_HELP_STRING([--enable-stacktrace-via-backtrace], - [enable use of backtrace() for stacktrace capturing (may deadlock)])], - [enable_backtrace=yes], - []) -AC_ARG_ENABLE([libunwind], - [AS_HELP_STRING([--enable-libunwind], - [enable libunwind linking])], - [], - [enable_libunwind="$default_enable_libunwind"]) -AC_ARG_WITH([tcmalloc-pagesize], - [AS_HELP_STRING([--with-tcmalloc-pagesize], - [Set the tcmalloc internal page size to 8K, 32K or 64K])], - [], - [with_tcmalloc_pagesize=$default_tcmalloc_pagesize]) -AC_ARG_WITH([tcmalloc-alignment], - [AS_HELP_STRING([--with-tcmalloc-alignment], - [Set the tcmalloc allocation alignment to 8 or 16 bytes])], - [], - [with_tcmalloc_alignment=$default_tcmalloc_alignment]) - -case "$with_tcmalloc_pagesize" in - 8) - #Default tcmalloc page size. - ;; - 32) - AC_DEFINE(TCMALLOC_32K_PAGES, 1, - [Define 32K of internal pages size for tcmalloc]);; - 64) - AC_DEFINE(TCMALLOC_64K_PAGES, 1, - [Define 64K of internal pages size for tcmalloc]);; - *) - AC_MSG_WARN([${with_tcmalloc_pagesize}K size not supported, using default tcmalloc page size.]) -esac -case "$with_tcmalloc_alignment" in - 8) - AC_DEFINE(TCMALLOC_ALIGN_8BYTES, 1, - [Define 8 bytes of allocation alignment for tcmalloc]);; - 16) - #Default tcmalloc allocation alignment. - ;; - *) - AC_MSG_WARN([${with_tcmalloc_alignment} bytes not supported, using default tcmalloc allocation alignment.]) -esac - -# Checks for programs. -AC_PROG_CXX -AC_PROG_CC -AC_PROG_CPP -AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc -AM_PROG_CC_C_O # shrug: autogen.sh suddenly needs this for some reason - -# Check if we have an objcopy installed that supports -W -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([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])])], - [gpt_cv_objcopy_weaken=no]) -AM_CONDITIONAL(HAVE_OBJCOPY_WEAKEN, test $gpt_cv_objcopy_weaken = yes) - -AC_PROG_LIBTOOL - -AC_C_INLINE -AX_C___ATTRIBUTE__ - -# Check whether some low-level functions/files are available -AC_HEADER_STDC - -# TODO(csilvers): we could remove a lot when WITH_CPU_PROFILER etc is "no". -AC_CHECK_TYPES([__int64]) # defined in some windows platforms -AC_CHECK_TYPES([struct mallinfo],,, [#include <malloc.h>]) -AC_CHECK_TYPES([Elf32_Versym],,, [#include <elf.h>]) # 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 -AC_CHECK_HEADERS(malloc/malloc.h) # another place OS X puts malloc.h (?) -AC_CHECK_HEADERS(glob.h) # for heap-profile-table (cleaning up profiles) -AC_CHECK_HEADERS(execinfo.h) # for stacktrace? and heapchecker_unittest -AC_CHECK_HEADERS(unwind.h) # for stacktrace -AC_CHECK_HEADERS(sched.h) # for being nice in our spinlock code -AC_CHECK_HEADERS(conflict-signal.h) # defined on some windows platforms? -AC_CHECK_HEADERS(sys/prctl.h) # for thread_lister (needed by leak-checker) -AC_CHECK_HEADERS(linux/ptrace.h)# also needed by leak-checker -AC_CHECK_HEADERS(sys/syscall.h) -AC_CHECK_HEADERS(sys/socket.h) # optional; for forking out to symbolizer -AC_CHECK_HEADERS(sys/wait.h) # optional; for forking out to symbolizer -AC_CHECK_HEADERS(poll.h) # optional; for forking out to symbolizer -AC_CHECK_HEADERS(fcntl.h) # for tcmalloc_unittest -AC_CHECK_HEADERS(grp.h) # for heapchecker_unittest -AC_CHECK_HEADERS(pwd.h) # for heapchecker_unittest -AC_CHECK_HEADERS(sys/resource.h) # for memalign_unittest.cc -AC_CHECK_HEADERS(valgrind.h) # we have a local copy if this isn't found -AC_CHECK_HEADERS(sys/cdefs.h) # Where glibc defines __THROW -AC_CHECK_HEADERS(features.h) # Where __GLIBC__ is defined -# We also need <ucontext.h>/<sys/ucontext.h>, but we get those from -# AC_PC_FROM_UCONTEXT, below. - -# We override a lot of memory allocation routines, not all of which are -# standard. For those the system doesn't declare, we'll declare ourselves. -AC_CHECK_DECLS([cfree, - posix_memalign, - memalign, - valloc, - pvalloc],,, - [#define _XOPEN_SOURCE 600 - #include <stdlib.h> - #include <malloc.h>]) - -if test "$ac_cv_type_struct_mallinfo" = yes; then - AC_SUBST(ac_cv_have_struct_mallinfo, 1) # gperftools/tcmalloc.h needs this -else - AC_SUBST(ac_cv_have_struct_mallinfo, 0) -fi - -# We need to check for mmap. cygwin supports mmap, but the autoconf -# test doesn't work on cygwin: -# http://www.cygwin.com/ml/cygwin/2002-04/msg00412.html -# 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, - [Define to 1 if you have a working `mmap' system call.]) - ;; - *) 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_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdint.h>]], [[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])]) - -# 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 -# possibilities we know about. Note REG_PC should come first (REG_RIP -# is also defined on solaris, but does the wrong thing). But don't -# bother if we're not doing cpu-profiling. -# [*] means that we've not actually tested one of these systems -if test "$enable_cpu_profiler" = yes; then - AC_PC_FROM_UCONTEXT(AC_MSG_WARN(Could not find the PC. Will not try to compile libprofiler...); - enable_cpu_profiler=no) -fi - -# Some tests test the behavior of .so files, and only make sense for dynamic. -AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes) - -# We want to link in libunwind or libexecinfo if it it is enabled and exists. -if test "$enable_libunwind" = yes; then - AC_CHECK_HEADERS(libunwind.h) # for stacktrace - AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind, - [AC_CHECK_LIB(execinfo, backtrace, UNWIND_LIBS=-lexecinfo, UNWIND_LIBS=)]) - AC_SUBST(UNWIND_LIBS) -else - AC_CHECK_LIB(execinfo, backtrace, UNWIND_LIBS=-lexecinfo, UNWIND_LIBS=) - AC_SUBST(UNWIND_LIBS) -fi - -# 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) - -AC_MSG_CHECKING([for x86 without frame pointers]) -# 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]) -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -S -O2 -o fp.s" -# This test will always fail because we don't name our output file properly. -# We do our own determination of success/failure in the grep, below. -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int f(int x) {return x;}], [return f(0);])], - [:], [:]) -x86_no_fp_by_default=no -AS_IF([test "$is_x86_64" = yes && ! grep 'mov.*rsp.*rbp' fp.s >/dev/null 2>&1], [x86_no_fp_by_default=yes]) -AM_CONDITIONAL(X86_64_AND_NO_FP_BY_DEFAULT, - test "$x86_no_fp_by_default" = yes) -rm fp.s -CFLAGS="$OLD_CFLAGS" -AC_MSG_RESULT([$x86_no_fp_by_default]) - - -# We need to know if we're i386 so we can turn on -mmms, which is not -# on by default for i386 (it is for x86_64). -AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __i386__ == 1 ? 0 : 1])], - [is_i386=yes], [is_i386=no]) -AM_CONDITIONAL(I386, test "$is_i386" = yes) - -# See if the compiler supports -Wno-unused-result. -# Newer ubuntu's turn on -D_FORTIFY_SOURCE=2, enabling -# __attribute__((warn_unused_result)) for things like write(), -# which we don't care about. -AC_CACHE_CHECK([if the compiler supports -Wno-unused-result], - perftools_cv_w_no_unused_result, - [OLD_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Wno-error -Wno-unused-result" - # gcc doesn't warn about unknown flags unless it's - # also warning for some other purpose, hence the - # divide-by-0. (We use -Wno-error to make sure the - # divide-by-0 doesn't cause this test to fail!) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return 1/0)], - perftools_cv_w_no_unused_result=yes, - perftools_cv_w_no_unused_result=no) - CFLAGS="$OLD_CFLAGS"]) -AM_CONDITIONAL(HAVE_W_NO_UNUSED_RESULT, - test "$perftools_cv_w_no_unused_result" = yes) - -# Defines PRIuS -AC_COMPILER_CHARACTERISTICS - -# Also make sure we get standard PRI... definitions, even with glibc. -# We have to use AH_VERBATIM because we need the #ifdef guard (gcc buglet) -AH_VERBATIM([__STDC_FORMAT_MACROS], - [/* C99 says: define this to get the PRI... macros from stdint.h */ -#ifndef __STDC_FORMAT_MACROS -# define __STDC_FORMAT_MACROS 1 -#endif]) - -# Check if __builtin_stack_pointer() is available (for elfcore.h) -AC_MSG_CHECKING([for __builtin_stack_pointer()]) -AC_LINK_IFELSE([AC_LANG_PROGRAM(, [void *sp = __builtin_stack_pointer()])], - [AC_DEFINE(HAVE_BUILTIN_STACK_POINTER, 1, - Define to 1 if compiler supports __builtin_stack_pointer) - 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 <unistd.h>], - [char **env = __environ])], - [AC_DEFINE(HAVE___ENVIRON, 1, - [Define to 1 if compiler supports __environ]) - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) - -# If we support __thread, that can speed up tcmalloc a bit. -# 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 -# -# Also it was reported that earlier gcc versions for mips compile -# __thread but it doesn't really work -AC_MSG_CHECKING([for __thread]) -AC_LINK_IFELSE([AC_LANG_PROGRAM([#if defined(__GNUC__) && ((__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 -#elif defined(__MINGW32__) -#error mingw doesnt really support tls -#elif defined(__APPLE__) -#error OSX __thread support is known to call malloc which makes it unsafe to use from malloc replacement -#endif -], [static __thread int p = 0])], - [AC_DEFINE(HAVE_TLS, 1, - Define to 1 if compiler supports __thread) - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) - -# glibc's __malloc_hook/etc were declared volatile starting in glibc 2.14 -AC_MSG_CHECKING([if __malloc_hook is declared volatile]) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <malloc.h> -void* (* volatile __malloc_hook)(size_t, const void*) = 0;],)], - [AC_DEFINE(MALLOC_HOOK_MAYBE_VOLATILE, volatile, - Define to 'volatile' if __malloc_hook is declared volatile) - AC_MSG_RESULT([yes])], - [AC_DEFINE(MALLOC_HOOK_MAYBE_VOLATILE, ) - AC_MSG_RESULT([no])]) - -# Nanosleep requires extra libraries on some architectures (solaris). -# This sets NANOSLEEP_LIBS. nanosleep doesn't exist on mingw, which -# is fine for us because we don't compile libspinlock, which uses it. -if test "$need_nanosleep" = yes; then - ACX_NANOSLEEP - AC_SUBST(NANOSLEEP_LIBS) -fi - -# Solaris 10 6/06 has a bug where /usr/sfw/lib/libstdc++.la is empty. -# If so, we replace it with our own version. -LIBSTDCXX_LA_LINKER_FLAG= -if test -f /usr/sfw/lib/libstdc++.la && ! test -s /usr/sfw/lib/libstdc++.la -then - LIBSTDCXX_LA_LINKER_FLAG='-L$(top_srcdir)/src/solaris' -fi -AC_SUBST(LIBSTDCXX_LA_LINKER_FLAG) - -# We also need to check if the kernel supports __thread, which requires uname() -AC_CHECK_DECLS(uname,,, [#include <sys/utsname.h>]) - -# In fact, a lot of the code in this directory depends on pthreads -ACX_PTHREAD - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS -AC_MSG_CHECKING([whether pthread symbols are available in C++ without including pthread.h]) -acx_pthread_despite_asking_for=no -AC_LINK_IFELSE( - [AC_LANG_PROGRAM([ - #include <string> - #include <vector> - ],[ - pthread_t th; pthread_join(th, 0); - ])],[ - acx_pthread_despite_asking_for=yes - AC_DEFINE(HAVE_PTHREAD_DESPITE_ASKING_FOR, 1, [defined to 1 if pthread symbols are exposed even without include pthread.h]) - AC_DEFINE(HAVE_PTHREAD, 1, []) - ]) -AC_MSG_RESULT([$acx_pthread_despite_asking_for]) -AC_LANG_RESTORE - -AM_CONDITIONAL(HAVE_PTHREAD_DESPITE_ASKING_FOR, test x"$acx_pthread_despite_asking_for" = xyes) - -# Find out what namespace 'normal' STL code lives in -AC_CXX_STL_NAMESPACE - -# Figure out where libc has program_invocation_name -AC_PROGRAM_INVOCATION_NAME - -# Make the install prefix available, to figure out where to look for pprof -AC_INSTALL_PREFIX - -dnl only very recent mingw has sleep and nanosleep -case "$host" in - *-mingw*) - AC_CHECK_DECLS([sleep], [], [], [#include <unistd.h>]) - AC_CHECK_DECLS([nanosleep], [], [], [#include <time.h>]) - ;; -esac - -if test "x$enable_backtrace" = xyes; then - AC_CHECK_DECLS([backtrace], [], [], [#include <execinfo.h>]) -fi - -# For windows, this has a non-trivial value (__declspec(export)), but any -# system that uses configure wants this to be the empty string. -AC_DEFINE(PERFTOOLS_DLL_DECL,, - [Always the empty-string on non-windows systems. - On windows, should be "__declspec(dllexport)". - This way, when we compile the dll, we export our functions/classes. - It's safe to define this here because config.h is only used - internally, to compile the DLL, and every DLL source file - #includes "config.h" before anything else.]) - -# In theory, config.h files shouldn't need a header guard, but we do, -# because we (maybe) #include windows/mingw.h from within config.h, -# and it #includes other .h files. These all have header guards, so -# the end result is if config.h is #included twice, its #undefs get -# evaluated twice, but all the ones in mingw.h/etc only get evaluated -# once, potentially causing trouble. c.f. -# http://code.google.com/p/gperftools/issues/detail?id=246 -AH_TOP([ -#ifndef GPERFTOOLS_CONFIG_H_ -#define GPERFTOOLS_CONFIG_H_ -]) - -AH_VERBATIM([PTHREADS_CRASHES_IF_RUN_TOO_EARLY], - [/* Mark the systems where we know it's bad if pthreads runs too - early before main (before threads are initialized, presumably). */ -#ifdef __FreeBSD__ -#define PTHREADS_CRASHES_IF_RUN_TOO_EARLY 1 -#endif]) - -# MinGW uses autoconf, but also needs the windows shim routines -# (since it doesn't have its own support for, say, pthreads). -# This requires us to #include a special header file, and also to -# link in some windows versions of .o's instead of the unix versions. -# -# Also, manually mark systems where we have to be careful how early -# we run pthreads. TODO(csilvers): turn this into an autoconf check. -AH_BOTTOM([ -#ifdef __MINGW32__ -#include "windows/mingw.h" -#endif - -#endif /* #ifndef GPERFTOOLS_CONFIG_H_ */ -]) -AM_CONDITIONAL(MINGW, expr $host : '.*-mingw' >/dev/null 2>&1) -AM_CONDITIONAL(OSX, expr $host : '.*-apple-darwin.*' >/dev/null 2>&1) - -# Export the --enable flags we set above. We do this at the end so -# other configure rules can enable or disable targets based on what -# they find. -AM_CONDITIONAL(WITH_CPU_PROFILER, test "$enable_cpu_profiler" = yes) -AM_CONDITIONAL(WITH_HEAP_PROFILER, test "$enable_heap_profiler" = yes) -AM_CONDITIONAL(WITH_HEAP_CHECKER, test "$enable_heap_checker" = yes) -AM_CONDITIONAL(WITH_DEBUGALLOC, test "$enable_debugalloc" = yes) -# We make tcmalloc.so if either heap-profiler or heap-checker is asked for. -AM_CONDITIONAL(WITH_HEAP_PROFILER_OR_CHECKER, - test "$enable_heap_profiler" = yes -o \ - "$enable_heap_checker" = yes) -# If we don't use any profilers, we don't need stack traces (or pprof) -AM_CONDITIONAL(WITH_STACK_TRACE, test "$enable_cpu_profiler" = yes -o \ - "$enable_heap_profiler" = yes -o \ - "$enable_heap_checker" = yes) - -have_linux_sigev_thread_id=no -AC_MSG_CHECKING([for Linux SIGEV_THREAD_ID]) -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include <signal.h> - #include <time.h>]], - [[return SIGEV_THREAD_ID || CLOCK_THREAD_CPUTIME_ID || __linux;]])], - [AC_DEFINE(HAVE_LINUX_SIGEV_THREAD_ID, 1, - [Define if this is Linux that has SIGEV_THREAD_ID]) - have_linux_sigev_thread_id=yes - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) - -# Write generated configuration file -AC_CONFIG_FILES([Makefile - src/gperftools/tcmalloc.h src/windows/gperftools/tcmalloc.h]) -AC_OUTPUT - -AS_IF([test "$x86_no_fp_by_default" = yes && test "x$enable_frame_pointers" != xyes && test "x$UNWIND_LIBS" = x && test "x$enable_minimal" != xyes], - [AS_IF([test "x$enable_backtrace" = xyes], - [AC_MSG_WARN([No frame pointers and no libunwind. Expect backtrace capturing and unittests to fail])], - [AC_MSG_FAILURE([No frame pointers and no libunwind. The compilation will fail])])])
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9661f956/third_party/gperftools/depcomp ---------------------------------------------------------------------- diff --git a/third_party/gperftools/depcomp b/third_party/gperftools/depcomp deleted file mode 100755 index 4ebd5b3..0000000 --- a/third_party/gperftools/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2013-05-30.07; # UTC - -# Copyright (C) 1999-2013 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva <ol...@dcc.unicamp.br>. - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by 'PROGRAMS ARGS'. - object Object file output by 'PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to <bug-autom...@gnu.org>. -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp -fi - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The second -e expression handles DOS-style file names with drive - # letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the "deleted header file" problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. -## Some versions of gcc put a space before the ':'. On the theory -## that the space means something, we add a space to the output as -## well. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like '#:fec' to the end of the - # dependency line. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts '$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool generates 2 separate objects for the 2 libraries. These - # two compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for ':' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. - "$@" $dashmflag | - sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E \ - | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - | sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9661f956/third_party/gperftools/doc/cpuprofile-fileformat.html ---------------------------------------------------------------------- diff --git a/third_party/gperftools/doc/cpuprofile-fileformat.html b/third_party/gperftools/doc/cpuprofile-fileformat.html deleted file mode 100644 index 3f90e6b..0000000 --- a/third_party/gperftools/doc/cpuprofile-fileformat.html +++ /dev/null @@ -1,264 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<HTML> - -<HEAD> - <link rel="stylesheet" href="designstyle.css"> - <title>Google CPU Profiler Binary Data File Format</title> -</HEAD> - -<BODY> - -<h1>Google CPU Profiler Binary Data File Format</h1> - -<p align=right> - <i>Last modified - <script type=text/javascript> - var lm = new Date(document.lastModified); - document.write(lm.toDateString()); - </script></i> -</p> - -<p>This file documents the binary data file format produced by the -Google CPU Profiler. For information about using the CPU Profiler, -see <a href="cpuprofile.html">its user guide</a>. - -<p>The profiler source code, which generates files using this format, is at -<code>src/profiler.cc</code></a>. - - -<h2>CPU Profile Data File Structure</h2> - -<p>CPU profile data files each consist of four parts, in order: - -<ul> - <li> Binary header - <li> Binary profile records - <li> Binary trailer - <li> Text list of mapped objects -</ul> - -<p>The binary data is expressed in terms of "slots." These are words -large enough to hold the program's pointer type, i.e., for 32-bit -programs they are 4 bytes in size, and for 64-bit programs they are 8 -bytes. They are stored in the profile data file in the native byte -order (i.e., little-endian for x86 and x86_64). - - -<h2>Binary Header</h2> - -<p>The binary header format is show below. Values written by the -profiler, along with requirements currently enforced by the analysis -tools, are shown in parentheses. - -<p> -<table summary="Header Format" - frame="box" rules="sides" cellpadding="5" width="50%"> - <tr> - <th width="30%">slot</th> - <th width="70%">data</th> - </tr> - - <tr> - <td>0</td> - <td>header count (0; must be 0)</td> - </tr> - - <tr> - <td>1</td> - <td>header slots after this one (3; must be >= 3)</td> - </tr> - - <tr> - <td>2</td> - <td>format version (0; must be 0)</td> - </tr> - - <tr> - <td>3</td> - <td>sampling period, in microseconds</td> - </tr> - - <tr> - <td>4</td> - <td>padding (0)</td> - </tr> -</table> - -<p>The headers currently generated for 32-bit and 64-bit little-endian -(x86 and x86_64) profiles are shown below, for comparison. - -<p> -<table summary="Header Example" frame="box" rules="sides" cellpadding="5"> - <tr> - <th></th> - <th>hdr count</th> - <th>hdr words</th> - <th>version</th> - <th>sampling period</th> - <th>pad</th> - </tr> - <tr> - <td>32-bit or 64-bit (slots)</td> - <td>0</td> - <td>3</td> - <td>0</td> - <td>10000</td> - <td>0</td> - </tr> - <tr> - <td>32-bit (4-byte words in file)</td> - <td><tt>0x00000</tt></td> - <td><tt>0x00003</tt></td> - <td><tt>0x00000</tt></td> - <td><tt>0x02710</tt></td> - <td><tt>0x00000</tt></td> - </tr> - <tr> - <td>64-bit LE (4-byte words in file)</td> - <td><tt>0x00000 0x00000</tt></td> - <td><tt>0x00003 0x00000</tt></td> - <td><tt>0x00000 0x00000</tt></td> - <td><tt>0x02710 0x00000</tt></td> - <td><tt>0x00000 0x00000</tt></td> - </tr> -</table> - -<p>The contents are shown in terms of slots, and in terms of 4-byte -words in the profile data file. The slot contents for 32-bit and -64-bit headers are identical. For 32-bit profiles, the 4-byte word -view matches the slot view. For 64-bit profiles, each (8-byte) slot -is shown as two 4-byte words, ordered as they would appear in the -file. - -<p>The profiling tools examine the contents of the file and use the -expected locations and values of the header words field to detect -whether the file is 32-bit or 64-bit. - - -<h2>Binary Profile Records</h2> - -<p>The binary profile record format is shown below. - -<p> -<table summary="Profile Record Format" - frame="box" rules="sides" cellpadding="5" width="50%"> - <tr> - <th width="30%">slot</th> - <th width="70%">data</th> - </tr> - - <tr> - <td>0</td> - <td>sample count, must be >= 1</td> - </tr> - - <tr> - <td>1</td> - <td>number of call chain PCs (num_pcs), must be >= 1</td> - </tr> - - <tr> - <td>2 .. (num_pcs + 1)</td> - <td>call chain PCs, most-recently-called function first. - </tr> -</table> - -<p>The total length of a given record is 2 + num_pcs. - -<p>Note that multiple profile records can be emitted by the profiler -having an identical call chain. In that case, analysis tools should -sum the counts of all records having identical call chains. - -<p><b>Note:</b> Some profile analysis tools terminate if they see -<em>any</em> profile record with a call chain with its first entry -having the address 0. (This is similar to the binary trailer.) - -<h3>Example</h3> - -This example shows the slots contained in a sample profile record. - -<p> -<table summary="Profile Record Example" - frame="box" rules="sides" cellpadding="5"> - <tr> - <td>5</td> - <td>3</td> - <td>0xa0000</td> - <td>0xc0000</td> - <td>0xe0000</td> - </tr> -</table> - -<p>In this example, 5 ticks were received at PC 0xa0000, whose -function had been called by the function containing 0xc0000, which had -been called from the function containing 0xe0000. - - -<h2>Binary Trailer</h2> - -<p>The binary trailer consists of three slots of data with fixed -values, shown below. - -<p> -<table summary="Trailer Format" - frame="box" rules="sides" cellpadding="5" width="50%"> - <tr> - <th width="30%">slot</th> - <th width="70%">value</th> - </tr> - - <tr> - <td>0</td> - <td>0</td> - </tr> - - <tr> - <td>1</td> - <td>1</td> - </tr> - - <tr> - <td>2</td> - <td>0</td> - </tr> -</table> - -<p>Note that this is the same data that would contained in a profile -record with sample count = 0, num_pcs = 1, and a one-element call -chain containing the address 0. - - -<h2>Text List of Mapped Objects</h2> - -<p>The binary data in the file is followed immediately by a list of -mapped objects. This list consists of lines of text separated by -newline characters. - -<p>Each line is one of the following types: - -<ul> - <li>Build specifier, starting with "<tt>build=</tt>". For example: - <pre> build=/path/to/binary</pre> - Leading spaces on the line are ignored. - - <li>Mapping line from ProcMapsIterator::FormatLine. For example: - <pre> 40000000-40015000 r-xp 00000000 03:01 12845071 /lib/ld-2.3.2.so</pre> - The first address must start at the beginning of the line. -</ul> - -<p>Unrecognized lines should be ignored by analysis tools. - -<p>When processing the paths see in mapping lines, occurrences of -<tt>$build</tt> followed by a non-word character (i.e., characters -other than underscore or alphanumeric characters), should be replaced -by the path given on the last build specifier line. - -<hr> -<address>Chris Demetriou<br> -<!-- Created: Mon Aug 27 12:18:26 PDT 2007 --> -<!-- hhmts start --> -Last modified: Mon Aug 27 12:18:26 PDT 2007 (cgd) -<!-- hhmts end --> -</address> -</BODY> -</HTML> http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9661f956/third_party/gperftools/doc/cpuprofile.html ---------------------------------------------------------------------- diff --git a/third_party/gperftools/doc/cpuprofile.html b/third_party/gperftools/doc/cpuprofile.html deleted file mode 100644 index c81feb6..0000000 --- a/third_party/gperftools/doc/cpuprofile.html +++ /dev/null @@ -1,536 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<HTML> - -<HEAD> - <link rel="stylesheet" href="designstyle.css"> - <title>Gperftools CPU Profiler</title> -</HEAD> - -<BODY> - -<p align=right> - <i>Last modified - <script type=text/javascript> - var lm = new Date(document.lastModified); - document.write(lm.toDateString()); - </script></i> -</p> - -<p>This is the CPU profiler we use at Google. There are three parts -to using it: linking the library into an application, running the -code, and analyzing the output.</p> - -<p>On the off-chance that you should need to understand it, the CPU -profiler data file format is documented separately, -<a href="cpuprofile-fileformat.html">here</a>. - - -<H1>Linking in the Library</H1> - -<p>To install the CPU profiler into your executable, add -<code>-lprofiler</code> to the link-time step for your executable. -(It's also probably possible to add in the profiler at run-time using -<code>LD_PRELOAD</code>, e.g. -<code>% env LD_PRELOAD="/usr/lib/libprofiler.so" <binary></code>, -but this isn't necessarily recommended.)</p> - -<p>This does <i>not</i> turn on CPU profiling; it just inserts the -code. For that reason, it's practical to just always link -<code>-lprofiler</code> into a binary while developing; that's what we -do at Google. (However, since any user can turn on the profiler by -setting an environment variable, it's not necessarily recommended to -install profiler-linked binaries into a production, running -system.)</p> - - -<H1>Running the Code</H1> - -<p>There are several alternatives to actually turn on CPU profiling -for a given run of an executable:</p> - -<ol> - <li> <p>Define the environment variable CPUPROFILE to the filename - to dump the profile to. For instance, if you had a version of - <code>/bin/ls</code> that had been linked against libprofiler, - you could run:</p> - <pre>% env CPUPROFILE=ls.prof /bin/ls</pre> - </li> - <li> <p>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 <code>/bin/chrome</code> that had been - been linked against libprofiler, you could run:</p> - <pre>% env CPUPROFILE=chrome.prof CPUPROFILESIGNAL=12 /bin/chrome &</pre> - <p>You can then trigger profiling to start:</p> - <pre>% killall -12 chrome</pre> - <p>Then after a period of time you can tell it to stop which will - generate the profile:</p> - <pre>% killall -12 chrome</pre> - </li> - <li> <p>In your code, bracket the code you want profiled in calls to - <code>ProfilerStart()</code> and <code>ProfilerStop()</code>. - (These functions are declared in <code><gperftools/profiler.h></code>.) - <code>ProfilerStart()</code> will take - the profile-filename as an argument.</p> - </li> -</ol> - -<p>In Linux 2.6 and above, profiling works correctly with threads, -automatically profiling all threads. In Linux 2.4, profiling only -profiles the main thread (due to a kernel bug involving itimers and -threads). Profiling works correctly with sub-processes: each child -process gets its own profile with its own name (generated by combining -CPUPROFILE with the child's process id).</p> - -<p>For security reasons, CPU profiling will not write to a file -- and -is thus not usable -- for setuid programs.</p> - -<p>See the include-file <code>gperftools/profiler.h</code> for -advanced-use functions, including <code>ProfilerFlush()</code> and -<code>ProfilerStartWithOptions()</code>.</p> - - -<H2>Modifying Runtime Behavior</H2> - -<p>You can more finely control the behavior of the CPU profiler via -environment variables.</p> - -<table frame=box rules=sides cellpadding=5 width=100%> - -<tr valign=top> - <td><code>CPUPROFILE_FREQUENCY=<i>x</i></code></td> - <td>default: 100</td> - <td> - How many interrupts/second the cpu-profiler samples. - </td> -</tr> - -<tr valign=top> - <td><code>CPUPROFILE_REALTIME=1</code></td> - <td>default: [not set]</td> - <td> - If set to any value (including 0 or the empty string), use - ITIMER_REAL instead of ITIMER_PROF to gather profiles. In - general, ITIMER_REAL is not as accurate as ITIMER_PROF, and also - interacts badly with use of alarm(), so prefer ITIMER_PROF unless - you have a reason prefer ITIMER_REAL. - </td> -</tr> - -</table> - - -<h1><a name="pprof">Analyzing the Output</a></h1> - -<p><code>pprof</code> is the script used to analyze a profile. It has -many output modes, both textual and graphical. Some give just raw -numbers, much like the <code>-pg</code> output of <code>gcc</code>, -and others show the data in the form of a dependency graph.</p> - -<p>pprof <b>requires</b> <code>perl5</code> to be installed to run. -It also requires <code>dot</code> to be installed for any of the -graphical output routines, and <code>gv</code> to be installed for -<code>--gv</code> mode (described below). -</p> - -<p>Here are some ways to call pprof. These are described in more -detail below.</p> - -<pre> -% pprof /bin/ls ls.prof - Enters "interactive" mode -% pprof --text /bin/ls ls.prof - Outputs one line per procedure -% pprof --gv /bin/ls ls.prof - Displays annotated call-graph via 'gv' -% pprof --gv --focus=Mutex /bin/ls ls.prof - Restricts to code paths including a .*Mutex.* entry -% pprof --gv --focus=Mutex --ignore=string /bin/ls ls.prof - Code paths including Mutex but not string -% pprof --list=getdir /bin/ls ls.prof - (Per-line) annotated source listing for getdir() -% pprof --disasm=getdir /bin/ls ls.prof - (Per-PC) annotated disassembly for getdir() -% pprof --text localhost:1234 - Outputs one line per procedure for localhost:1234 -% pprof --callgrind /bin/ls ls.prof - Outputs the call information in callgrind format -</pre> - - -<h3>Analyzing Text Output</h3> - -<p>Text mode has lines of output that look like this:</p> -<pre> - 14 2.1% 17.2% 58 8.7% std::_Rb_tree::find -</pre> - -<p>Here is how to interpret the columns:</p> -<ol> - <li> Number of profiling samples in this function - <li> Percentage of profiling samples in this function - <li> Percentage of profiling samples in the functions printed so far - <li> Number of profiling samples in this function and its callees - <li> Percentage of profiling samples in this function and its callees - <li> Function name -</ol> - -<h3>Analyzing Callgrind Output</h3> - -<p>Use <a href="http://kcachegrind.sourceforge.net">kcachegrind</a> to -analyze your callgrind output:</p> -<pre> -% pprof --callgrind /bin/ls ls.prof > ls.callgrind -% kcachegrind ls.callgrind -</pre> - -<p>The cost is specified in 'hits', i.e. how many times a function -appears in the recorded call stack information. The 'calls' from -function a to b record how many times function b was found in the -stack traces directly below function a.</p> - -<p>Tip: if you use a debug build the output will include file and line -number information and kcachegrind will show an annotated source -code view.</p> - -<h3>Node Information</h3> - -<p>In the various graphical modes of pprof, the output is a call graph -annotated with timing information, like so:</p> - -<A HREF="pprof-test-big.gif"> -<center><table><tr><td> - <img src="pprof-test.gif"> -</td></tr></table></center> -</A> - -<p>Each node represents a procedure. The directed edges indicate -caller to callee relations. Each node is formatted as follows:</p> - -<center><pre> -Class Name -Method Name -local (percentage) -<b>of</b> cumulative (percentage) -</pre></center> - -<p>The last one or two lines contains the timing information. (The -profiling is done via a sampling method, where by default we take 100 -samples a second. Therefor one unit of time in the output corresponds -to about 10 milliseconds of execution time.) The "local" time is the -time spent executing the instructions directly contained in the -procedure (and in any other procedures that were inlined into the -procedure). The "cumulative" time is the sum of the "local" time and -the time spent in any callees. If the cumulative time is the same as -the local time, it is not printed.</p> - -<p>For instance, the timing information for test_main_thread() -indicates that 155 units (about 1.55 seconds) were spent executing the -code in <code>test_main_thread()</code> and 200 units were spent while -executing <code>test_main_thread()</code> and its callees such as -<code>snprintf()</code>.</p> - -<p>The size of the node is proportional to the local count. The -percentage displayed in the node corresponds to the count divided by -the total run time of the program (that is, the cumulative count for -<code>main()</code>).</p> - -<h3>Edge Information</h3> - -<p>An edge from one node to another indicates a caller to callee -relationship. Each edge is labelled with the time spent by the callee -on behalf of the caller. E.g, the edge from -<code>test_main_thread()</code> to <code>snprintf()</code> indicates -that of the 200 samples in <code>test_main_thread()</code>, 37 are -because of calls to <code>snprintf()</code>.</p> - -<p>Note that <code>test_main_thread()</code> has an edge to -<code>vsnprintf()</code>, even though <code>test_main_thread()</code> -doesn't call that function directly. This is because the code was -compiled with <code>-O2</code>; the profile reflects the optimized -control flow.</p> - -<h3>Meta Information</h3> - -<p>The top of the display should contain some meta information -like:</p> -<pre> - /tmp/profiler2_unittest - Total samples: 202 - Focusing on: 202 - Dropped nodes with <= 1 abs(samples) - Dropped edges with <= 0 samples -</pre> - -<p>This section contains the name of the program, and the total -samples collected during the profiling run. If the -<code>--focus</code> option is on (see the <a href="#focus">Focus</a> -section below), the legend also contains the number of samples being -shown in the focused display. Furthermore, some unimportant nodes and -edges are dropped to reduce clutter. The characteristics of the -dropped nodes and edges are also displayed in the legend.</p> - -<h3><a name=focus>Focus and Ignore</a></h3> - -<p>You can ask pprof to generate a display focused on a particular -piece of the program. You specify a regular expression. Any portion -of the call-graph that is on a path which contains at least one node -matching the regular expression is preserved. The rest of the -call-graph is dropped on the floor. For example, you can focus on the -<code>vsnprintf()</code> libc call in <code>profiler2_unittest</code> -as follows:</p> - -<pre> -% pprof --gv --focus=vsnprintf /tmp/profiler2_unittest test.prof -</pre> -<A HREF="pprof-vsnprintf-big.gif"> -<center><table><tr><td> - <img src="pprof-vsnprintf.gif"> -</td></tr></table></center> -</A> - -<p>Similarly, you can supply the <code>--ignore</code> option to -ignore samples that match a specified regular expression. E.g., if -you are interested in everything except calls to -<code>snprintf()</code>, you can say:</p> -<pre> -% pprof --gv --ignore=snprintf /tmp/profiler2_unittest test.prof -</pre> - - -<h3>Interactive mode</a></h3> - -<p>By default -- if you don't specify any flags to the contrary -- -pprof runs in interactive mode. At the <code>(pprof)</code> prompt, -you can run many of the commands described above. You can type -<code>help</code> for a list of what commands are available in -interactive mode.</p> - -<h3><a name=options>pprof Options</a></h3> - -For a complete list of pprof options, you can run <code>pprof ---help</code>. - -<h4>Output Type</h4> - -<p> -<center> -<table frame=box rules=sides cellpadding=5 width=100%> -<tr valign=top> - <td><code>--text</code></td> - <td> - Produces a textual listing. (Note: If you have an X display, and - <code>dot</code> and <code>gv</code> installed, you will probably - be happier with the <code>--gv</code> output.) - </td> -</tr> -<tr valign=top> - <td><code>--gv</code></td> - <td> - Generates annotated call-graph, converts to postscript, and - displays via gv (requres <code>dot</code> and <code>gv</code> be - installed). - </td> -</tr> -<tr valign=top> - <td><code>--dot</code></td> - <td> - Generates the annotated call-graph in dot format and - emits to stdout (requres <code>dot</code> be installed). - </td> -</tr> -<tr valign=top> - <td><code>--ps</code></td> - <td> - Generates the annotated call-graph in Postscript format and - emits to stdout (requres <code>dot</code> be installed). - </td> -</tr> -<tr valign=top> - <td><code>--pdf</code></td> - <td> - Generates the annotated call-graph in PDF format and emits to - stdout (requires <code>dot</code> and <code>ps2pdf</code> be - installed). - </td> -</tr> -<tr valign=top> - <td><code>--gif</code></td> - <td> - Generates the annotated call-graph in GIF format and - emits to stdout (requres <code>dot</code> be installed). - </td> -</tr> -<tr valign=top> - <td><code>--list=<<i>regexp</i>></code></td> - <td> - <p>Outputs source-code listing of routines whose - name matches <regexp>. Each line - in the listing is annotated with flat and cumulative - sample counts.</p> - - <p>In the presence of inlined calls, the samples - associated with inlined code tend to get assigned - to a line that follows the location of the - inlined call. A more precise accounting can be - obtained by disassembling the routine using the - --disasm flag.</p> - </td> -</tr> -<tr valign=top> - <td><code>--disasm=<<i>regexp</i>></code></td> - <td> - Generates disassembly of routines that match - <regexp>, annotated with flat and - cumulative sample counts and emits to stdout. - </td> -</tr> -</table> -</center> - -<h4>Reporting Granularity</h4> - -<p>By default, pprof produces one entry per procedure. However you can -use one of the following options to change the granularity of the -output. The <code>--files</code> option seems to be particularly -useless, and may be removed eventually.</p> - -<center> -<table frame=box rules=sides cellpadding=5 width=100%> -<tr valign=top> - <td><code>--addresses</code></td> - <td> - Produce one node per program address. - </td> -</tr> - <td><code>--lines</code></td> - <td> - Produce one node per source line. - </td> -</tr> - <td><code>--functions</code></td> - <td> - Produce one node per function (this is the default). - </td> -</tr> - <td><code>--files</code></td> - <td> - Produce one node per source file. - </td> -</tr> -</table> -</center> - -<h4>Controlling the Call Graph Display</h4> - -<p>Some nodes and edges are dropped to reduce clutter in the output -display. The following options control this effect:</p> - -<center> -<table frame=box rules=sides cellpadding=5 width=100%> -<tr valign=top> - <td><code>--nodecount=<n></code></td> - <td> - This option controls the number of displayed nodes. The nodes - are first sorted by decreasing cumulative count, and then only - the top N nodes are kept. The default value is 80. - </td> -</tr> -<tr valign=top> - <td><code>--nodefraction=<f></code></td> - <td> - This option provides another mechanism for discarding nodes - from the display. If the cumulative count for a node is - less than this option's value multiplied by the total count - for the profile, the node is dropped. The default value - is 0.005; i.e. nodes that account for less than - half a percent of the total time are dropped. A node - is dropped if either this condition is satisfied, or the - --nodecount condition is satisfied. - </td> -</tr> -<tr valign=top> - <td><code>--edgefraction=<f></code></td> - <td> - This option controls the number of displayed edges. First of all, - an edge is dropped if either its source or destination node is - dropped. Otherwise, the edge is dropped if the sample - count along the edge is less than this option's value multiplied - by the total count for the profile. The default value is - 0.001; i.e., edges that account for less than - 0.1% of the total time are dropped. - </td> -</tr> -<tr valign=top> - <td><code>--focus=<re></code></td> - <td> - This option controls what region of the graph is displayed - based on the regular expression supplied with the option. - For any path in the callgraph, we check all nodes in the path - against the supplied regular expression. If none of the nodes - match, the path is dropped from the output. - </td> -</tr> -<tr valign=top> - <td><code>--ignore=<re></code></td> - <td> - This option controls what region of the graph is displayed - based on the regular expression supplied with the option. - For any path in the callgraph, we check all nodes in the path - against the supplied regular expression. If any of the nodes - match, the path is dropped from the output. - </td> -</tr> -</table> -</center> - -<p>The dropped edges and nodes account for some count mismatches in -the display. For example, the cumulative count for -<code>snprintf()</code> in the first diagram above was 41. However -the local count (1) and the count along the outgoing edges (12+1+20+6) -add up to only 40.</p> - - -<h1>Caveats</h1> - -<ul> - <li> If the program exits because of a signal, the generated profile - will be <font color=red>incomplete, and may perhaps be - completely empty</font>. - <li> The displayed graph may have disconnected regions because - of the edge-dropping heuristics described above. - <li> If the program linked in a library that was not compiled - with enough symbolic information, all samples associated - with the library may be charged to the last symbol found - in the program before the library. This will artificially - inflate the count for that symbol. - <li> If you run the program on one machine, and profile it on - another, and the shared libraries are different on the two - machines, the profiling output may be confusing: samples that - fall within shared libaries may be assigned to arbitrary - procedures. - <li> If your program forks, the children will also be profiled - (since they inherit the same CPUPROFILE setting). Each process - is profiled separately; to distinguish the child profiles from - the parent profile and from each other, all children will have - their process-id appended to the CPUPROFILE name. - <li> Due to a hack we make to work around a possible gcc bug, your - profiles may end up named strangely if the first character of - your CPUPROFILE variable has ascii value greater than 127. - This should be exceedingly rare, but if you need to use such a - name, just set prepend <code>./</code> to your filename: - <code>CPUPROFILE=./Ägypten</code>. -</ul> - - -<hr> -<address>Sanjay Ghemawat<br> -<!-- Created: Tue Dec 19 10:43:14 PST 2000 --> -<!-- hhmts start --> -Last modified: Fri May 9 14:41:29 PDT 2008 -<!-- hhmts end --> -</address> -</BODY> -</HTML> http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9661f956/third_party/gperftools/doc/designstyle.css ---------------------------------------------------------------------- diff --git a/third_party/gperftools/doc/designstyle.css b/third_party/gperftools/doc/designstyle.css deleted file mode 100644 index 29299af..0000000 --- a/third_party/gperftools/doc/designstyle.css +++ /dev/null @@ -1,109 +0,0 @@ -body { - background-color: #ffffff; - color: black; - margin-right: 1in; - margin-left: 1in; -} - - -h1, h2, h3, h4, h5, h6 { - color: #3366ff; - font-family: sans-serif; -} -@media print { - /* Darker version for printing */ - h1, h2, h3, h4, h5, h6 { - color: #000080; - font-family: helvetica, sans-serif; - } -} - -h1 { - text-align: center; - font-size: 18pt; -} -h2 { - margin-left: -0.5in; -} -h3 { - margin-left: -0.25in; -} -h4 { - margin-left: -0.125in; -} -hr { - margin-left: -1in; -} - -/* Definition lists: definition term bold */ -dt { - font-weight: bold; -} - -address { - text-align: right; -} -/* Use the <code> tag for bits of code and <var> for variables and objects. */ -code,pre,samp,var { - color: #006000; -} -/* Use the <file> tag for file and directory paths and names. */ -file { - color: #905050; - font-family: monospace; -} -/* Use the <kbd> tag for stuff the user should type. */ -kbd { - color: #600000; -} -div.note p { - float: right; - width: 3in; - margin-right: 0%; - padding: 1px; - border: 2px solid #6060a0; - background-color: #fffff0; -} - -UL.nobullets { - list-style-type: none; - list-style-image: none; - margin-left: -1em; -} - -/* pretty printing styles. See prettify.js */ -.str { color: #080; } -.kwd { color: #008; } -.com { color: #800; } -.typ { color: #606; } -.lit { color: #066; } -.pun { color: #660; } -.pln { color: #000; } -.tag { color: #008; } -.atn { color: #606; } -.atv { color: #080; } -pre.prettyprint { padding: 2px; border: 1px solid #888; } - -.embsrc { background: #eee; } - -@media print { - .str { color: #060; } - .kwd { color: #006; font-weight: bold; } - .com { color: #600; font-style: italic; } - .typ { color: #404; font-weight: bold; } - .lit { color: #044; } - .pun { color: #440; } - .pln { color: #000; } - .tag { color: #006; font-weight: bold; } - .atn { color: #404; } - .atv { color: #060; } -} - -/* Table Column Headers */ -.hdr { - color: #006; - font-weight: bold; - background-color: #dddddd; } -.hdr2 { - color: #006; - background-color: #eeeeee; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9661f956/third_party/gperftools/doc/heap-example1.png ---------------------------------------------------------------------- diff --git a/third_party/gperftools/doc/heap-example1.png b/third_party/gperftools/doc/heap-example1.png deleted file mode 100644 index 9a14b6f..0000000 Binary files a/third_party/gperftools/doc/heap-example1.png and /dev/null differ