main.py revision 4123
113481Sgiacomo.travaglini@arm.com# Copyright (c) 2005 The Regents of The University of Michigan 213481Sgiacomo.travaglini@arm.com# All rights reserved. 313481Sgiacomo.travaglini@arm.com# 413481Sgiacomo.travaglini@arm.com# Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com# modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com# met: redistributions of source code must retain the above copyright 713481Sgiacomo.travaglini@arm.com# notice, this list of conditions and the following disclaimer; 813481Sgiacomo.travaglini@arm.com# redistributions in binary form must reproduce the above copyright 913481Sgiacomo.travaglini@arm.com# notice, this list of conditions and the following disclaimer in the 1013481Sgiacomo.travaglini@arm.com# documentation and/or other materials provided with the distribution; 1113481Sgiacomo.travaglini@arm.com# neither the name of the copyright holders nor the names of its 1213481Sgiacomo.travaglini@arm.com# contributors may be used to endorse or promote products derived from 1313481Sgiacomo.travaglini@arm.com# this software without specific prior written permission. 1413481Sgiacomo.travaglini@arm.com# 1513481Sgiacomo.travaglini@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1613481Sgiacomo.travaglini@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1713481Sgiacomo.travaglini@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1813481Sgiacomo.travaglini@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1913481Sgiacomo.travaglini@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2013481Sgiacomo.travaglini@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2113481Sgiacomo.travaglini@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2213481Sgiacomo.travaglini@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2313481Sgiacomo.travaglini@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2413481Sgiacomo.travaglini@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2513481Sgiacomo.travaglini@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2613481Sgiacomo.travaglini@arm.com# 2713481Sgiacomo.travaglini@arm.com# Authors: Nathan Binkert 2813481Sgiacomo.travaglini@arm.com 2913481Sgiacomo.travaglini@arm.comimport code, optparse, os, socket, sys 3013481Sgiacomo.travaglini@arm.comfrom datetime import datetime 3113481Sgiacomo.travaglini@arm.comfrom attrdict import attrdict 3213481Sgiacomo.travaglini@arm.comimport traceflags 3313481Sgiacomo.travaglini@arm.com 3413481Sgiacomo.travaglini@arm.com__all__ = [ 'options', 'arguments', 'main' ] 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.comusage="%prog [m5 options] script.py [script options]" 3713481Sgiacomo.travaglini@arm.comversion="%prog 2.0" 3813481Sgiacomo.travaglini@arm.combrief_copyright=''' 3913481Sgiacomo.travaglini@arm.comCopyright (c) 2001-2006 4013481Sgiacomo.travaglini@arm.comThe Regents of The University of Michigan 4113481Sgiacomo.travaglini@arm.comAll Rights Reserved 4213481Sgiacomo.travaglini@arm.com''' 4313481Sgiacomo.travaglini@arm.com 4413481Sgiacomo.travaglini@arm.comdef print_list(items, indent=4): 4513481Sgiacomo.travaglini@arm.com line = ' ' * indent 4613481Sgiacomo.travaglini@arm.com for i,item in enumerate(items): 4713481Sgiacomo.travaglini@arm.com if len(line) + len(item) > 76: 4813481Sgiacomo.travaglini@arm.com print line 4913481Sgiacomo.travaglini@arm.com line = ' ' * indent 5013481Sgiacomo.travaglini@arm.com 5113481Sgiacomo.travaglini@arm.com if i < len(items) - 1: 5213481Sgiacomo.travaglini@arm.com line += '%s, ' % item 5313481Sgiacomo.travaglini@arm.com else: 5413481Sgiacomo.travaglini@arm.com line += item 5513481Sgiacomo.travaglini@arm.com print line 5613481Sgiacomo.travaglini@arm.com 5713481Sgiacomo.travaglini@arm.com# there's only one option parsing done, so make it global and add some 5813481Sgiacomo.travaglini@arm.com# helper functions to make it work well. 5913481Sgiacomo.travaglini@arm.comparser = optparse.OptionParser(usage=usage, version=version, 6013481Sgiacomo.travaglini@arm.com description=brief_copyright, 6113481Sgiacomo.travaglini@arm.com formatter=optparse.TitledHelpFormatter()) 6213481Sgiacomo.travaglini@arm.comparser.disable_interspersed_args() 6313481Sgiacomo.travaglini@arm.com 6413481Sgiacomo.travaglini@arm.com# current option group 6513481Sgiacomo.travaglini@arm.comgroup = None 6613481Sgiacomo.travaglini@arm.com 6713481Sgiacomo.travaglini@arm.comdef set_group(*args, **kwargs): 6813481Sgiacomo.travaglini@arm.com '''set the current option group''' 6913481Sgiacomo.travaglini@arm.com global group 7013481Sgiacomo.travaglini@arm.com if not args and not kwargs: 7113481Sgiacomo.travaglini@arm.com group = None 7213481Sgiacomo.travaglini@arm.com else: 7313481Sgiacomo.travaglini@arm.com group = parser.add_option_group(*args, **kwargs) 7413481Sgiacomo.travaglini@arm.com 7513481Sgiacomo.travaglini@arm.comclass splitter(object): 7613481Sgiacomo.travaglini@arm.com def __init__(self, split): 7713481Sgiacomo.travaglini@arm.com self.split = split 7813481Sgiacomo.travaglini@arm.com def __call__(self, option, opt_str, value, parser): 7913481Sgiacomo.travaglini@arm.com getattr(parser.values, option.dest).extend(value.split(self.split)) 8013481Sgiacomo.travaglini@arm.com 8113481Sgiacomo.travaglini@arm.comdef add_option(*args, **kwargs): 8213481Sgiacomo.travaglini@arm.com '''add an option to the current option group, or global none set''' 8313481Sgiacomo.travaglini@arm.com 8413481Sgiacomo.travaglini@arm.com # if action=split, but allows the option arguments 8513481Sgiacomo.travaglini@arm.com # themselves to be lists separated by the split variable''' 8613481Sgiacomo.travaglini@arm.com 8713481Sgiacomo.travaglini@arm.com if kwargs.get('action', None) == 'append' and 'split' in kwargs: 8813481Sgiacomo.travaglini@arm.com split = kwargs.pop('split') 8913481Sgiacomo.travaglini@arm.com kwargs['default'] = [] 9013481Sgiacomo.travaglini@arm.com kwargs['type'] = 'string' 9113481Sgiacomo.travaglini@arm.com kwargs['action'] = 'callback' 9213481Sgiacomo.travaglini@arm.com kwargs['callback'] = splitter(split) 9313481Sgiacomo.travaglini@arm.com 9413481Sgiacomo.travaglini@arm.com if group: 9513481Sgiacomo.travaglini@arm.com return group.add_option(*args, **kwargs) 9613481Sgiacomo.travaglini@arm.com 9713481Sgiacomo.travaglini@arm.com return parser.add_option(*args, **kwargs) 9813481Sgiacomo.travaglini@arm.com 9913481Sgiacomo.travaglini@arm.comdef bool_option(name, default, help): 10013481Sgiacomo.travaglini@arm.com '''add a boolean option called --name and --no-name. 10113481Sgiacomo.travaglini@arm.com Display help depending on which is the default''' 10213481Sgiacomo.travaglini@arm.com 10313481Sgiacomo.travaglini@arm.com tname = '--%s' % name 10413481Sgiacomo.travaglini@arm.com fname = '--no-%s' % name 10513481Sgiacomo.travaglini@arm.com dest = name.replace('-', '_') 10613481Sgiacomo.travaglini@arm.com if default: 10713481Sgiacomo.travaglini@arm.com thelp = optparse.SUPPRESS_HELP 10813481Sgiacomo.travaglini@arm.com fhelp = help 10913481Sgiacomo.travaglini@arm.com else: 11013481Sgiacomo.travaglini@arm.com thelp = help 11113481Sgiacomo.travaglini@arm.com fhelp = optparse.SUPPRESS_HELP 11213481Sgiacomo.travaglini@arm.com 11313481Sgiacomo.travaglini@arm.com add_option(tname, action="store_true", default=default, help=thelp) 11413481Sgiacomo.travaglini@arm.com add_option(fname, action="store_false", dest=dest, help=fhelp) 11513481Sgiacomo.travaglini@arm.com 11613481Sgiacomo.travaglini@arm.com# Help options 11713481Sgiacomo.travaglini@arm.comadd_option('-A', "--authors", action="store_true", default=False, 11813481Sgiacomo.travaglini@arm.com help="Show author information") 11913481Sgiacomo.travaglini@arm.comadd_option('-C', "--copyright", action="store_true", default=False, 12013481Sgiacomo.travaglini@arm.com help="Show full copyright information") 12113481Sgiacomo.travaglini@arm.comadd_option('-R', "--readme", action="store_true", default=False, 12213481Sgiacomo.travaglini@arm.com help="Show the readme") 12313481Sgiacomo.travaglini@arm.comadd_option('-N', "--release-notes", action="store_true", default=False, 12413481Sgiacomo.travaglini@arm.com help="Show the release notes") 12513481Sgiacomo.travaglini@arm.com 12613481Sgiacomo.travaglini@arm.com# Options for configuring the base simulator 12713481Sgiacomo.travaglini@arm.comadd_option('-d', "--outdir", metavar="DIR", default=".", 12813481Sgiacomo.travaglini@arm.com help="Set the output directory to DIR [Default: %default]") 12913481Sgiacomo.travaglini@arm.comadd_option('-i', "--interactive", action="store_true", default=False, 13013481Sgiacomo.travaglini@arm.com help="Invoke the interactive interpreter after running the script") 13113481Sgiacomo.travaglini@arm.comadd_option("--pdb", action="store_true", default=False, 13213481Sgiacomo.travaglini@arm.com help="Invoke the python debugger before running the script") 13313481Sgiacomo.travaglini@arm.comadd_option('-p', "--path", metavar="PATH[:PATH]", action='append', split=':', 13413481Sgiacomo.travaglini@arm.com help="Prepend PATH to the system path when invoking the script") 13513481Sgiacomo.travaglini@arm.comadd_option('-q', "--quiet", action="count", default=0, 13613481Sgiacomo.travaglini@arm.com help="Reduce verbosity") 13713481Sgiacomo.travaglini@arm.comadd_option('-v', "--verbose", action="count", default=0, 13813481Sgiacomo.travaglini@arm.com help="Increase verbosity") 13913481Sgiacomo.travaglini@arm.com 14013481Sgiacomo.travaglini@arm.com# Statistics options 14113481Sgiacomo.travaglini@arm.comset_group("Statistics Options") 14213481Sgiacomo.travaglini@arm.comadd_option("--stats-file", metavar="FILE", default="m5stats.txt", 14313481Sgiacomo.travaglini@arm.com help="Sets the output file for statistics [Default: %default]") 14413481Sgiacomo.travaglini@arm.com 14513481Sgiacomo.travaglini@arm.com# Debugging options 14613481Sgiacomo.travaglini@arm.comset_group("Debugging Options") 14713481Sgiacomo.travaglini@arm.comadd_option("--debug-break", metavar="TIME[,TIME]", action='append', split=',', 14813481Sgiacomo.travaglini@arm.com help="Cycle to create a breakpoint") 14913481Sgiacomo.travaglini@arm.com 15013481Sgiacomo.travaglini@arm.com# Tracing options 15113481Sgiacomo.travaglini@arm.comset_group("Trace Options") 15213481Sgiacomo.travaglini@arm.comadd_option("--trace-help", action='store_true', 15313481Sgiacomo.travaglini@arm.com help="Print help on trace flags") 15413481Sgiacomo.travaglini@arm.comadd_option("--trace-flags", metavar="FLAG[,FLAG]", action='append', split=',', 15513481Sgiacomo.travaglini@arm.com help="Sets the flags for tracing (-FLAG disables a flag)") 15613481Sgiacomo.travaglini@arm.comadd_option("--trace-start", metavar="TIME", type='int', 15713481Sgiacomo.travaglini@arm.com help="Start tracing at TIME (must be in ticks)") 15813481Sgiacomo.travaglini@arm.comadd_option("--trace-file", metavar="FILE", default="cout", 15913481Sgiacomo.travaglini@arm.com help="Sets the output file for tracing [Default: %default]") 16013481Sgiacomo.travaglini@arm.comadd_option("--trace-ignore", metavar="EXPR", action='append', split=':', 16113481Sgiacomo.travaglini@arm.com help="Ignore EXPR sim objects") 16213481Sgiacomo.travaglini@arm.com 16313481Sgiacomo.travaglini@arm.comoptions = attrdict() 16413481Sgiacomo.travaglini@arm.comarguments = [] 16513481Sgiacomo.travaglini@arm.com 16613481Sgiacomo.travaglini@arm.comdef usage(exitcode=None): 16713481Sgiacomo.travaglini@arm.com parser.print_help() 16813481Sgiacomo.travaglini@arm.com if exitcode is not None: 16913481Sgiacomo.travaglini@arm.com sys.exit(exitcode) 17013481Sgiacomo.travaglini@arm.com 17113481Sgiacomo.travaglini@arm.comdef parse_args(): 17213481Sgiacomo.travaglini@arm.com _opts,args = parser.parse_args() 17313481Sgiacomo.travaglini@arm.com opts = attrdict(_opts.__dict__) 17413481Sgiacomo.travaglini@arm.com 17513481Sgiacomo.travaglini@arm.com # setting verbose and quiet at the same time doesn't make sense 17613481Sgiacomo.travaglini@arm.com if opts.verbose > 0 and opts.quiet > 0: 17713481Sgiacomo.travaglini@arm.com usage(2) 17813481Sgiacomo.travaglini@arm.com 17913481Sgiacomo.travaglini@arm.com # store the verbosity in a single variable. 0 is default, 18013481Sgiacomo.travaglini@arm.com # negative numbers represent quiet and positive values indicate verbose 18113481Sgiacomo.travaglini@arm.com opts.verbose -= opts.quiet 18213481Sgiacomo.travaglini@arm.com 18313481Sgiacomo.travaglini@arm.com del opts.quiet 18413481Sgiacomo.travaglini@arm.com 18513481Sgiacomo.travaglini@arm.com options.update(opts) 18613481Sgiacomo.travaglini@arm.com arguments.extend(args) 18713481Sgiacomo.travaglini@arm.com return opts,args 18813481Sgiacomo.travaglini@arm.com 18913481Sgiacomo.travaglini@arm.comdef main(): 19013481Sgiacomo.travaglini@arm.com import defines 19113481Sgiacomo.travaglini@arm.com import info 19213481Sgiacomo.travaglini@arm.com import internal 19313481Sgiacomo.travaglini@arm.com 19413481Sgiacomo.travaglini@arm.com parse_args() 19513481Sgiacomo.travaglini@arm.com 19613481Sgiacomo.travaglini@arm.com done = False 19713481Sgiacomo.travaglini@arm.com if options.copyright: 19813481Sgiacomo.travaglini@arm.com done = True 19913481Sgiacomo.travaglini@arm.com print info.LICENSE 20013481Sgiacomo.travaglini@arm.com print 20113481Sgiacomo.travaglini@arm.com 20213481Sgiacomo.travaglini@arm.com if options.authors: 20313481Sgiacomo.travaglini@arm.com done = True 20413481Sgiacomo.travaglini@arm.com print 'Author information:' 20513481Sgiacomo.travaglini@arm.com print 20613481Sgiacomo.travaglini@arm.com print info.AUTHORS 20713481Sgiacomo.travaglini@arm.com print 20813481Sgiacomo.travaglini@arm.com 20913481Sgiacomo.travaglini@arm.com if options.readme: 21013481Sgiacomo.travaglini@arm.com done = True 21113481Sgiacomo.travaglini@arm.com print 'Readme:' 21213481Sgiacomo.travaglini@arm.com print 21313481Sgiacomo.travaglini@arm.com print info.README 21413481Sgiacomo.travaglini@arm.com print 21513481Sgiacomo.travaglini@arm.com 21613481Sgiacomo.travaglini@arm.com if options.release_notes: 21713481Sgiacomo.travaglini@arm.com done = True 21813481Sgiacomo.travaglini@arm.com print 'Release Notes:' 21913481Sgiacomo.travaglini@arm.com print 22013481Sgiacomo.travaglini@arm.com print info.RELEASE_NOTES 22113481Sgiacomo.travaglini@arm.com print 22213481Sgiacomo.travaglini@arm.com 22313481Sgiacomo.travaglini@arm.com if options.trace_help: 22413481Sgiacomo.travaglini@arm.com done = True 22513481Sgiacomo.travaglini@arm.com print "Base Flags:" 22613481Sgiacomo.travaglini@arm.com print_list(traceflags.baseFlags, indent=4) 22713481Sgiacomo.travaglini@arm.com print 22813481Sgiacomo.travaglini@arm.com print "Compound Flags:" 22913481Sgiacomo.travaglini@arm.com for flag in traceflags.compoundFlags: 23013481Sgiacomo.travaglini@arm.com if flag == 'All': 23113481Sgiacomo.travaglini@arm.com continue 23213481Sgiacomo.travaglini@arm.com print " %s:" % flag 23313481Sgiacomo.travaglini@arm.com print_list(traceflags.compoundFlagMap[flag], indent=8) 23413481Sgiacomo.travaglini@arm.com print 23513481Sgiacomo.travaglini@arm.com 23613481Sgiacomo.travaglini@arm.com if done: 23713481Sgiacomo.travaglini@arm.com sys.exit(0) 23813481Sgiacomo.travaglini@arm.com 23913481Sgiacomo.travaglini@arm.com if options.verbose >= 0: 24013481Sgiacomo.travaglini@arm.com print "M5 Simulator System" 24113481Sgiacomo.travaglini@arm.com print brief_copyright 24213481Sgiacomo.travaglini@arm.com print 24313481Sgiacomo.travaglini@arm.com print "M5 compiled %s" % internal.core.cvar.compileDate; 24413481Sgiacomo.travaglini@arm.com print "M5 started %s" % datetime.now().ctime() 24513481Sgiacomo.travaglini@arm.com print "M5 executing on %s" % socket.gethostname() 24613481Sgiacomo.travaglini@arm.com print "command line:", 24713481Sgiacomo.travaglini@arm.com for argv in sys.argv: 24813481Sgiacomo.travaglini@arm.com print argv, 24913481Sgiacomo.travaglini@arm.com print 25013481Sgiacomo.travaglini@arm.com 25113481Sgiacomo.travaglini@arm.com # check to make sure we can find the listed script 25213481Sgiacomo.travaglini@arm.com if not arguments or not os.path.isfile(arguments[0]): 25313481Sgiacomo.travaglini@arm.com if arguments and not os.path.isfile(arguments[0]): 25413481Sgiacomo.travaglini@arm.com print "Script %s not found" % arguments[0] 25513481Sgiacomo.travaglini@arm.com 25613481Sgiacomo.travaglini@arm.com usage(2) 25713481Sgiacomo.travaglini@arm.com 25813481Sgiacomo.travaglini@arm.com # tell C++ about output directory 25913481Sgiacomo.travaglini@arm.com internal.core.setOutputDir(options.outdir) 26013481Sgiacomo.travaglini@arm.com 26113481Sgiacomo.travaglini@arm.com # update the system path with elements from the -p option 26213481Sgiacomo.travaglini@arm.com sys.path[0:0] = options.path 26313481Sgiacomo.travaglini@arm.com 26413481Sgiacomo.travaglini@arm.com import objects 26513481Sgiacomo.travaglini@arm.com 26613481Sgiacomo.travaglini@arm.com # set stats options 26713481Sgiacomo.travaglini@arm.com internal.stats.initText(options.stats_file) 26813481Sgiacomo.travaglini@arm.com 26913481Sgiacomo.travaglini@arm.com # set debugging options 27013481Sgiacomo.travaglini@arm.com for when in options.debug_break: 27113481Sgiacomo.travaglini@arm.com internal.debug.schedBreakCycle(int(when)) 27213481Sgiacomo.travaglini@arm.com 27313481Sgiacomo.travaglini@arm.com on_flags = [] 27413481Sgiacomo.travaglini@arm.com off_flags = [] 27513481Sgiacomo.travaglini@arm.com for flag in options.trace_flags: 27613481Sgiacomo.travaglini@arm.com off = False 27713481Sgiacomo.travaglini@arm.com if flag.startswith('-'): 27813481Sgiacomo.travaglini@arm.com flag = flag[1:] 27913481Sgiacomo.travaglini@arm.com off = True 28013481Sgiacomo.travaglini@arm.com if flag not in traceflags.allFlags: 28113481Sgiacomo.travaglini@arm.com print >>sys.stderr, "invalid trace flag '%s'" % flag 28213481Sgiacomo.travaglini@arm.com sys.exit(1) 28313481Sgiacomo.travaglini@arm.com 28413481Sgiacomo.travaglini@arm.com if off: 28513481Sgiacomo.travaglini@arm.com off_flags.append(flag) 28613481Sgiacomo.travaglini@arm.com else: 28713481Sgiacomo.travaglini@arm.com on_flags.append(flag) 28813481Sgiacomo.travaglini@arm.com 28913481Sgiacomo.travaglini@arm.com for flag in on_flags: 29013481Sgiacomo.travaglini@arm.com internal.trace.set(flag) 29113481Sgiacomo.travaglini@arm.com 29213481Sgiacomo.travaglini@arm.com for flag in off_flags: 29313481Sgiacomo.travaglini@arm.com internal.trace.clear(flag) 29413481Sgiacomo.travaglini@arm.com 29513481Sgiacomo.travaglini@arm.com if options.trace_start: 29613481Sgiacomo.travaglini@arm.com def enable_trace(): 29713481Sgiacomo.travaglini@arm.com internal.trace.cvar.enabled = True 29813481Sgiacomo.travaglini@arm.com internal.event.create(enable_trace, int(options.trace_start)) 29913481Sgiacomo.travaglini@arm.com else: 30013481Sgiacomo.travaglini@arm.com internal.trace.cvar.enabled = True 30113481Sgiacomo.travaglini@arm.com 30213481Sgiacomo.travaglini@arm.com internal.trace.output(options.trace_file) 30313481Sgiacomo.travaglini@arm.com 30413481Sgiacomo.travaglini@arm.com for ignore in options.trace_ignore: 30513481Sgiacomo.travaglini@arm.com internal.trace.ignore(ignore) 30613481Sgiacomo.travaglini@arm.com 30713481Sgiacomo.travaglini@arm.com sys.argv = arguments 30813481Sgiacomo.travaglini@arm.com sys.path = [ os.path.dirname(sys.argv[0]) ] + sys.path 30913481Sgiacomo.travaglini@arm.com 31013481Sgiacomo.travaglini@arm.com scope = { '__file__' : sys.argv[0], 31113481Sgiacomo.travaglini@arm.com '__name__' : '__m5_main__' } 31213481Sgiacomo.travaglini@arm.com 31313481Sgiacomo.travaglini@arm.com # we want readline if we're doing anything interactive 31413481Sgiacomo.travaglini@arm.com if options.interactive or options.pdb: 31513481Sgiacomo.travaglini@arm.com exec "import readline" in scope 31613481Sgiacomo.travaglini@arm.com 31713481Sgiacomo.travaglini@arm.com # if pdb was requested, execfile the thing under pdb, otherwise, 31813481Sgiacomo.travaglini@arm.com # just do the execfile normally 31913481Sgiacomo.travaglini@arm.com if options.pdb: 32013481Sgiacomo.travaglini@arm.com from pdb import Pdb 32113481Sgiacomo.travaglini@arm.com debugger = Pdb() 32213481Sgiacomo.travaglini@arm.com debugger.run('execfile("%s")' % sys.argv[0], scope) 32313481Sgiacomo.travaglini@arm.com else: 32413481Sgiacomo.travaglini@arm.com execfile(sys.argv[0], scope) 32513481Sgiacomo.travaglini@arm.com 32613481Sgiacomo.travaglini@arm.com # once the script is done 32713481Sgiacomo.travaglini@arm.com if options.interactive: 32813481Sgiacomo.travaglini@arm.com interact = code.InteractiveConsole(scope) 32913481Sgiacomo.travaglini@arm.com interact.interact("M5 Interactive Console") 33013481Sgiacomo.travaglini@arm.com 33113481Sgiacomo.travaglini@arm.comif __name__ == '__main__': 33213481Sgiacomo.travaglini@arm.com from pprint import pprint 33313481Sgiacomo.travaglini@arm.com 33413481Sgiacomo.travaglini@arm.com parse_args() 33513481Sgiacomo.travaglini@arm.com 33613481Sgiacomo.travaglini@arm.com print 'opts:' 33713481Sgiacomo.travaglini@arm.com pprint(options, indent=4) 33813481Sgiacomo.travaglini@arm.com print 33913481Sgiacomo.travaglini@arm.com 34013481Sgiacomo.travaglini@arm.com print 'args:' 34113481Sgiacomo.travaglini@arm.com pprint(arguments, indent=4) 34213481Sgiacomo.travaglini@arm.com