diff options
Diffstat (limited to 'src/python')
-rw-r--r-- | src/python/SConscript | 1 | ||||
-rw-r--r-- | src/python/m5/main.py | 92 | ||||
-rw-r--r-- | src/python/m5/objects/Root.py | 2 | ||||
-rw-r--r-- | src/python/m5/objects/T1000.py | 5 |
4 files changed, 55 insertions, 45 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..25b52e830 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", @@ -144,33 +160,6 @@ add_option("--trace-file", metavar="FILE", default="cout", add_option("--trace-ignore", metavar="EXPR", action='append', split=':', help="Ignore EXPR sim objects") -# Execution Trace options -set_group("Execution Trace Options") -bool_option("speculative", default=True, - help="Don't capture speculative instructions") -bool_option("print-cycle", default=True, - help="Don't print cycle numbers in trace output") -bool_option("print-symbol", default=True, - help="Disable PC symbols in trace output") -bool_option("print-opclass", default=True, - help="Don't print op class type in trace output") -bool_option("print-thread", default=True, - help="Don't print thread number in trace output") -bool_option("print-effaddr", default=True, - help="Don't print effective address in trace output") -bool_option("print-data", default=True, - help="Don't print result data in trace output") -bool_option("print-iregs", default=False, - help="Print fetch sequence numbers in trace output") -bool_option("print-fetch-seq", default=False, - help="Print fetch sequence numbers in trace output") -bool_option("print-cpseq", default=False, - help="Print correct path sequence numbers in trace output") -#bool_option("print-reg-delta", default=False, -# help="Print which registers changed to what in trace output") -bool_option("legion-lock", default=False, - help="Compare simulator state with Legion simulator every cycle") - options = attrdict() arguments = [] @@ -231,6 +220,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 +252,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 +270,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(): @@ -281,20 +303,6 @@ def main(): for ignore in options.trace_ignore: internal.trace.ignore(ignore) - # set execution trace options - objects.ExecutionTrace.speculative = options.speculative - objects.ExecutionTrace.print_cycle = options.print_cycle - objects.ExecutionTrace.pc_symbol = options.print_symbol - objects.ExecutionTrace.print_opclass = options.print_opclass - objects.ExecutionTrace.print_thread = options.print_thread - objects.ExecutionTrace.print_effaddr = options.print_effaddr - objects.ExecutionTrace.print_data = options.print_data - objects.ExecutionTrace.print_iregs = options.print_iregs - objects.ExecutionTrace.print_fetchseq = options.print_fetch_seq - objects.ExecutionTrace.print_cpseq = options.print_cpseq - #objects.ExecutionTrace.print_reg_delta = options.print_reg_delta - objects.ExecutionTrace.legion_lockstep = options.legion_lock - sys.argv = arguments sys.path = [ os.path.dirname(sys.argv[0]) ] + sys.path diff --git a/src/python/m5/objects/Root.py b/src/python/m5/objects/Root.py index 81482c1de..c78ae6ccb 100644 --- a/src/python/m5/objects/Root.py +++ b/src/python/m5/objects/Root.py @@ -3,7 +3,6 @@ from m5.params import * from Serialize import Serialize from Serialize import Statreset from Statistics import Statistics -from ExeTrace import ExecutionTrace class Root(SimObject): type = 'Root' @@ -16,5 +15,4 @@ class Root(SimObject): # stats = Param.Statistics(Statistics(), "statistics object") # serialize = Param.Serialize(Serialize(), "checkpoint generation options") stats = Statistics() - exetrace = ExecutionTrace() serialize = Serialize() diff --git a/src/python/m5/objects/T1000.py b/src/python/m5/objects/T1000.py index 85c4db6df..3ab6d4283 100644 --- a/src/python/m5/objects/T1000.py +++ b/src/python/m5/objects/T1000.py @@ -69,16 +69,19 @@ class T1000(Platform): fake_ssi = IsaFake(pio_addr=0xff00000000, pio_size=0x10000000) #warn_access="Accessing SSI -- Unimplemented!") + hconsole = SimConsole(listener = ConsoleListener()) hvuart = Uart8250(pio_addr=0xfff0c2c000) htod = DumbTOD() + pconsole = SimConsole(listener = ConsoleListener()) puart0 = Uart8250(pio_addr=0x1f10000000) - console = SimConsole(listener = ConsoleListener()) # Attach I/O devices to specified bus object. Can't do this # earlier, since the bus object itself is typically defined at the # System level. def attachIO(self, bus): + self.hvuart.sim_console = self.hconsole + self.puart0.sim_console = self.pconsole self.fake_clk.pio = bus.port self.fake_membnks.pio = bus.port self.fake_iob.pio = bus.port |