--- run_build.pl.orig 2006-12-28 17:32:14.000000000 -0500 +++ run_build.pl.new 2006-12-28 17:58:51.000000000 -0500 @@ -795,6 +795,29 @@ $dbstarted=undef; } + +sub get_stack_trace +{ + my $bindir = shift; + my $pgdata = shift; + + # no core = no result + return () unless -f "$pgdata/core"; + + # no gdb = no result + system "gdb --version > /dev/null 2>&1"; + my $status = $? >>8; + return () if $status; + + my @trace = `gdb -ex bt --batch $bindir/postgres $pgdata/core 2>&1`; + + unshift(@trace, + "\n\n================== stack trace ==================\n"); + + return @trace; + +} + sub make_install_check { my @checkout = `cd $pgsql/src/test/regress && $make installcheck 2>&1`; @@ -814,6 +837,11 @@ } close($handle); } + if ($status) + { + my @trace = get_stack_trace("$installdir/bin","$installdir/data"); + push(@checkout,@trace); + } writelog('install-check',\@checkout); print "======== make installcheck log ===========\n",@checkout if ($verbose > 1); @@ -839,6 +867,11 @@ } close($handle); } + if ($status) + { + my @trace = get_stack_trace("$installdir/bin","$installdir/data"); + push(@checkout,@trace); + } writelog('contrib-install-check',\@checkout); print "======== make contrib installcheck log ===========\n",@checkout if ($verbose > 1); @@ -864,6 +897,11 @@ } close($handle); } + if ($status) + { + my @trace = get_stack_trace("$installdir/bin","$installdir/data"); + push(@checkout,@trace); + } writelog('pl-install-check',\@checkout); print "======== make pl installcheck log ===========\n",@checkout if ($verbose > 1); @@ -892,6 +930,13 @@ } close($handle); } + if ($status) + { + my @trace = + get_stack_trace("$pgsql/src/test/regress/install$installdir/bin", + "$pgsql/src/test/regress/tmp_check/data"); + push(@makeout,@trace); + } writelog('check',\@makeout); print "======== make check logs ===========\n",@makeout if ($verbose > 1);