Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.508
diff -c -c -r1.508 postmaster.c
*** src/backend/postmaster/postmaster.c	16 Jan 2007 13:28:56 -0000	1.508
--- src/backend/postmaster/postmaster.c	22 Jan 2007 18:29:01 -0000
***************
*** 2421,2426 ****
--- 2421,2427 ----
  				(errmsg("%s (PID %d) exited with exit code %d",
  						procname, pid, WEXITSTATUS(exitstatus))));
  	else if (WIFSIGNALED(exitstatus))
+ #ifndef WIN32
  		ereport(lev,
  
  		/*------
***************
*** 2428,2433 ****
--- 2429,2443 ----
  		  "server process" */
  				(errmsg("%s (PID %d) was terminated by signal %d",
  						procname, pid, WTERMSIG(exitstatus))));
+ #else
+ 		ereport(lev,
+ 
+ 		/*------
+ 		  translator: %s is a noun phrase describing a child process, such as
+ 		  "server process" */
+ 				(errmsg("%s (PID %d) was terminated by exception %X\nSee http://source.winehq.org/source/include/ntstatus.h for a description\nof the hex value.",
+ 						procname, pid, WTERMSIG(exitstatus))));
+ #endif
  	else
  		ereport(lev,
  
Index: src/include/port/win32.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/port/win32.h,v
retrieving revision 1.65
diff -c -c -r1.65 win32.h
*** src/include/port/win32.h	11 Jan 2007 02:42:31 -0000	1.65
--- src/include/port/win32.h	22 Jan 2007 18:29:02 -0000
***************
*** 115,130 ****
  
  /*
   *	Signal stuff
!  *	WIN32 doesn't have wait(), so the return value for children
!  *	is simply the return value specified by the child, without
!  *	any additional information on whether the child terminated
!  *	on its own or via a signal.  These macros are also used
!  *	to interpret the return value of system().
!  */
! #define WEXITSTATUS(w)	(w)
! #define WIFEXITED(w)	(true)
! #define WIFSIGNALED(w)	(false)
! #define WTERMSIG(w)		(0)
  
  #define sigmask(sig) ( 1 << ((sig)-1) )
  
--- 115,152 ----
  
  /*
   *	Signal stuff
!  *
!  *	For WIN32, there is no wait() call so there are no wait() macros
!  *	to interpret the return value of system().  Instead, system()
!  *	return values < 0x100 are used for exit() termination, and higher
!  *	values are used to indicated non-exit() termination, which is
!  *	similar to a unix-style signal exit (think SIGSEGV ==
!  *	STATUS_ACCESS_VIOLATION).  Return values are broken up into groups:
!  *
!  *	http://msdn2.microsoft.com/en-gb/library/aa489609.aspx
!  *
!  *		NT_SUCCESS			0 - 0x3FFFFFFF
!  *		NT_INFORMATION		0x40000000 - 0x7FFFFFFF
!  *		NT_WARNING			0x80000000 - 0xBFFFFFFF
!  *		NT_ERROR			0xC0000000 - 0xFFFFFFFF
!  *
!  *	Effectively, we don't care on the severity of the return value from
!  *	system(), we just need to know if it was because of exit() or generated
!  *	by the system, and it seems values >= 0x100 are system-generated.
!  *	See this URL for a list of WIN32 STATUS_* values:
!  *
!  *		Wine (URL used in our error messages) -
!  *			http://source.winehq.org/source/include/ntstatus.h
!  *		Descriptions - http://www.comp.nus.edu.sg/~wuyongzh/my_doc/ntstatus.txt
!  *		MS SDK - http://www.nologs.com/ntstatus.html
!  *
!  *	Some day we might want to print descriptions for the most common
!  *	exceptions, rather than printing a URL.
!  */
! #define WIFEXITED(w)    (((w) & 0xffffff00) == 0)
! #define WIFSIGNALED(w)  (!WIFEXITED(w))
! #define WEXITSTATUS(w)  (w)
! #define WTERMSIG(w)     (w)
  
  #define sigmask(sig) ( 1 << ((sig)-1) )
  
Index: src/port/exec.c
===================================================================
RCS file: /cvsroot/pgsql/src/port/exec.c,v
retrieving revision 1.44
diff -c -c -r1.44 exec.c
*** src/port/exec.c	5 Jan 2007 22:20:02 -0000	1.44
--- src/port/exec.c	22 Jan 2007 18:29:03 -0000
***************
*** 582,589 ****
--- 582,594 ----
  		log_error(_("child process exited with exit code %d"),
  				  WEXITSTATUS(exitstatus));
  	else if (WIFSIGNALED(exitstatus))
+ #ifndef WIN32
  		log_error(_("child process was terminated by signal %d"),
  				  WTERMSIG(exitstatus));
+ #else
+ 		log_error(_("child process was terminated by exception %X\nSee http://source.winehq.org/source/include/ntstatus.h for a description\nof the hex value."),
+ 				  WTERMSIG(exitstatus));
+ #endif
  	else
  		log_error(_("child process exited with unrecognized status %d"),
  				  exitstatus);
