Robert Lor wrote:
> I can't seem to apply the patch on Solaris.

Perhaps the attached patch in -c format will work better.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/
diff -cNr ../cvs-pgsql/configure ./configure
*** ../cvs-pgsql/configure	2006-07-21 23:35:48.000000000 +0200
--- ./configure	2006-07-22 01:21:54.000000000 +0200
***************
*** 314,320 ****
  # 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 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 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 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.
--- 314,320 ----
  # 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 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 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.
***************
*** 865,870 ****
--- 865,871 ----
    --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-dtrace         build with DTrace support
    --enable-depend         turn on automatic dependency tracking
    --enable-cassert        enable assertion checks (for debugging)
    --enable-thread-safety  make client libraries thread-safe
***************
*** 1947,1952 ****
--- 1948,2029 ----
  
  
  #
+ # DTrace
+ #
+ 
+ 
+ 
+ # Check whether --enable-dtrace or --disable-dtrace was given.
+ if test "${enable_dtrace+set}" = set; then
+   enableval="$enable_dtrace"
+ 
+   case $enableval in
+     yes)
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define ENABLE_DTRACE 1
+ _ACEOF
+ 
+ for ac_prog in dtrace
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo "$as_me:$LINENO: checking for $ac_word" >&5
+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+ if test "${ac_cv_prog_DTRACE+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test -n "$DTRACE"; then
+   ac_cv_prog_DTRACE="$DTRACE" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+   for ac_exec_ext in '' $ac_executable_extensions; do
+   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_DTRACE="$ac_prog"
+     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+ done
+ 
+ fi
+ fi
+ DTRACE=$ac_cv_prog_DTRACE
+ if test -n "$DTRACE"; then
+   echo "$as_me:$LINENO: result: $DTRACE" >&5
+ echo "${ECHO_T}$DTRACE" >&6
+ else
+   echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+ fi
+ 
+   test -n "$DTRACE" && break
+ done
+ 
+ 
+       ;;
+     no)
+       :
+       ;;
+     *)
+       { { echo "$as_me:$LINENO: error: no argument expected for --enable-dtrace option" >&5
+ echo "$as_me: error: no argument expected for --enable-dtrace option" >&2;}
+    { (exit 1); exit 1; }; }
+       ;;
+   esac
+ 
+ else
+   enable_dtrace=no
+ 
+ fi;
+ 
+ 
+ 
+ #
  # C compiler
  #
  
***************
*** 22759,22764 ****
--- 22836,22842 ----
  enable_rpath) ;;
  enable_spinlocks) ;;
  enable_debug) ;;
+ enable_dtrace) ;;
  with_CC) ;;
  enable_depend) ;;
  enable_cassert) ;;
***************
*** 23431,23436 ****
--- 23509,23517 ----
  s,@enable_shared@,$enable_shared,;t t
  s,@enable_rpath@,$enable_rpath,;t t
  s,@enable_debug@,$enable_debug,;t t
+ s,@DTRACE@,$DTRACE,;t t
+ s,@DTRACEFLAGS@,$DTRACEFLAGS,;t t
+ s,@enable_dtrace@,$enable_dtrace,;t t
  s,@CC@,$CC,;t t
  s,@CFLAGS@,$CFLAGS,;t t
  s,@LDFLAGS@,$LDFLAGS,;t t
diff -cNr ../cvs-pgsql/configure.in ./configure.in
*** ../cvs-pgsql/configure.in	2006-07-21 23:35:48.000000000 +0200
--- ./configure.in	2006-07-22 01:09:54.000000000 +0200
***************
*** 206,211 ****
--- 206,222 ----
  AC_SUBST(enable_debug)
  
  #
+ # DTrace
+ #
+ PGAC_ARG_BOOL(enable, dtrace, no,
+               [  --enable-dtrace         build with DTrace support],
+ [AC_DEFINE([ENABLE_DTRACE], 1, 
+            [Define to 1 to enable DTrace support. (--enable-dtrace)])
+ AC_CHECK_PROGS(DTRACE, dtrace)
+ AC_SUBST(DTRACEFLAGS)])
+ AC_SUBST(enable_dtrace)
+ 
+ #
  # C compiler
  #
  
diff -cNr ../cvs-pgsql/src/backend/access/transam/xact.c ./src/backend/access/transam/xact.c
*** ../cvs-pgsql/src/backend/access/transam/xact.c	2006-07-21 23:36:01.000000000 +0200
--- ./src/backend/access/transam/xact.c	2006-07-22 00:46:42.000000000 +0200
***************
*** 1384,1389 ****
--- 1384,1391 ----
  
  	XactLockTableInsert(s->transactionId);
  
+ 	PG_TRACE1 (transaction__start, s->transactionId);
+ 
  	/*
  	 * set transaction_timestamp() (a/k/a now()).  We want this to be the
  	 * same as the first command's statement_timestamp(), so don't do a
***************
*** 1535,1540 ****
--- 1537,1544 ----
  		LWLockRelease(ProcArrayLock);
  	}
  
+ 	PG_TRACE1 (transaction__commit, s->transactionId);
+ 
  	/*
  	 * This is all post-commit cleanup.  Note that if an error is raised here,
  	 * it's too late to abort the transaction.  This should be just
***************
*** 1931,1936 ****
--- 1935,1942 ----
  		LWLockRelease(ProcArrayLock);
  	}
  
+ 	PG_TRACE1 (transaction__abort, s->transactionId);
+ 
  	/*
  	 * Post-abort cleanup.	See notes in CommitTransaction() concerning
  	 * ordering.
diff -cNr ../cvs-pgsql/src/backend/Makefile ./src/backend/Makefile
*** ../cvs-pgsql/src/backend/Makefile	2006-07-21 23:36:00.000000000 +0200
--- ./src/backend/Makefile	2006-07-22 01:21:06.000000000 +0200
***************
*** 19,25 ****
  
  SUBSYSOBJS := $(DIRS:%=%/SUBSYS.o)
  
! OBJS := $(SUBSYSOBJS) $(top_builddir)/src/port/libpgport_srv.a
  
  # We put libpgport into OBJS, so remove it from LIBS
  LIBS := $(filter-out -lpgport, $(LIBS))
--- 19,29 ----
  
  SUBSYSOBJS := $(DIRS:%=%/SUBSYS.o)
  
! OBJS = $(SUBSYSOBJS) $(top_builddir)/src/port/libpgport_srv.a
! 
! ifeq ($(enable_dtrace), yes)
! OBJS += probes.o
! endif
  
  # We put libpgport into OBJS, so remove it from LIBS
  LIBS := $(filter-out -lpgport, $(LIBS))
***************
*** 135,140 ****
--- 139,148 ----
  	    $(LN_S) ../../../$(subdir)/utils/fmgroids.h .
  
  
+ probes.o: probes.d $(SUBSYSOBJS)
+ 	$(DTRACE) $(DTRACEFLAGS) -G -s $^
+ 
+ 
  ##########################################################################
  
  distprep:
diff -cNr ../cvs-pgsql/src/backend/probes.d ./src/backend/probes.d
*** ../cvs-pgsql/src/backend/probes.d	1970-01-01 01:00:00.000000000 +0100
--- ./src/backend/probes.d	2006-07-22 01:17:59.000000000 +0200
***************
*** 0 ****
--- 1,24 ----
+ /* ----------
+  *	DTrace probes for PostgreSQL backend
+  *
+  *	Copyright (c) 2006, PostgreSQL Global Development Group
+  *
+  *	$PostgreSQL$
+  * ----------
+  */
+ 
+ provider postgresql {
+ 
+ probe transaction__start(int);
+ probe transaction__commit(int);
+ probe transaction__abort(int);
+ probe lwlock__acquire(int, int);
+ probe lwlock__release(int);
+ probe lwlock__startwait(int, int);
+ probe lwlock__endwait(int, int);
+ probe lwlock__condacquire(int, int);
+ probe lwlock__condacquire__fail(int, int);
+ probe lock__startwait(int, int);
+ probe lock__endwait(int, int);
+ 
+ };
diff -cNr ../cvs-pgsql/src/backend/storage/lmgr/lock.c ./src/backend/storage/lmgr/lock.c
*** ../cvs-pgsql/src/backend/storage/lmgr/lock.c	2006-07-21 23:36:08.000000000 +0200
--- ./src/backend/storage/lmgr/lock.c	2006-07-22 00:49:47.000000000 +0200
***************
*** 752,759 ****
--- 752,764 ----
  		/*
  		 * Sleep till someone wakes me up.
  		 */
+ 
+ 		PG_TRACE2(lock__startwait, locktag->locktag_field2, lockmode);
+ 
  		WaitOnLock(locallock, owner);
  
+ 		PG_TRACE2(lock__endwait, locktag->locktag_field2, lockmode);
+ 
  		/*
  		 * NOTE: do not do any material change of state between here and
  		 * return.	All required changes in locktable state must have been
diff -cNr ../cvs-pgsql/src/backend/storage/lmgr/lwlock.c ./src/backend/storage/lmgr/lwlock.c
*** ../cvs-pgsql/src/backend/storage/lmgr/lwlock.c	2006-07-21 23:36:08.000000000 +0200
--- ./src/backend/storage/lmgr/lwlock.c	2006-07-22 00:50:23.000000000 +0200
***************
*** 424,429 ****
--- 424,431 ----
  		block_counts[lockid]++;
  #endif
  
+ 		PG_TRACE2(lwlock__startwait, lockid, mode);
+ 
  		for (;;)
  		{
  			/* "false" means cannot accept cancel/die interrupt here. */
***************
*** 433,438 ****
--- 435,442 ----
  			extraWaits++;
  		}
  
+ 		PG_TRACE2(lwlock__endwait, lockid, mode);
+ 
  		LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
  
  		/* Now loop back and try to acquire lock again. */
***************
*** 442,447 ****
--- 446,453 ----
  	/* We are done updating shared state of the lock itself. */
  	SpinLockRelease(&lock->mutex);
  
+ 	PG_TRACE2(lwlock__acquire, lockid, mode);
+ 
  	/* Add lock to list of locks held by this backend */
  	held_lwlocks[num_held_lwlocks++] = lockid;
  
***************
*** 511,521 ****
--- 517,529 ----
  		/* Failed to get lock, so release interrupt holdoff */
  		RESUME_INTERRUPTS();
  		LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
+ 		PG_TRACE2(lwlock__condacquire__fail, lockid, mode);
  	}
  	else
  	{
  		/* Add lock to list of locks held by this backend */
  		held_lwlocks[num_held_lwlocks++] = lockid;
+ 		PG_TRACE2(lwlock__condacquire, lockid, mode);
  	}
  
  	return !mustwait;
***************
*** 600,605 ****
--- 608,615 ----
  	/* We are done updating shared state of the lock itself. */
  	SpinLockRelease(&lock->mutex);
  
+ 	PG_TRACE1(lwlock__release, lockid);
+ 
  	/*
  	 * Awaken any waiters I removed from the queue.
  	 */
diff -cNr ../cvs-pgsql/src/include/c.h ./src/include/c.h
*** ../cvs-pgsql/src/include/c.h	2006-07-21 23:36:15.000000000 +0200
--- ./src/include/c.h	2006-07-22 00:46:42.000000000 +0200
***************
*** 56,61 ****
--- 56,62 ----
  #include "pg_config_os.h"		/* must be before any system header files */
  #endif
  #include "postgres_ext.h"
+ #include "pg_trace.h"
  
  #if defined(_MSC_VER) || defined(__BORLANDC__)
  #define	WIN32_ONLY_COMPILER
diff -cNr ../cvs-pgsql/src/include/pg_config.h.in ./src/include/pg_config.h.in
*** ../cvs-pgsql/src/include/pg_config.h.in	2006-07-21 23:36:15.000000000 +0200
--- ./src/include/pg_config.h.in	2006-07-22 00:46:42.000000000 +0200
***************
*** 36,41 ****
--- 36,44 ----
  /* Define to the default TCP port number as a string constant. */
  #undef DEF_PGPORT_STR
  
+ /* Define to 1 to enable DTrace support. (--enable-dtrace) */
+ #undef ENABLE_DTRACE
+ 
  /* Define to 1 if you want National Language Support. (--enable-nls) */
  #undef ENABLE_NLS
  
diff -cNr ../cvs-pgsql/src/include/pg_trace.h ./src/include/pg_trace.h
*** ../cvs-pgsql/src/include/pg_trace.h	1970-01-01 01:00:00.000000000 +0100
--- ./src/include/pg_trace.h	2006-07-22 00:54:22.000000000 +0200
***************
*** 0 ****
--- 1,56 ----
+ /* ----------
+  *	pg_trace.h
+  *
+  *	Definitions for the PostgreSQL tracing framework
+  *
+  *	Copyright (c) 2006, PostgreSQL Global Development Group
+  *
+  *	$PostgreSQL$
+  * ----------
+  */
+ 
+ #ifndef PG_TRACE_H
+ #define PG_TRACE_H
+ 
+ #ifdef ENABLE_DTRACE
+ 
+ #include <sys/sdt.h>
+ 
+ /*
+  * The PG_TRACE macros are mapped to the appropriate macros used by DTrace.
+  *
+  * Only one DTrace provider called "postgresql" will be used for PostgreSQL,
+  * so the name is hard-coded here to avoid having to specify it in the
+  * source code. 
+  */
+ 
+ #define PG_TRACE(name) \
+ 	DTRACE_PROBE(postgresql, name)
+ #define PG_TRACE1(name, arg1) \
+ 	DTRACE_PROBE1(postgresql, name, arg1)
+ #define PG_TRACE2(name, arg1, arg2) \
+ 	DTRACE_PROBE2(postgresql, name, arg1, arg2)
+ #define PG_TRACE3(name, arg1, arg2, arg3) \
+ 	DTRACE_PROBE3(postgresql, name, arg1, arg2, arg3)
+ #define PG_TRACE4(name, arg1, arg2, arg3, arg4) \
+ 	DTRACE_PROBE4(postgresql, name, arg1, arg2, arg3, arg4)
+ #define PG_TRACE5(name, arg1, arg2, arg3, arg4, arg5) \
+ 	DTRACE_PROBE5(postgresql, name, arg1, arg2, arg3, arg4, arg5)
+ 
+ #else /* not ENABLE_DTRACE */
+ 
+ /*
+  * Unless DTrace is explicitly enabled with --enable-dtrace, the PG_TRACE
+  * macros will expand to no-ops.
+  */
+ 
+ #define PG_TRACE(name)
+ #define PG_TRACE1(name, arg1)
+ #define PG_TRACE2(name, arg1, arg2)
+ #define PG_TRACE3(name, arg1, arg2, arg3)
+ #define PG_TRACE4(name, arg1, arg2, arg3, arg4)
+ #define PG_TRACE5(name, arg1, arg2, arg3, arg4, arg5)
+ 
+ #endif /* not ENABLE_DTRACE */
+ 
+ #endif /* PG_TRACE_H */
diff -cNr ../cvs-pgsql/src/Makefile.global.in ./src/Makefile.global.in
*** ../cvs-pgsql/src/Makefile.global.in	2006-07-22 00:37:37.000000000 +0200
--- ./src/Makefile.global.in	2006-07-22 01:09:53.000000000 +0200
***************
*** 157,162 ****
--- 157,163 ----
  enable_rpath	= @enable_rpath@
  enable_nls	= @enable_nls@
  enable_debug	= @enable_debug@
+ enable_dtrace	= @enable_dtrace@
  enable_thread_safety	= @enable_thread_safety@
  
  python_includespec	= @python_includespec@
***************
*** 212,217 ****
--- 213,220 ----
  YFLAGS = @YFLAGS@
  FLEX = @FLEX@
  FLEXFLAGS = @FLEXFLAGS@ $(LFLAGS)
+ DTRACE = @DTRACE@
+ DTRACEFLAGS = @DTRACEFLAGS@
  
  # Linking
  
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

Reply via email to