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
This commit is contained in:
Nathan Binkert
2011-04-15 10:44:32 -07:00
parent f946d7bcdb
commit eddac53ff6
221 changed files with 740 additions and 340 deletions

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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 <cassert>
#include <map>
#include <string>
#include <vector>
#include "base/debug.hh"
#include "base/types.hh"
#include "sim/debug.hh"
using namespace std;
typedef map<string, Debug::Flag *> FlagsMap;
typedef vector<Debug::Flag *> 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 <std_string.i>
%include <std_vector.i>
%include <stdint.i>
%include "base/debug.hh"
%include "base/types.hh"
%include "sim/debug.hh"
%template(AllFlags) std::vector<Debug::Flag *>;
int getAllFlagsVersion();
std::vector<Debug::Flag *> getAllFlags();

View File

@@ -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;
%}