Index: tests/abort.cfa
===================================================================
--- tests/abort.cfa	(revision 0c13238b5b884bbd89f602258bdd1d13c4600011)
+++ tests/abort.cfa	(revision 0c13238b5b884bbd89f602258bdd1d13c4600011)
@@ -0,0 +1,18 @@
+#include <stdlib.h>
+
+int level3() {
+	abort();
+	return 0;
+}
+
+int level2() {
+	return level3();
+}
+
+int level1() {
+	return level2();
+}
+
+int main() {
+	return level1();
+}
Index: tests/pybin/print-core.gdb
===================================================================
--- tests/pybin/print-core.gdb	(revision 0c13238b5b884bbd89f602258bdd1d13c4600011)
+++ tests/pybin/print-core.gdb	(revision 0c13238b5b884bbd89f602258bdd1d13c4600011)
@@ -0,0 +1,4 @@
+echo -----\n
+where
+echo -----\n
+info threads
Index: tests/pybin/tools.py
===================================================================
--- tests/pybin/tools.py	(revision c9aba81c3ee82d43348c6732ccc807c623d1a2cc)
+++ tests/pybin/tools.py	(revision 0c13238b5b884bbd89f602258bdd1d13c4600011)
@@ -3,11 +3,13 @@
 import __main__
 import argparse
+import fileinput
 import multiprocessing
 import os
 import re
+import resource
 import signal
 import stat
 import sys
-import fileinput
+import time
 
 from pybin import settings
@@ -131,7 +133,21 @@
 
     return None
+
+def run(exe, output, input):
+	ret, _ = sh("timeout %d %s > %s 2>&1" % (settings.timeout.single, exe, output), input = input)
+	return ret
+
 ################################################################################
 #               file handling
 ################################################################################
+# move a file
+def mv(source, dest):
+	ret, _ = sh("mv %s %s" % (source, dest))
+	return ret
+
+# cat one file into the other
+def cat(source, dest):
+	ret, _ = sh("cat %s > %s" % (source, dest))
+	return ret
 
 # helper function to replace patterns in a file
@@ -230,4 +246,8 @@
 		signal.signal(signal.SIGINT, signal.SIG_IGN)
 
+
+# enable core dumps for all the test children
+resource.setrlimit(resource.RLIMIT_CORE, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))
+
 ################################################################################
 #               misc
@@ -251,2 +271,27 @@
 	else:
 		print(text)
+
+
+def coreInfo(path):
+	cmd   = os.path.join(settings.SRCDIR, "pybin/print-core.gdb")
+	if not os.path.isfile(cmd):
+		return 1, "ERR Printing format for core dumps not found"
+
+	dname = os.path.dirname(path)
+	core  = os.path.join(dname, "core" )
+	if not os.path.isfile(path):
+		return 1, "ERR Executable path is wrong"
+
+	if not os.path.isfile(core):
+		return 1, "ERR No core dump"
+
+	return sh("gdb -n %s %s -batch -x %s" % (path, core, cmd), print2stdout=False)
+
+class Timed:
+    def __enter__(self):
+        self.start = time.time()
+        return self
+
+    def __exit__(self, *args):
+        self.end = time.time()
+        self.duration = self.end - self.start
Index: tests/test.py
===================================================================
--- tests/test.py	(revision c9aba81c3ee82d43348c6732ccc807c623d1a2cc)
+++ tests/test.py	(revision 0c13238b5b884bbd89f602258bdd1d13c4600011)
@@ -121,11 +121,12 @@
 #               running test functions
 ################################################################################
-# fix the absolute paths in the output
-def fixoutput( fname ):
-	if not is_ascii(fname):
-		return
-
-	file_replace(fname, "%s/" % settings.SRCDIR, "")
-
+def success(val):
+	return val == 0 or settings.dry_run
+
+def isExe(file):
+	return settings.dry_run or fileIsExecutable(file)
+
+def noRule(file, target):
+	return not settings.dry_run and fileContainsOnly(file, "make: *** No rule to make target `%s'.  Stop." % target)
 
 # logic to run a single test and return the result (No handling of printing or other test framework logic)
@@ -143,39 +144,27 @@
 
 	# build, skipping to next test on error
-	before = time.time()
-	make_ret, _ = make( test.target(),
-		redirects  = "2> %s 1> /dev/null" % out_file,
-		error_file = err_file
-	)
-	after = time.time()
-
-	comp_dur = after - before
-
+	with Timed() as comp_dur:
+		make_ret, _ = make( test.target(), 	redirects  = ("2> %s 1> /dev/null" % out_file), error_file = err_file )
+
+	# if the make command succeds continue otherwise skip to diff
 	run_dur = None
-
-	# if the make command succeds continue otherwise skip to diff
-	if make_ret == 0 or settings.dry_run:
-		before = time.time()
-		if settings.dry_run or fileIsExecutable(exe_file) :
-			# run test
-			retcode, _ = sh("timeout %d %s > %s 2>&1" % (settings.timeout.single, exe_file, out_file), input = in_file)
-		else :
-			# simply cat the result into the output
-			retcode, _ = sh("cat %s > %s" % (exe_file, out_file))
-
-		after = time.time()
-		run_dur = after - before
+	if success(make_ret):
+		with Timed() as run_dur:
+			if isExe(exe_file):
+				# run test
+				retcode = run(exe_file, out_file, in_file)
+			else :
+				# simply cat the result into the output
+				retcode = cat(exe_file, out_file)
 	else:
-		retcode, _ = sh("mv %s %s" % (err_file, out_file))
-
-
-	if retcode == 0:
-		# fixoutput(out_file)
+		retcode = mv(err_file, out_file)
+
+	if success(retcode):
 		if settings.generating :
 			# if we are ounly generating the output we still need to check that the test actually exists
-			if not settings.dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'.  Stop." % test.target()) :
-				retcode = 1;
+			if noRule(out_file, test.target()) :
+				retcode = 1
 				error = "\t\tNo make target for test %s!" % test.target()
-				sh("rm %s" % out_file, False)
+				rm(out_file)
 			else:
 				error = None
@@ -188,9 +177,13 @@
 			error = myfile.read()
 
+		ret, info = coreInfo(exe_file)
+		error = error + info
+
+
 
 	# clean the executable
-	sh("rm -f %s > /dev/null 2>&1" % test.target())
-
-	return retcode, error, [comp_dur, run_dur]
+	rm(exe_file)
+
+	return retcode, error, [comp_dur.duration, run_dur.duration if run_dur else None]
 
 # run a single test and handle the errors, outputs, printing, exception handling, etc.
@@ -199,5 +192,5 @@
 	with SignalHandling():
 		# print formated name
-		name_txt = "%20s  " % t.name
+		name_txt = "%24s  " % t.name
 
 		retcode, error, duration = run_single_test(t)
@@ -263,4 +256,5 @@
 	allTests = listTests( options.include, options.exclude )
 
+
 	# if user wants all tests than no other treatement of the test list is required
 	if options.all or options.list or options.list_comp or options.include :
