eon is a tru64 regression, not a linux one
[gem5.git] / src / base / traceflags.py
index 7dbaac60e4ac87ae284fc9e9fed0ea561fa4e3d3..cb17d98d3bed6fd56bd42cb7af91dd0b04ac6ef0 100644 (file)
 # 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.
-
-#
-# This file generates the header and source files for the flags
-# that control the tracing facility.
 #
+# Authors: Nathan Binkert
+#          Steve Reinhardt
 
-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.
 # To define a new flag, simply add it to this list.
 #
 baseFlags = [
-    'TCPIP',
+    'Activity',
+    'AlphaConsole',
+    'Annotate',
+    'BADADDR',
+    'BE',
+    'BPredRAS',
     'Bus',
-    'ScsiDisk',
-    'ScsiCtrl',
-    'ScsiNone',
-    'DMA',
-    'DMAReadVerbose',
-    'DMAWriteVerbose',
-    'TLB',
-    'SimpleDisk',
-    'SimpleDiskData',
+    'BusAddrRanges',
+    'BusBridge',
+    'Cache',
+    'CachePort',
+    'Chains',
+    'Checker',
     'Clock',
-    'Regs',
-    'MC146818',
-    'IPI',
-    'Timer',
-    'Mbox',
-    'PCIA',
-    'PCIDEV',
-    'PciConfigAll',
-    'ISP',
-    'BADADDR',
+    'Commit',
+    'CommitRate',
+    'Config',
     'Console',
     'ConsolePoll',
     'ConsoleVerbose',
-    'AlphaConsole',
-    'Flow',
-    'Interrupt',
-    'Fault',
+    'Context',
     'Cycle',
-    'Loader',
-    'MMU',
+    'DMA',
+    'DMAReadVerbose',
+    'DMAWriteVerbose',
+    'DebugPrintf',
+    'Decode',
+    'DiskImage',
+    'DiskImageRead',
+    'DiskImageWrite',
+    'DynInst',
     'Ethernet',
-    'EthernetPIO',
+    'EthernetCksum',
     'EthernetDMA',
     'EthernetData',
     'EthernetDesc',
+    'EthernetEEPROM',
     'EthernetIntr',
+    'EthernetPIO',
     'EthernetSM',
-    'EthernetCksum',
-    'GDBMisc',
+    'Event',
+    'ExecEnable',
+    'ExecCPSeq',
+    'ExecEffAddr',
+    'ExecFetchSeq',
+    'ExecIntRegs',
+    'ExecIntel',
+    'ExecLegion',
+    'ExecOpClass',
+    'ExecRegDelta',
+    'ExecResult',
+    'ExecSpeculative',
+    'ExecSymbol',
+    'ExecThread',
+    'ExecTicks',
+    'FE',
+    'Fault',
+    'Fetch',
+    'Flow',
+    'FreeList',
+    'FullCPU',
+    'FunctionalAccess',
     'GDBAcc',
+    'GDBExtra',
+    'GDBMisc',
     'GDBRead',
-    'GDBWrite',
-    'GDBSend',
     'GDBRecv',
-    'GDBExtra',
-    'VtoPhys',
-    'Printf',
-    'DebugPrintf',
-    'Serialize',
-    'Event',
-    'PCEvent',
-    'Syscall',
-    'SyscallVerbose',
-    'DiskImage',
-    'DiskImageRead',
-    'DiskImageWrite',
-    'InstExec',
-    'BPredRAS',
-    'Cache',
+    'GDBSend',
+    'GDBWrite',
+    'HWPrefetch',
+    'IBE',
+    'IEW',
     'IIC',
     'IICMore',
-    'MSHR',
-    'Chains',
-    'Pipeline',
-    'Stats',
-    'StatEvents',
-    'Context',
-    'Config',
-    'Sampler',
-    'WriteBarrier',
+    'IPI',
+    'IPR',
+    'IQ',
+    'ISP',
     'IdeCtrl',
     'IdeDisk',
-    'Tsunami',
-    'Uart',
-    'Split',
-    'SQL',
-    'Thread',
-    'Fetch',
-    'Decode',
-    'Rename',
-    'IEW',
-    'Commit',
-    'IQ',
+    'Interrupt',
+    'LLSC',
+    'LSQ',
+    'LSQUnit',
+    'Loader',
+    'MC146818',
+    'MMU',
+    'MSHR',
+    'Mbox',
+    'MemDepUnit',
+    'MemoryAccess',
+    'O3CPU',
+    'OzoneCPU',
+    'OzoneLSQ',
+    'PCEvent',
+    'PCIA',
+    'PCIDEV',
+    'PciConfigAll',
+    'Pipeline',
+    'Printf',
+    'Quiesce',
     'ROB',
-    'FreeList',
+    'Regs',
+    'Rename',
     'RenameMap',
-    'LDSTQ',
-    'StoreSet',
-    'MemDepUnit',
-    'DynInst',
-    'FullCPU',
-    'CommitRate',
-    'OoOCPU',
-    'HWPrefetch',
-    'Stack',
+    'SQL',
+    'Sampler',
+    'Scoreboard',
+    'ScsiCtrl',
+    'ScsiDisk',
+    'ScsiNone',
+    'Serialize',
     'SimpleCPU',
+    'SimpleDisk',
+    'SimpleDiskData',
     'Sparc',
+    'Split',
+    'Stack',
+    'StatEvents',
+    'Stats',
+    'StoreSet',
+    'Syscall',
+    'SyscallVerbose',
+    'TCPIP',
+    'TLB',
+    'Thread',
+    'Timer',
+    'Tsunami',
+    'Uart',
+    'VtoPhys',
+    'WriteBarrier',
+    'Writeback',
+    'X86',
     ]
 
 #
@@ -155,109 +180,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' ],
-    'FullCPUAll' : [ 'Fetch', 'Decode', 'Rename', 'IEW', 'Commit', 'IQ', 'ROB', 'FreeList', 'RenameMap', 'LDSTQ', 'StoreSet', 'MemDepUnit', 'DynInst', 'FullCPU']
+    '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
- */
-
-#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
+allFlags = frozenset(baseFlags + compoundFlags)
 
-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!
  *
@@ -272,45 +307,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')