summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2016-11-28 16:40:45 +0000
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-03-21 10:30:02 +0000
commit7110d2313e44bf4b611534bbc921ec9808476a37 (patch)
treeaf438d63af1c2c2f0a99b71908beb761033b1e60
parent065bb8c65569004704183ee0eb9eb1b55b9ed574 (diff)
downloadgem5-7110d2313e44bf4b611534bbc921ec9808476a37.tar.xz
python: Automatically disable listeners in batch setups
Determine if gem5 is running in a batch environment by checking if STDIN is wired to a TTY or not. If the simulator is running in a batch environment, disable all listeners by default. This behavior can be overridden using the --enable-listeners option. Change-Id: I404c709135339144216bf08a2769c016c543333c Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Sean McGoogan <sean.mcgoogan@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2322 Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
-rw-r--r--src/python/m5/main.py33
-rw-r--r--src/python/m5/util/__init__.py17
2 files changed, 49 insertions, 1 deletions
diff --git a/src/python/m5/main.py b/src/python/m5/main.py
index 42c4911dc..b987af4c8 100644
--- a/src/python/m5/main.py
+++ b/src/python/m5/main.py
@@ -1,3 +1,15 @@
+# Copyright (c) 2016 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder. You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
# Copyright (c) 2005 The Regents of The University of Michigan
# All rights reserved.
#
@@ -48,6 +60,8 @@ def parse_options():
option = options.add_option
group = options.set_group
+ listener_modes = ( "on", "off", "auto" )
+
# Help options
option('-B', "--build-info", action="store_true", default=False,
help="Show build information")
@@ -67,6 +81,10 @@ def parse_options():
help="Filename for -r redirection [Default: %default]")
option("--stderr-file", metavar="FILE", default="simerr",
help="Filename for -e redirection [Default: %default]")
+ option("--listener-mode", metavar="{on,off,auto}",
+ choices=listener_modes, default="auto",
+ help="Port (e.g., gdb) listener mode (auto: Enable if running " \
+ "interactively) [Default: %default]")
option('-i', "--interactive", action="store_true", default=False,
help="Invoke the interactive interpreter after running the script")
option("--pdb", action="store_true", default=False,
@@ -179,7 +197,7 @@ def main(*args):
import stats
import trace
- from util import fatal
+ from util import inform, fatal, panic, isInteractive
if len(args) == 0:
options, arguments = parse_options()
@@ -321,6 +339,19 @@ def main(*args):
# set stats options
stats.addStatVisitor(options.stats_file)
+ # Disable listeners unless running interactively or explicitly
+ # enabled
+ if options.listener_mode == "off":
+ m5.disableAllListeners()
+ elif options.listener_mode == "auto":
+ if not isInteractive():
+ inform("Standard input is not a terminal, disabling listeners.")
+ m5.disableAllListeners()
+ elif options.listener_mode == "on":
+ pass
+ else:
+ panic("Unhandled listener mode: %s" % options.listener_mode)
+
# set debugging options
debug.setRemoteGDBPort(options.remote_gdb_port)
for when in options.debug_break:
diff --git a/src/python/m5/util/__init__.py b/src/python/m5/util/__init__.py
index a832f0e93..573674879 100644
--- a/src/python/m5/util/__init__.py
+++ b/src/python/m5/util/__init__.py
@@ -1,3 +1,15 @@
+# Copyright (c) 2016 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder. You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
# Copyright (c) 2008-2009 The Hewlett-Packard Development Company
# Copyright (c) 2004-2006 The Regents of The University of Michigan
# All rights reserved.
@@ -195,3 +207,8 @@ def makeDir(path):
raise AttributeError, "%s exists but is not directory" % path
else:
os.mkdir(path)
+
+def isInteractive():
+ """Check if the simulator is run interactively or in a batch environment"""
+
+ return sys.__stdin__.isatty()