summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2007-08-13 23:40:43 -0400
committerAli Saidi <saidi@eecs.umich.edu>2007-08-13 23:40:43 -0400
commitb069b81acf498a538b1ce4b30ff8b2d96b2ec8de (patch)
treee9a8fa495ffe1988053f02aff4884b766451c789
parentef32494e723283c5a0a8c27bcb657a0e9ca9e25c (diff)
downloadgem5-b069b81acf498a538b1ce4b30ff8b2d96b2ec8de.tar.xz
Regression: See if using subprocess instead of os.system and erroring immediately will stop regression randomly hanging.
--HG-- extra : convert_revision : a663ae935edd1b6e8f0bb5b08583a5b9761d0939
-rwxr-xr-xutil/regress73
1 files changed, 38 insertions, 35 deletions
diff --git a/util/regress b/util/regress
index 4d3eddab8..fd4bd8863 100755
--- a/util/regress
+++ b/util/regress
@@ -31,6 +31,7 @@ import sys
import os
import optparse
import datetime
+from subprocess import call
progname = os.path.basename(sys.argv[0])
@@ -60,14 +61,20 @@ variants = options.variants.split(',')
# Call os.system() and raise exception if return status is non-zero
def system(cmd):
- if options.verbose:
- print cmd
- status = os.system(cmd)
- if status != 0:
- upper = (status & 0xff00) >> 8
- lower = (status & 0xff)
- raise OSError, "shell command '%s' failed, status %d:%d" \
- % (cmd, upper, lower)
+ try:
+ retcode = call(cmd, shell=True)
+ if retcode < 0:
+ print >>sys.stderr, "Child was terminated by signal", -retcode
+ print >>sys.stderr, "When attemping to execute: %s" % cmd
+ sys.exit(1)
+ elif retcode > 0:
+ print >>sys.stderr, "Child returned", retcode
+ print >>sys.stderr, "When attemping to execute: %s" % cmd
+ sys.exit(1)
+ except OSError, e:
+ print >>sys.stderr, "Execution failed:", e
+ print >>sys.stderr, "When attemping to execute: %s" % cmd
+ sys.exit(1)
# Quote string s so it can be passed as a shell arg
def shellquote(s):
@@ -75,34 +82,30 @@ def shellquote(s):
s = "'%s'" % s
return s
-try:
- if not tests:
- print "No tests specified, just building binaries."
- targets = ['build/%s/m5.%s' % (build, variant)
- for build in builds
- for variant in variants]
- elif 'all' in tests:
- targets = ['build/%s/tests/%s' % (build, variant)
- for build in builds
- for variant in variants]
- else:
- # Ugly! Since we don't have any quick SPARC_FS tests remove the SPARC_FS target
- # If we ever get a quick SPARC_FS test, this code should be removed
- if 'quick' in tests and 'SPARC_FS' in builds:
- builds.remove('SPARC_FS')
- targets = ['build/%s/tests/%s/%s' % (build, variant, test)
- for build in builds
- for variant in variants
- for test in tests]
+if not tests:
+ print "No tests specified, just building binaries."
+ targets = ['build/%s/m5.%s' % (build, variant)
+ for build in builds
+ for variant in variants]
+elif 'all' in tests:
+ targets = ['build/%s/tests/%s' % (build, variant)
+ for build in builds
+ for variant in variants]
+else:
+ # Ugly! Since we don't have any quick SPARC_FS tests remove the SPARC_FS target
+ # If we ever get a quick SPARC_FS test, this code should be removed
+ if 'quick' in tests and 'SPARC_FS' in builds:
+ builds.remove('SPARC_FS')
+ targets = ['build/%s/tests/%s/%s' % (build, variant, test)
+ for build in builds
+ for variant in variants
+ for test in tests]
- scons_opts = options.scons_opts
- if options.jobs != 1:
- scons_opts += ' -j %d' % options.jobs
+scons_opts = options.scons_opts
+if options.jobs != 1:
+ scons_opts += ' -j %d' % options.jobs
- system('scons %s %s' % (scons_opts, ' '.join(targets)))
+system('scons %s %s' % (scons_opts, ' '.join(targets)))
- sys.exit(0)
+sys.exit(0)
-except OSError, exc:
- print "%s: " % progname, exc
- sys.exit(1)