summaryrefslogtreecommitdiff
path: root/src/python
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2007-02-13 00:16:41 -0800
committerNathan Binkert <binkertn@umich.edu>2007-02-13 00:16:41 -0800
commitd7c1436a448ac4f477f658964af6c5b82eb9fcb2 (patch)
treecba9e33bd86f58d154b49e7674e1487f0418251b /src/python
parentf72a9993931c7b986df771878e22cada0028955f (diff)
downloadgem5-d7c1436a448ac4f477f658964af6c5b82eb9fcb2.tar.xz
Rearrange traceflags.py so that the file generation only happens if
the script is invoked as main. This allows us to import traceflags.py if we just want the list of available flags. Embed traceflags.py into the zipfile so it can be accessed from the python side of things. With this, print an error on invalid flags and add --trace-help option that will print out the list of trace flags that are compiled in. If a flag is prefixed with a '-', now that flag will be disabled. --HG-- extra : convert_revision : 2260a596b07d127c582ff73474dbbdb0583db524
Diffstat (limited to 'src/python')
-rw-r--r--src/python/SConscript1
-rw-r--r--src/python/m5/main.py51
2 files changed, 51 insertions, 1 deletions
diff --git a/src/python/SConscript b/src/python/SConscript
index 61cab45f3..51271650f 100644
--- a/src/python/SConscript
+++ b/src/python/SConscript
@@ -97,6 +97,7 @@ addPkg('m5')
pyzip_files.append('m5/defines.py')
pyzip_files.append('m5/info.py')
pyzip_files.append(join(env['ROOT'], 'util/pbs/jobfile.py'))
+pyzip_files.append(join(env['ROOT'], 'src/base/traceflags.py'))
def swig_it(basename):
env.Command(['swig/%s_wrap.cc' % basename, 'm5/internal/%s.py' % basename],
diff --git a/src/python/m5/main.py b/src/python/m5/main.py
index d02bc466b..d42137264 100644
--- a/src/python/m5/main.py
+++ b/src/python/m5/main.py
@@ -29,6 +29,7 @@
import code, optparse, os, socket, sys
from datetime import datetime
from attrdict import attrdict
+import traceflags
__all__ = [ 'options', 'arguments', 'main' ]
@@ -40,6 +41,19 @@ The Regents of The University of Michigan
All Rights Reserved
'''
+def print_list(items, indent=4):
+ line = ' ' * indent
+ for i,item in enumerate(items):
+ if len(line) + len(item) > 76:
+ print line
+ line = ' ' * indent
+
+ if i < len(items) - 1:
+ line += '%s, ' % item
+ else:
+ line += item
+ print line
+
# there's only one option parsing done, so make it global and add some
# helper functions to make it work well.
parser = optparse.OptionParser(usage=usage, version=version,
@@ -135,8 +149,10 @@ add_option("--debug-break", metavar="TIME[,TIME]", action='append', split=',',
# Tracing options
set_group("Trace Options")
+add_option("--trace-help", action='store_true',
+ help="Print help on trace flags")
add_option("--trace-flags", metavar="FLAG[,FLAG]", action='append', split=',',
- help="Sets the flags for tracing")
+ help="Sets the flags for tracing (-FLAG disables a flag)")
add_option("--trace-start", metavar="TIME", type='int',
help="Start tracing at TIME (must be in ticks)")
add_option("--trace-file", metavar="FILE", default="cout",
@@ -231,6 +247,19 @@ def main():
print info.RELEASE_NOTES
print
+ if options.trace_help:
+ done = True
+ print "Base Flags:"
+ print_list(traceflags.baseFlags, indent=4)
+ print
+ print "Compound Flags:"
+ for flag in traceflags.compoundFlags:
+ if flag == 'All':
+ continue
+ print " %s:" % flag
+ print_list(traceflags.compoundFlagMap[flag], indent=8)
+ print
+
if done:
sys.exit(0)
@@ -250,6 +279,7 @@ def main():
if not arguments or not os.path.isfile(arguments[0]):
if arguments and not os.path.isfile(arguments[0]):
print "Script %s not found" % arguments[0]
+
usage(2)
# tell C++ about output directory
@@ -267,9 +297,28 @@ def main():
for when in options.debug_break:
internal.debug.schedBreakCycle(int(when))
+ on_flags = []
+ off_flags = []
for flag in options.trace_flags:
+ off = False
+ if flag.startswith('-'):
+ flag = flag[1:]
+ off = True
+ if flag not in traceflags.allFlags:
+ print >>sys.stderr, "invalid trace flag '%s'" % flag
+ sys.exit(1)
+
+ if off:
+ off_flags.append(flag)
+ else:
+ on_flags.append(flag)
+
+ for flag in on_flags:
internal.trace.set(flag)
+ for flag in off_flags:
+ internal.trace.clear(flag)
+
if options.trace_start is not None:
internal.trace.enabled = False
def enable_trace():