Index: tests/pybin/tools.py
===================================================================
--- tests/pybin/tools.py	(revision 25cdca5c4a8db986ee82c5ee8c23332ae17e445d)
+++ tests/pybin/tools.py	(revision 76d3ca627c3ea893099f6a38248fd639209fdfe5)
@@ -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
