# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS configure_args build build_cpu build_vendor build_os host host_cpu host_vendor host_os PORTNAME docdir enable_nls WANTED_LANGUAGES default_port enable_shared enable_rpath enable_debug DTRACE DTRACEFLAGS enable_dtrace CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GCC TAS autodepend INCLUDES enable_thread_safety with_tcl with_perl with_python with_krb5 krb_srvtab with_pam with_ldap with_bonjour with_openssl XML2_CONFIG with_zlib EGREP ELF_SYS LDFLAGS_SL AWK FLEX FLEXFLAGS LN_S LD with_gnu_ld ld_R_works RANLIB ac_ct_RANLIB TAR STRIP ac_ct_STRIP STRIP_STATIC_LIB STRIP_SHARED_LIB YACC YFLAGS PERL perl_archlibexp perl_privlibexp perl_useshrplib perl_embed_ldflags PYTHON python_version python_configdir python_includespec python_libdir python_libspec python_additional_libs HAVE_IPV6 LIBOBJS acx_pthread_config PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS LDAP_LIBS_FE LDAP_LIBS_BE HAVE_POSIX_SIGNALS MSGFMT MSGMERGE XGETTEXT localedir TCLSH TCL_CONFIG_SH TCL_INCLUDE_SPEC TCL_LIB_FILE TCL_LIBS TCL_LIB_SPEC TCL_SHARED_BUILD TCL_SHLIB_LD_LIBS NSGMLS JADE have_docbook DOCBOOKSTYLE COLLATEINDEX SGMLSPL vpath_build LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS configure_args build build_cpu build_vendor build_os host host_cpu host_vendor host_os PORTNAME docdir enable_nls WANTED_LANGUAGES default_port enable_shared enable_rpath enable_debug enable_profiling DTRACE DTRACEFLAGS enable_dtrace CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GCC TAS autodepend INCLUDES enable_thread_safety with_tcl with_perl with_python with_krb5 krb_srvtab with_pam with_ldap with_bonjour with_openssl XML2_CONFIG with_zlib EGREP ELF_SYS LDFLAGS_SL AWK FLEX FLEXFLAGS LN_S LD with_gnu_ld ld_R_works RANLIB ac_ct_RANLIB TAR STRIP ac_ct_STRIP STRIP_STATIC_LIB STRIP_SHARED_LIB YACC YFLAGS PERL perl_archlibexp perl_privlibexp perl_useshrplib perl_embed_ldflags PYTHON python_version python_configdir python_includespec python_libdir python_libspec python_additional_libs HAVE_IPV6 LIBOBJS acx_pthread_config PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS LDAP_LIBS_FE LDAP_LIBS_BE HAVE_POSIX_SIGNALS MSGFMT MSGMERGE XGETTEXT localedir TCLSH TCL_CONFIG_SH TCL_INCLUDE_SPEC TCL_LIB_FILE TCL_LIBS TCL_LIB_SPEC TCL_SHARED_BUILD TCL_SHLIB_LD_LIBS NSGMLS JADE have_docbook DOCBOOKSTYLE COLLATEINDEX SGMLSPL vpath_build LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
--disable-rpath do not embed shared library search path in executables
--disable-spinlocks do not use spinlocks
--enable-debug build with debugging symbols (-g)
+ --enable-profiling build with profiling enabled
--enable-dtrace build with DTrace support
--enable-depend turn on automatic dependency tracking
--enable-cassert enable assertion checks (for debugging)
+#
+# --enable-profiling enables gcc profiling
+#
+
+pgac_args="$pgac_args enable_profiling"
+
+# Check whether --enable-profiling or --disable-profiling was given.
+if test "${enable_profiling+set}" = set; then
+ enableval="$enable_profiling"
+
+ case $enableval in
+ yes)
+ :
+ ;;
+ no)
+ :
+ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: no argument expected for --enable-profiling option" >&5
+echo "$as_me: error: no argument expected for --enable-profiling option" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+else
+ enable_profiling=no
+
+fi;
+
+
+
#
# DTrace
#
CFLAGS="$CFLAGS -g"
fi
+# enable profiling if --enable-profiling
+if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then
+ if test "$GCC" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define PROFILE_PID_DIR 1
+_ACEOF
+
+ CFLAGS="$CFLAGS -pg"
+ else
+ { { echo "$as_me:$LINENO: error: --enable-profiling is supported only when using GCC" >&5
+echo "$as_me: error: --enable-profiling is supported only when using GCC" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
{ echo "$as_me:$LINENO: using CFLAGS=$CFLAGS" >&5
echo "$as_me: using CFLAGS=$CFLAGS" >&6;}
s,@enable_shared@,$enable_shared,;t t
s,@enable_rpath@,$enable_rpath,;t t
s,@enable_debug@,$enable_debug,;t t
+s,@enable_profiling@,$enable_profiling,;t t
s,@DTRACE@,$DTRACE,;t t
s,@DTRACEFLAGS@,$DTRACEFLAGS,;t t
s,@enable_dtrace@,$enable_dtrace,;t t
dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.501 2007/02/07 00:28:54 petere Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.502 2007/02/21 15:12:39 momjian Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
[ --enable-debug build with debugging symbols (-g)])
AC_SUBST(enable_debug)
+#
+# --enable-profiling enables gcc profiling
+#
+PGAC_ARG_BOOL(enable, profiling, no,
+ [ --enable-profiling build with profiling enabled ])
+AC_SUBST(enable_profiling)
+
#
# DTrace
#
CFLAGS="$CFLAGS -g"
fi
+# enable profiling if --enable-profiling
+if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then
+ if test "$GCC" = yes; then
+ AC_DEFINE([PROFILE_PID_DIR], 1,
+ [Define to 1 to enable profiling. (--enable-profiling)])
+ CFLAGS="$CFLAGS -pg"
+ else
+ AC_MSG_ERROR([--enable-profiling is supported only when using GCC])
+ fi
+fi
+
AC_MSG_NOTICE([using CFLAGS=$CFLAGS])
# We already have this in Makefile.win32, but configure needs it too
-<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.284 2007/02/19 18:57:18 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.285 2007/02/21 15:12:39 momjian Exp $ -->
<chapter id="installation">
<title><![%standalone-include[<productname>PostgreSQL</>]]>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--enable-profiling</option></term>
+ <listitem>
+ <para>
+ If using GCC, all programs and libraries are compiled so they
+ can be profiled. On backend exit, a subdirectory will be created
+ that contains the <filename>gmon.out</> file for use in profiling.
+ This option is for use only with GCC and when doing development work.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>--enable-cassert</option></term>
<listitem>
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/ipc/ipc.c,v 1.95 2007/01/05 22:19:37 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/ipc/ipc.c,v 1.96 2007/02/21 15:12:39 momjian Exp $
*
*-------------------------------------------------------------------------
*/
on_proc_exit_list[on_proc_exit_index].arg);
elog(DEBUG3, "exit(%d)", code);
+
+#ifdef PROFILE_PID_DIR
+ {
+ /*
+ * If we are profiling ourself then gprof's mcleanup() is about
+ * to write out a profile to ./gmon.out. Since mcleanup() always
+ * uses a fixed file name, each backend will overwrite earlier
+ * profiles. To fix that, we create a separate subdirectory for
+ * each backend (./gprof/pid) and 'cd' to that subdirectory before
+ * we exit() - that forces mcleanup() to write each profile into
+ * its own directory. We end up with something like:
+ * $PGDATA/gprof/8829/gmon.out
+ * $PGDATA/gprof/8845/gmon.out
+ * ...
+ *
+ * Note that we do this here instead of in an on_proc_exit()
+ * callback because we want to ensure that this code executes
+ * last - we don't want to interfere with any other on_proc_exit()
+ * callback.
+ */
+ char gprofDirName[32];
+
+ snprintf(gprofDirName, 32, "gprof/%d", (int) getpid());
+
+ mkdir("gprof", 0777);
+ mkdir(gprofDirName, 0777);
+ chdir(gprofDirName);
+ }
+#endif
+
exit(code);
}
/* A string containing the version number, platform, and C compiler */
#undef PG_VERSION_STR
+/* Define to 1 to enable profiling. (--enable-profiling) */
+#undef PROFILE_PID_DIR
+
/* Define to the necessary symbol if this constant uses a non-standard name on
your system. */
#undef PTHREAD_CREATE_JOINABLE