diff options
Diffstat (limited to 'src/base/traceflags.py')
-rw-r--r-- | src/base/traceflags.py | 304 |
1 files changed, 164 insertions, 140 deletions
diff --git a/src/base/traceflags.py b/src/base/traceflags.py index c06399f81..e57bfa350 100644 --- a/src/base/traceflags.py +++ b/src/base/traceflags.py @@ -29,19 +29,7 @@ # Authors: Nathan Binkert # Steve Reinhardt -# -# This file generates the header and source files for the flags -# that control the tracing facility. -# - -import sys - -if len(sys.argv) != 2: - print "%s: Need argument (basename of cc/hh files)" % sys.argv[0] - sys.exit(1) - -hhfilename = sys.argv[1] + '.hh' -ccfilename = sys.argv[1] + '.cc' +__all__ = [ 'allFlags', 'baseFlags', 'compoundFlagsMap', 'compoundFlags' ] # # The list of trace flags that can be used to condition DPRINTFs etc. @@ -89,6 +77,20 @@ baseFlags = [ 'EthernetPIO', 'EthernetSM', 'Event', + 'ExecEnable', + 'ExecCPSeq', + 'ExecEffAddr', + 'ExecFetchSeq', + 'ExecIntRegs', + 'ExecIntel', + 'ExecLegion', + 'ExecOpClass', + 'ExecRegDelta', + 'ExecResult', + 'ExecSpeculative', + 'ExecSymbol', + 'ExecThread', + 'ExecTicks', 'FE', 'Fault', 'Fetch', @@ -114,7 +116,7 @@ baseFlags = [ 'ISP', 'IdeCtrl', 'IdeDisk', - 'InstExec', + 'Iob', 'Interrupt', 'LLSC', 'LSQ', @@ -135,6 +137,7 @@ baseFlags = [ 'PciConfigAll', 'Pipeline', 'Printf', + 'Predecoder', 'Quiesce', 'ROB', 'Regs', @@ -167,6 +170,7 @@ baseFlags = [ 'VtoPhys', 'WriteBarrier', 'Writeback', + 'X86', ] # @@ -178,111 +182,119 @@ baseFlags = [ # following the existing examples. # compoundFlagMap = { - 'GDBAll' : [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', 'GDBRecv', 'GDBExtra' ], - 'ScsiAll' : [ 'ScsiDisk', 'ScsiCtrl', 'ScsiNone' ], - 'DiskImageAll' : [ 'DiskImage', 'DiskImageRead', 'DiskImageWrite' ], - 'EthernetAll' : [ 'Ethernet', 'EthernetPIO', 'EthernetDMA', 'EthernetData' , 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ], - 'EthernetNoData' : [ 'Ethernet', 'EthernetPIO', 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ], - 'IdeAll' : [ 'IdeCtrl', 'IdeDisk' ], - 'O3CPUAll' : [ 'Fetch', 'Decode', 'Rename', 'IEW', 'Commit', 'IQ', 'ROB', 'FreeList', 'RenameMap', 'LSQ', 'LSQUnit', 'StoreSet', 'MemDepUnit', 'DynInst', 'FullCPU', 'O3CPU', 'Activity','Scoreboard','Writeback'], - 'OzoneCPUAll' : [ 'BE', 'FE', 'IBE', 'OzoneLSQ', 'OzoneCPU'], - 'All' : baseFlags + 'All' : baseFlags, + 'DiskImageAll' : [ 'DiskImage', 'DiskImageRead', 'DiskImageWrite' ], + 'EthernetAll' : [ 'Ethernet', 'EthernetPIO', 'EthernetDMA', + 'EthernetData' , 'EthernetDesc', 'EthernetIntr', + 'EthernetSM', 'EthernetCksum' ], + 'EthernetNoData' : [ 'Ethernet', 'EthernetPIO', 'EthernetDesc', + 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ], + 'Exec' : [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', + 'ExecThread', 'ExecEffAddr', 'ExecResult', + 'ExecSymbol' ], + 'GDBAll' : [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', + 'GDBRecv', 'GDBExtra' ], + 'IdeAll' : [ 'IdeCtrl', 'IdeDisk' ], + 'O3CPUAll' : [ 'Fetch', 'Decode', 'Rename', 'IEW', 'Commit', 'IQ', + 'ROB', 'FreeList', 'RenameMap', 'LSQ', 'LSQUnit', + 'StoreSet', 'MemDepUnit', 'DynInst', 'FullCPU', + 'O3CPU', 'Activity','Scoreboard','Writeback' ], + 'OzoneCPUAll' : [ 'BE', 'FE', 'IBE', 'OzoneLSQ', 'OzoneCPU' ], + 'ScsiAll' : [ 'ScsiDisk', 'ScsiCtrl', 'ScsiNone' ] } -############################################################# -# -# Everything below this point generates the appropriate C++ -# declarations and definitions for the trace flags. If you are simply -# adding or modifying flag definitions, you should not have to change -# anything below. -# - -import sys - # extract just the compound flag names into a list compoundFlags = [] compoundFlags.extend(compoundFlagMap.keys()) compoundFlags.sort() -# -# First generate the header file. This defines the Flag enum -# and some extern declarations for the .cc file. -# -try: - hhfile = file(hhfilename, 'w') -except IOError, e: - sys.exit("can't open %s: %s" % (hhfilename, e)) - -# file header boilerplate -print >>hhfile, ''' -/* - * DO NOT EDIT THIS FILE! - * - * Automatically generated from traceflags.py - */ +allFlags = frozenset(baseFlags + compoundFlags) -#ifndef __BASE_TRACE_FLAGS_HH__ -#define __BASE_TRACE_FLAGS_HH__ - -namespace Trace { - -enum Flags { -''', - -# Generate the enum. Base flags come first, then compound flags. -idx = 0 -for flag in baseFlags: - print >>hhfile, ' %s = %d,' % (flag, idx) - idx += 1 - -numBaseFlags = idx -print >>hhfile, ' NumFlags = %d,' % idx - -# put a comment in here to separate base from compound flags -print >>hhfile, ''' - // The remaining enum values are *not* valid indices for Trace::flags. - // They are "compound" flags, which correspond to sets of base - // flags, and are used only by TraceParamContext::setFlags(). -''', - -for flag in compoundFlags: - print >>hhfile, ' %s = %d,' % (flag, idx) - idx += 1 - -numCompoundFlags = idx - numBaseFlags -print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags - -# trailer boilerplate -print >>hhfile, '''\ -}; // enum Flags - -// Array of strings for SimpleEnumParam -extern const char *flagStrings[]; -extern const int numFlagStrings; - -// Array of arraay pointers: for each compound flag, gives the list of -// base flags to set. Inidividual flag arrays are terminated by -1. -extern const Flags *compoundFlags[]; - -/* namespace Trace */ } - -#endif // __BASE_TRACE_FLAGS_HH__ -''', - -hhfile.close() - -# -# -# Print out .cc file with array definitions. +############################################################# # +# Everything below this point generates the appropriate C++ +# declarations and definitions for the trace flags. If you are simply +# adding or modifying flag definitions, you should not have to change +# anything below. # -try: - ccfile = file(ccfilename, 'w') -except OSError, e: - sys.exit("can't open %s: %s" % (ccfilename, e)) - -# file header -print >>ccfile, ''' +def gen_hh(filename): + # + # First generate the header file. This defines the Flag enum + # and some extern declarations for the .cc file. + # + try: + hhfile = file(filename, 'w') + except IOError, e: + sys.exit("can't open %s: %s" % (hhfilename, e)) + + # file header boilerplate + print >>hhfile, ''' + /* + * DO NOT EDIT THIS FILE! + * + * Automatically generated from traceflags.py + */ + + #ifndef __BASE_TRACE_FLAGS_HH__ + #define __BASE_TRACE_FLAGS_HH__ + + namespace Trace { + + enum Flags { + ''', + + # Generate the enum. Base flags come first, then compound flags. + idx = 0 + for flag in baseFlags: + print >>hhfile, ' %s = %d,' % (flag, idx) + idx += 1 + + numBaseFlags = idx + print >>hhfile, ' NumFlags = %d,' % idx + + # put a comment in here to separate base from compound flags + print >>hhfile, ''' + // The remaining enum values are *not* valid indices for Trace::flags. + // They are "compound" flags, which correspond to sets of base + // flags, and are used by changeFlag. + ''', + + for flag in compoundFlags: + print >>hhfile, ' %s = %d,' % (flag, idx) + idx += 1 + + numCompoundFlags = idx - numBaseFlags + print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags + + # trailer boilerplate + print >>hhfile, '''\ + }; // enum Flags + + // Array of strings for SimpleEnumParam + extern const char *flagStrings[]; + extern const int numFlagStrings; + + // Array of arraay pointers: for each compound flag, gives the list of + // base flags to set. Inidividual flag arrays are terminated by -1. + extern const Flags *compoundFlags[]; + + /* namespace Trace */ } + + #endif // __BASE_TRACE_FLAGS_HH__ + \n''', + + hhfile.close() + +def gen_cc(filename): + '''Print out .cc file with array definitions.''' + + try: + ccfile = file(filename, 'w') + except OSError, e: + sys.exit("can't open %s: %s" % (ccfilename, e)) + + # file header + print >>ccfile, ''' /* * DO NOT EDIT THIS FILE! * @@ -297,45 +309,57 @@ const char *Trace::flagStrings[] = { ''', -# The string array is used by SimpleEnumParam to map the strings -# provided by the user to enum values. -for flag in baseFlags: - print >>ccfile, ' "%s",' % flag + # The string array is used by SimpleEnumParam to map the strings + # provided by the user to enum values. + for flag in baseFlags: + print >>ccfile, ' "%s",' % flag -for flag in compoundFlags: - print >>ccfile, ' "%s",' % flag + for flag in compoundFlags: + print >>ccfile, ' "%s",' % flag -print >>ccfile, '};\n' + print >>ccfile, '};\n' -numFlagStrings = len(baseFlags) + len(compoundFlags); + numFlagStrings = len(baseFlags) + len(compoundFlags); -print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings -print >>ccfile + print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings + print >>ccfile -# -# Now define the individual compound flag arrays. There is an array -# for each compound flag listing the component base flags. -# + # + # Now define the individual compound flag arrays. There is an array + # for each compound flag listing the component base flags. + # -for flag in compoundFlags: - flags = compoundFlagMap[flag] - flags.append('(Flags)-1') - print >>ccfile, 'static const Flags %sMap[] =' % flag - print >>ccfile, '{ %s };' % (', '.join(flags)) - print >>ccfile + for flag in compoundFlags: + flags = compoundFlagMap[flag] + flags.append('(Flags)-1') + print >>ccfile, 'static const Flags %sMap[] =' % flag + print >>ccfile, '{ %s };' % (', '.join(flags)) + print >>ccfile -# -# Finally the compoundFlags[] array maps the compound flags -# to their individual arrays/ -# -print >>ccfile, 'const Flags *Trace::compoundFlags[] =' -print >>ccfile, '{' + # + # Finally the compoundFlags[] array maps the compound flags + # to their individual arrays/ + # + print >>ccfile, 'const Flags *Trace::compoundFlags[] =' + print >>ccfile, '{' + + for flag in compoundFlags: + print >>ccfile, ' %sMap,' % flag + + # file trailer + print >>ccfile, '};' + + ccfile.close() -for flag in compoundFlags: - print >>ccfile, ' %sMap,' % flag +if __name__ == '__main__': + # This file generates the header and source files for the flags + # that control the tracing facility. -# file trailer -print >>ccfile, '};' + import sys -ccfile.close() + if len(sys.argv) != 2: + print "%s: Need argument (basename of cc/hh files)" % sys.argv[0] + sys.exit(1) + gen_hh(sys.argv[1] + '.hh') + gen_cc(sys.argv[1] + '.cc') |