From eddac53ff60c579eff28134bde84783fe36d6214 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Fri, 15 Apr 2011 10:44:32 -0700 Subject: trace: reimplement the DTRACE function so it doesn't use a vector At the same time, rename the trace flags to debug flags since they have broader usage than simply tracing. This means that --trace-flags is now --debug-flags and --trace-help is now --debug-help --- src/python/m5/debug.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ src/python/m5/main.py | 31 +++++++++++-------------- src/python/m5/trace.py | 16 +------------ src/python/swig/debug.i | 52 +++++++++++++++++++++++++++++++++++++++++ src/python/swig/trace.i | 16 ------------- 5 files changed, 128 insertions(+), 49 deletions(-) (limited to 'src/python') diff --git a/src/python/m5/debug.py b/src/python/m5/debug.py index cd40b8fa3..8231126a0 100644 --- a/src/python/m5/debug.py +++ b/src/python/m5/debug.py @@ -29,3 +29,65 @@ import internal from internal.debug import schedBreakCycle, setRemoteGDBPort + +def help(): + print "Base Flags:" + for flag in flags.basic: + print " %s: %s" % (flag, flags.descriptions[flag]) + print + print "Compound Flags:" + for flag in flags.compound: + if flag == 'All': + continue + print " %s: %s" % (flag, flags.descriptions[flag]) + util.printList(flags.compoundMap[flag], indent=8) + print + +class AllFlags(object): + def __init__(self): + self._version = -1 + self._dict = {} + + def _update(self): + current_version = internal.debug.getAllFlagsVersion() + if self._version == current_version: + return + + self._dict.clear() + for flag in internal.debug.getAllFlags(): + self._dict[flag.name()] = flag + self._version = current_version + + def __contains__(self, item): + self._update() + return item in self._dict + + def __getitem__(self, item): + self._update() + return self._dict[item] + + def keys(self): + self._update() + return self._dict.keys() + + def values(self): + self._update() + return self._dict.values() + + def items(self): + self._update() + return self._dict.items() + + def iterkeys(self): + self._update() + return self._dict.iterkeys() + + def itervalues(self): + self._update() + return self._dict.itervalues() + + def iteritems(self): + self._update() + return self._dict.iteritems() + +flags = AllFlags() diff --git a/src/python/m5/main.py b/src/python/m5/main.py index f932ec63a..adf42fc96 100644 --- a/src/python/m5/main.py +++ b/src/python/m5/main.py @@ -98,15 +98,15 @@ add_option("--dump-config", metavar="FILE", default="config.ini", set_group("Debugging Options") add_option("--debug-break", metavar="TIME[,TIME]", action='append', split=',', help="Cycle to create a breakpoint") +add_option("--debug-help", action='store_true', + help="Print help on debug flags") +add_option("--debug-flags", metavar="FLAG[,FLAG]", action='append', split=',', + help="Sets the flags for debugging (-FLAG disables a flag)") add_option("--remote-gdb-port", type='int', default=7000, help="Remote gdb base port (set to 0 to disable listening)") # 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 (-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", @@ -214,10 +214,10 @@ def main(): print info.README print - if options.trace_help: + if options.debug_help: done = True check_tracing() - trace.help() + debug.help() if options.list_sim_objects: import SimObject @@ -284,30 +284,25 @@ def main(): for when in options.debug_break: debug.schedBreakCycle(int(when)) - if options.trace_flags: + if options.debug_flags: check_tracing() on_flags = [] off_flags = [] - for flag in options.trace_flags: + for flag in options.debug_flags: off = False if flag.startswith('-'): flag = flag[1:] off = True - if flag not in trace.flags.all and flag != "All": - print >>sys.stderr, "invalid trace flag '%s'" % flag + + if flag not in debug.flags: + print >>sys.stderr, "invalid debug flag '%s'" % flag sys.exit(1) if off: - off_flags.append(flag) + debug.flags[flag].disable() else: - on_flags.append(flag) - - for flag in on_flags: - trace.set(flag) - - for flag in off_flags: - trace.clear(flag) + debug.flags[flag].enable() if options.trace_start: check_tracing() diff --git a/src/python/m5/trace.py b/src/python/m5/trace.py index db239040a..f34444810 100644 --- a/src/python/m5/trace.py +++ b/src/python/m5/trace.py @@ -27,26 +27,12 @@ # Authors: Nathan Binkert import internal -import traceflags as flags import util -from internal.trace import clear, output, set, ignore +from internal.trace import output, ignore def disable(): internal.trace.cvar.enabled = False def enable(): internal.trace.cvar.enabled = True - -def help(): - print "Base Flags:" - for flag in flags.basic: - print " %s: %s" % (flag, flags.descriptions[flag]) - print - print "Compound Flags:" - for flag in flags.compound: - if flag == 'All': - continue - print " %s: %s" % (flag, flags.descriptions[flag]) - util.printList(flags.compoundMap[flag], indent=8) - print diff --git a/src/python/swig/debug.i b/src/python/swig/debug.i index 8486075d3..c2eb3ed80 100644 --- a/src/python/swig/debug.i +++ b/src/python/swig/debug.i @@ -1,5 +1,6 @@ /* * Copyright (c) 2006 The Regents of The University of Michigan + * Copyright (c) 2010 The Hewlett-Packard Development Company * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,11 +32,62 @@ %module(package="m5.internal") debug %{ +#include +#include +#include +#include + +#include "base/debug.hh" #include "base/types.hh" #include "sim/debug.hh" + +using namespace std; + +typedef map FlagsMap; +typedef vector FlagsVec; + +namespace Debug { +extern int allFlagsVersion; +FlagsMap &allFlags(); +} + +inline int +getAllFlagsVersion() +{ + return Debug::allFlagsVersion; +} + +inline FlagsVec +getAllFlags() +{ + FlagsMap &flagsMap = Debug::allFlags(); + + FlagsVec flags(flagsMap.size()); + + int index = 0; + FlagsMap::iterator i = flagsMap.begin(); + FlagsMap::iterator end = flagsMap.end(); + for (; i != end; ++i) { + assert(index < flags.size()); + flags[index++] = i->second; + } + + return flags; +} + %} +%ignore Debug::SimpleFlag::operator!; + +%include +%include %include +%include "base/debug.hh" %include "base/types.hh" %include "sim/debug.hh" + +%template(AllFlags) std::vector; + +int getAllFlagsVersion(); +std::vector getAllFlags(); diff --git a/src/python/swig/trace.i b/src/python/swig/trace.i index 5407b687f..3b049a3d6 100644 --- a/src/python/swig/trace.i +++ b/src/python/swig/trace.i @@ -40,18 +40,6 @@ output(const char *filename) Trace::setOutput(filename); } -inline void -set(const char *flag) -{ - Trace::changeFlag(flag, true); -} - -inline void -clear(const char *flag) -{ - Trace::changeFlag(flag, false); -} - inline void ignore(const char *expr) { @@ -61,10 +49,6 @@ ignore(const char *expr) using Trace::enabled; %} -%inline %{ extern void output(const char *string); -extern void set(const char *string); -extern void clear(const char *string); extern void ignore(const char *expr); extern bool enabled; -%} -- cgit v1.2.3