diff options
Diffstat (limited to 'src/python')
-rw-r--r-- | src/python/SConscript | 1 | ||||
-rw-r--r-- | src/python/m5/main.py | 39 | ||||
-rw-r--r-- | src/python/m5/objects/Root.py | 3 | ||||
-rw-r--r-- | src/python/swig/trace.i | 85 |
4 files changed, 109 insertions, 19 deletions
diff --git a/src/python/SConscript b/src/python/SConscript index df1464809..a8104e8cc 100644 --- a/src/python/SConscript +++ b/src/python/SConscript @@ -108,6 +108,7 @@ def swig_it(basename): swig_it('main') swig_it('debug') swig_it('event') +swig_it('trace') # Action function to build the zip archive. Uses the PyZipFile module # included in the standard Python library. diff --git a/src/python/m5/main.py b/src/python/m5/main.py index 5df6d03cf..3bc046304 100644 --- a/src/python/m5/main.py +++ b/src/python/m5/main.py @@ -30,11 +30,6 @@ import code, optparse, os, socket, sys from datetime import datetime from attrdict import attrdict -try: - import info -except ImportError: - info = None - __all__ = [ 'options', 'arguments', 'main' ] usage="%prog [m5 options] script.py [script options]" @@ -144,8 +139,6 @@ add_option("--trace-flags", metavar="FLAG[,FLAG]", action='append', split=',', help="Sets the flags for tracing") add_option("--trace-start", metavar="TIME", default='0s', help="Start tracing at TIME (must have units)") -add_option("--trace-cycle", metavar="CYCLE", default='0', - help="Start tracing at CYCLE") add_option("--trace-file", metavar="FILE", default="cout", help="Sets the output file for tracing [Default: %default]") add_option("--trace-circlebuf", metavar="SIZE", type="int", default=0, @@ -211,6 +204,8 @@ def parse_args(): return opts,args def main(): + import defines + import info import internal parse_args() @@ -278,14 +273,26 @@ def main(): for when in options.debug_break: internal.debug.schedBreakCycle(int(when)) - # set tracing options - objects.Trace.flags = options.trace_flags - objects.Trace.start = options.trace_start - objects.Trace.cycle = options.trace_cycle - objects.Trace.file = options.trace_file - objects.Trace.bufsize = options.trace_circlebuf - objects.Trace.dump_on_exit = options.trace_dumponexit - objects.Trace.ignore = options.trace_ignore + for flag in options.trace_flags: + internal.trace.setFlag(flag) + + if options.trace_start is not None: + internal.trace.enabled = False + def enable_trace(): + internal.event.enabled = True + internal.event.create(enable_trace, options.trace_start) + + if options.trace_file is not None: + internal.trace.file(options.trace_file) + + if options.trace_bufsize is not None: + internal.trace.buffer_size(options.bufsize) + + #if options.trace_dumponexit: + # internal.trace.dumpOnExit = True + + for ignore in options.trace_ignore: + internal.trace.ignore(ignore) # set execution trace options objects.ExecutionTrace.speculative = options.speculative @@ -309,7 +316,7 @@ def main(): # we want readline if we're doing anything interactive if options.interactive or options.pdb: - exec("import readline", scope) + exec "import readline" in scope # if pdb was requested, execfile the thing under pdb, otherwise, # just do the execfile normally diff --git a/src/python/m5/objects/Root.py b/src/python/m5/objects/Root.py index b6123f192..81482c1de 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 Trace import Trace from ExeTrace import ExecutionTrace class Root(SimObject): @@ -15,9 +14,7 @@ class Root(SimObject): output_file = Param.String('cout', "file to dump simulator output to") checkpoint = Param.String('', "checkpoint file to load") # stats = Param.Statistics(Statistics(), "statistics object") -# trace = Param.Trace(Trace(), "trace object") # serialize = Param.Serialize(Serialize(), "checkpoint generation options") stats = Statistics() - trace = Trace() exetrace = ExecutionTrace() serialize = Serialize() diff --git a/src/python/swig/trace.i b/src/python/swig/trace.i new file mode 100644 index 000000000..65f300b2b --- /dev/null +++ b/src/python/swig/trace.i @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2006 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Nathan Binkert + */ + +%module trace + +%{ +#include "base/trace.hh" +#include "sim/host.hh" +#include "sim/trace_control.hh" + +inline void +set(const char *flag) +{ + setTraceFlag(flag); +} + +inline void +clear(const char *flag) +{ + clearTraceFlag(flag); +} + +inline void +ignore(const char *expr) +{ + Trace::ignore.setExpression(expr); +} + +inline void +buffer_size(int num_lines) +{ + if ((int)num_lines > 0) + Trace::theLog.init(num_lines); +} + +inline void +dump(const char *filename) +{ + dumpTrace(filename); +} + +using Trace::enabled; +%} + +%inline %{ +extern void ignore(const char *expr); +extern void set(const char *string); +extern void clear(const char *string); +extern void buffer_size(int num_lines); +extern void dump(const char *filename); +extern bool enabled; +%} + +%wrapper %{ +// fix up module name to reflect the fact that it's inside the m5 package +#undef SWIG_name +#define SWIG_name "m5.internal._trace" +%} |