changeset b28d06a175be in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=b28d06a175be
description:
        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

diffstat:

 src/SConscript                                                    |  260 
++-------
 src/arch/alpha/interrupts.hh                                      |    2 +
 src/arch/alpha/kernel_stats.cc                                    |    1 +
 src/arch/alpha/linux/process.cc                                   |    1 +
 src/arch/alpha/linux/system.cc                                    |    1 +
 src/arch/alpha/process.cc                                         |    1 +
 src/arch/alpha/remote_gdb.cc                                      |    2 +
 src/arch/alpha/stacktrace.hh                                      |    1 +
 src/arch/alpha/system.cc                                          |    1 +
 src/arch/alpha/tlb.cc                                             |    1 +
 src/arch/alpha/vtophys.cc                                         |    1 +
 src/arch/arm/faults.cc                                            |    1 +
 src/arch/arm/isa.cc                                               |    2 +
 src/arch/arm/isa.hh                                               |    1 +
 src/arch/arm/isa/includes.isa                                     |    1 +
 src/arch/arm/nativetrace.cc                                       |    1 +
 src/arch/arm/predecoder.cc                                        |    1 +
 src/arch/arm/process.cc                                           |    1 +
 src/arch/arm/remote_gdb.cc                                        |    2 +
 src/arch/arm/stacktrace.hh                                        |    1 +
 src/arch/arm/tlb.cc                                               |    3 +
 src/arch/arm/types.hh                                             |    1 +
 src/arch/mips/faults.cc                                           |    1 +
 src/arch/mips/isa.cc                                              |    1 +
 src/arch/mips/isa/includes.isa                                    |    1 +
 src/arch/mips/linux/process.cc                                    |    1 +
 src/arch/mips/locked_mem.hh                                       |    1 +
 src/arch/mips/process.cc                                          |    1 +
 src/arch/mips/stacktrace.hh                                       |    1 +
 src/arch/mips/tlb.cc                                              |    2 +
 src/arch/power/process.cc                                         |    1 +
 src/arch/power/stacktrace.hh                                      |    1 +
 src/arch/power/tlb.cc                                             |    2 +
 src/arch/sparc/interrupts.hh                                      |    1 +
 src/arch/sparc/isa.cc                                             |    2 +
 src/arch/sparc/isa/includes.isa                                   |    1 +
 src/arch/sparc/process.cc                                         |    1 +
 src/arch/sparc/remote_gdb.cc                                      |    1 +
 src/arch/sparc/stacktrace.hh                                      |    1 +
 src/arch/sparc/tlb.cc                                             |    2 +
 src/arch/sparc/ua2005.cc                                          |    2 +
 src/arch/sparc/vtophys.cc                                         |    1 +
 src/arch/x86/faults.cc                                            |    2 +
 src/arch/x86/insts/microregop.cc                                  |    1 +
 src/arch/x86/insts/static_inst.hh                                 |    1 +
 src/arch/x86/interrupts.cc                                        |    1 +
 src/arch/x86/isa/includes.isa                                     |    1 +
 src/arch/x86/nativetrace.cc                                       |    1 +
 src/arch/x86/pagetable_walker.cc                                  |    1 +
 src/arch/x86/predecoder.cc                                        |    1 +
 src/arch/x86/predecoder.hh                                        |    1 +
 src/arch/x86/process.cc                                           |    1 +
 src/arch/x86/stacktrace.hh                                        |    1 +
 src/arch/x86/tlb.cc                                               |    1 +
 src/arch/x86/vtophys.cc                                           |    1 +
 src/base/debug.cc                                                 |  135 +++++
 src/base/debug.hh                                                 |   75 ++
 src/base/loader/aout_object.cc                                    |    1 +
 src/base/loader/ecoff_object.cc                                   |    1 +
 src/base/loader/elf_object.cc                                     |    1 +
 src/base/loader/raw_object.cc                                     |    1 +
 src/base/mysql.cc                                                 |    1 +
 src/base/remote_gdb.cc                                            |    2 +
 src/base/trace.cc                                                 |   63 +--
 src/base/trace.hh                                                 |   20 +-
 src/base/vnc/vncserver.cc                                         |    1 +
 src/cpu/SConscript                                                |    4 +
 src/cpu/activity.cc                                               |    1 +
 src/cpu/base.cc                                                   |    1 +
 src/cpu/base_dyn_inst_impl.hh                                     |    2 +
 src/cpu/exetrace.cc                                               |   32 +-
 src/cpu/exetrace.hh                                               |    6 +-
 src/cpu/inorder/cpu.cc                                            |    4 +
 src/cpu/inorder/first_stage.cc                                    |    1 +
 src/cpu/inorder/inorder_dyn_inst.cc                               |    1 +
 src/cpu/inorder/inorder_dyn_inst.hh                               |    1 +
 src/cpu/inorder/inorder_trace.cc                                  |    3 +-
 src/cpu/inorder/pipeline_stage.cc                                 |    5 +
 src/cpu/inorder/reg_dep_map.cc                                    |    1 +
 src/cpu/inorder/resource.cc                                       |    4 +
 src/cpu/inorder/resource_pool.cc                                  |    1 +
 src/cpu/inorder/resource_sked.cc                                  |    1 +
 src/cpu/inorder/resources/agen_unit.cc                            |    1 +
 src/cpu/inorder/resources/bpred_unit.cc                           |    3 +-
 src/cpu/inorder/resources/branch_predictor.cc                     |    2 +
 src/cpu/inorder/resources/cache_unit.cc                           |    8 +
 src/cpu/inorder/resources/decode_unit.cc                          |    3 +
 src/cpu/inorder/resources/execution_unit.cc                       |    2 +
 src/cpu/inorder/resources/fetch_seq_unit.cc                       |    2 +
 src/cpu/inorder/resources/fetch_unit.cc                           |    5 +
 src/cpu/inorder/resources/graduation_unit.cc                      |    1 +
 src/cpu/inorder/resources/inst_buffer.cc                          |    2 +
 src/cpu/inorder/resources/mult_div_unit.cc                        |    2 +
 src/cpu/inorder/resources/use_def.cc                              |    2 +
 src/cpu/inorder/thread_context.cc                                 |    1 +
 src/cpu/inteltrace.hh                                             |    6 +-
 src/cpu/intr_control.cc                                           |    1 +
 src/cpu/nativetrace.cc                                            |    1 +
 src/cpu/o3/bpred_unit_impl.hh                                     |    2 +-
 src/cpu/o3/commit_impl.hh                                         |    4 +
 src/cpu/o3/cpu.cc                                                 |    4 +
 src/cpu/o3/decode_impl.hh                                         |    2 +
 src/cpu/o3/fetch_impl.hh                                          |    2 +
 src/cpu/o3/free_list.cc                                           |    1 +
 src/cpu/o3/free_list.hh                                           |    2 +-
 src/cpu/o3/iew.hh                                                 |    1 +
 src/cpu/o3/iew_impl.hh                                            |    3 +
 src/cpu/o3/inst_queue_impl.hh                                     |    1 +
 src/cpu/o3/lsq_impl.hh                                            |    3 +
 src/cpu/o3/lsq_unit.hh                                            |    1 +
 src/cpu/o3/lsq_unit_impl.hh                                       |    3 +
 src/cpu/o3/mem_dep_unit.hh                                        |    1 +
 src/cpu/o3/mem_dep_unit_impl.hh                                   |    1 +
 src/cpu/o3/regfile.hh                                             |    1 +
 src/cpu/o3/rename_impl.hh                                         |    2 +
 src/cpu/o3/rename_map.cc                                          |    1 +
 src/cpu/o3/rob_impl.hh                                            |    2 +
 src/cpu/o3/scoreboard.cc                                          |    1 +
 src/cpu/o3/scoreboard.hh                                          |    1 -
 src/cpu/o3/store_set.cc                                           |    1 +
 src/cpu/o3/thread_context_impl.hh                                 |    1 +
 src/cpu/pc_event.cc                                               |    1 +
 src/cpu/pred/2bit_local.cc                                        |    1 +
 src/cpu/pred/btb.cc                                               |    1 +
 src/cpu/quiesce_event.cc                                          |    1 +
 src/cpu/simple/atomic.cc                                          |    2 +
 src/cpu/simple/base.cc                                            |    3 +
 src/cpu/simple/timing.cc                                          |    3 +
 src/cpu/simple_thread.hh                                          |    2 +
 src/cpu/testers/directedtest/InvalidateGenerator.cc               |    1 +
 src/cpu/testers/directedtest/RubyDirectedTester.cc                |    1 +
 src/cpu/testers/directedtest/SeriesRequestGenerator.cc            |    1 +
 src/cpu/testers/memtest/memtest.cc                                |    1 +
 src/cpu/testers/networktest/networktest.cc                        |    1 +
 src/cpu/testers/rubytest/Check.cc                                 |    1 +
 src/cpu/testers/rubytest/CheckTable.cc                            |    1 +
 src/cpu/testers/rubytest/RubyTester.cc                            |    1 +
 src/cpu/thread_context.cc                                         |    1 +
 src/dev/alpha/backdoor.cc                                         |    1 +
 src/dev/alpha/tsunami_cchip.cc                                    |    2 +
 src/dev/alpha/tsunami_io.cc                                       |    1 +
 src/dev/alpha/tsunami_pchip.cc                                    |    1 +
 src/dev/copy_engine.cc                                            |    1 +
 src/dev/disk_image.cc                                             |    2 +
 src/dev/etherbus.cc                                               |    2 +
 src/dev/etherlink.cc                                              |    2 +
 src/dev/ethertap.cc                                               |    2 +
 src/dev/i8254xGBe.cc                                              |    1 +
 src/dev/i8254xGBe.hh                                              |    2 +
 src/dev/ide_ctrl.cc                                               |    1 +
 src/dev/ide_disk.cc                                               |    1 +
 src/dev/intel_8254_timer.cc                                       |    1 +
 src/dev/intel_8254_timer.hh                                       |    1 +
 src/dev/io_device.cc                                              |    2 +
 src/dev/isa_fake.cc                                               |    1 +
 src/dev/mc146818.cc                                               |    1 +
 src/dev/ns_gige.cc                                                |    1 +
 src/dev/pciconfigall.cc                                           |    1 +
 src/dev/pcidev.cc                                                 |    1 +
 src/dev/simple_disk.cc                                            |    2 +
 src/dev/sinic.cc                                                  |    1 +
 src/dev/sparc/iob.cc                                              |    1 +
 src/dev/sparc/mm_disk.cc                                          |    1 +
 src/dev/terminal.cc                                               |    2 +
 src/dev/uart8250.cc                                               |    1 +
 src/dev/x86/cmos.cc                                               |    1 +
 src/dev/x86/i8042.cc                                              |    1 +
 src/dev/x86/i82094aa.cc                                           |    1 +
 src/dev/x86/i8254.cc                                              |    1 +
 src/dev/x86/i8259.cc                                              |    1 +
 src/dev/x86/speaker.cc                                            |    1 +
 src/kern/linux/events.cc                                          |    1 +
 src/kern/linux/linux.cc                                           |    1 +
 src/kern/system_events.cc                                         |    1 +
 src/kern/tru64/tru64.hh                                           |    1 +
 src/kern/tru64/tru64_events.cc                                    |    3 +
 src/mem/bridge.cc                                                 |    1 +
 src/mem/bus.cc                                                    |    3 +
 src/mem/cache/base.cc                                             |    1 +
 src/mem/cache/base.hh                                             |    2 +
 src/mem/cache/cache_impl.hh                                       |    2 +
 src/mem/cache/mshr.cc                                             |    1 +
 src/mem/cache/prefetch/base.cc                                    |    1 +
 src/mem/cache/prefetch/ghb.cc                                     |    1 +
 src/mem/cache/prefetch/stride.cc                                  |    1 +
 src/mem/cache/tags/iic.cc                                         |    3 +
 src/mem/cache/tags/lru.cc                                         |    1 +
 src/mem/page_table.cc                                             |    1 +
 src/mem/physical.cc                                               |    2 +
 src/mem/port.cc                                                   |    1 +
 src/mem/ruby/buffers/MessageBuffer.cc                             |    1 +
 src/mem/ruby/common/NetDest.hh                                    |    1 +
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc  |    1 +
 src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc            |    1 +
 src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc |    1 +
 src/mem/ruby/network/garnet/flexible-pipeline/Router.cc           |    1 +
 src/mem/ruby/network/simple/PerfectSwitch.cc                      |    1 +
 src/mem/ruby/network/simple/Throttle.cc                           |    1 +
 src/mem/ruby/network/simple/Topology.cc                           |    1 +
 src/mem/ruby/system/CacheMemory.cc                                |    1 +
 src/mem/ruby/system/DMASequencer.cc                               |    1 +
 src/mem/ruby/system/DirectoryMemory.cc                            |    1 +
 src/mem/ruby/system/RubyPort.cc                                   |    2 +
 src/mem/ruby/system/Sequencer.cc                                  |    2 +
 src/mem/ruby/system/SparseMemory.cc                               |    1 +
 src/mem/slicc/symbols/StateMachine.py                             |    5 +
 src/mem/tport.cc                                                  |    1 +
 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 -
 src/sim/eventq.cc                                                 |    1 +
 src/sim/eventq.hh                                                 |    1 +
 src/sim/faults.cc                                                 |    1 +
 src/sim/pseudo_inst.cc                                            |    3 +
 src/sim/root.cc                                                   |    1 +
 src/sim/sim_object.cc                                             |    1 +
 src/sim/syscall_emul.cc                                           |    1 +
 src/sim/syscall_emul.hh                                           |    1 +
 src/sim/system.cc                                                 |    1 +
 221 files changed, 741 insertions(+), 341 deletions(-)

diffs (truncated from 3585 to 300 lines):

diff -r 51cf7f3cf9ac -r b28d06a175be src/SConscript
--- a/src/SConscript    Fri Apr 15 10:44:15 2011 -0700
+++ b/src/SConscript    Fri Apr 15 10:44:32 2011 -0700
@@ -198,21 +198,23 @@
 
 ########################################################################
 #
-# Trace Flags
+# Debug Flags
 #
-trace_flags = {}
-def TraceFlag(name, desc=None):
-    if name in trace_flags:
+debug_flags = {}
+def DebugFlag(name, desc=None):
+    if name in debug_flags:
         raise AttributeError, "Flag %s already specified" % name
-    trace_flags[name] = (name, (), desc)
+    debug_flags[name] = (name, (), desc)
+TraceFlag = DebugFlag
 
 def CompoundFlag(name, flags, desc=None):
-    if name in trace_flags:
+    if name in debug_flags:
         raise AttributeError, "Flag %s already specified" % name
 
     compound = tuple(flags)
-    trace_flags[name] = (name, compound, desc)
+    debug_flags[name] = (name, compound, desc)
 
+Export('DebugFlag')
 Export('TraceFlag')
 Export('CompoundFlag')
 
@@ -622,81 +624,16 @@
                 MakeAction(makeEmbeddedSwigInit, Transform("EMBED SW")))
     Source(init_file)
 
-def getFlags(source_flags):
-    flagsMap = {}
-    flagsList = []
-    for s in source_flags:
-        val = eval(s.get_contents())
-        name, compound, desc = val
-        flagsList.append(val)
-        flagsMap[name] = bool(compound)
-    
-    for name, compound, desc in flagsList:
-        for flag in compound:
-            if flag not in flagsMap:
-                raise AttributeError, "Trace flag %s not found" % flag
-            if flagsMap[flag]:
-                raise AttributeError, \
-                    "Compound flag can't point to another compound flag"
+#
+# Handle debug flags
+#
+def makeDebugFlagCC(target, source, env):
+    assert(len(target) == 1 and len(source) == 1)
 
-    flagsList.sort()
-    return flagsList
+    val = eval(source[0].get_contents())
+    name, compound, desc = val
+    compound = list(sorted(compound))
 
-
-# Generate traceflags.py
-def traceFlagsPy(target, source, env):
-    assert(len(target) == 1)
-    code = code_formatter()
-
-    allFlags = getFlags(source)
-
-    code('basic = [')
-    code.indent()
-    for flag, compound, desc in allFlags:
-        if not compound:
-            code("'$flag',")
-    code(']')
-    code.dedent()
-    code()
-
-    code('compound = [')
-    code.indent()
-    code("'All',")
-    for flag, compound, desc in allFlags:
-        if compound:
-            code("'$flag',")
-    code("]")
-    code.dedent()
-    code()
-
-    code("all = frozenset(basic + compound)")
-    code()
-
-    code('compoundMap = {')
-    code.indent()
-    all = tuple([flag for flag,compound,desc in allFlags if not compound])
-    code("'All' : $all,")
-    for flag, compound, desc in allFlags:
-        if compound:
-            code("'$flag' : $compound,")
-    code('}')
-    code.dedent()
-    code()
-
-    code('descriptions = {')
-    code.indent()
-    code("'All' : 'All flags',")
-    for flag, compound, desc in allFlags:
-        code("'$flag' : '$desc',")
-    code("}")
-    code.dedent()
-
-    code.write(str(target[0]))
-
-def traceFlagsCC(target, source, env):
-    assert(len(target) == 1)
-
-    allFlags = getFlags(source)
     code = code_formatter()
 
     # file header
@@ -705,75 +642,39 @@
  * DO NOT EDIT THIS FILE! Automatically generated
  */
 
-#include "base/traceflags.hh"
-
-using namespace Trace;
-
-const char *Trace::flagStrings[] =
-{''')
-
-    code.indent()
-    # The string array is used by SimpleEnumParam to map the strings
-    # provided by the user to enum values.
-    for flag, compound, desc in allFlags:
-        if not compound:
-            code('"$flag",')
-
-    code('"All",')
-    for flag, compound, desc in allFlags:
-        if compound:
-            code('"$flag",')
-    code.dedent()
-
-    code('''\
-};
-
-const int Trace::numFlagStrings = ${{len(allFlags) + 1}};
-
+#include "base/debug.hh"
 ''')
 
-    # Now define the individual compound flag arrays.  There is an array
-    # for each compound flag listing the component base flags.
-    all = tuple([flag for flag,compound,desc in allFlags if not compound])
-    code('static const Flags AllMap[] = {')
-    code.indent()
-    for flag, compound, desc in allFlags:
-        if not compound:
-            code('$flag,')
-    code.dedent()
-    code('};')
+    for flag in compound:
+        code('#include "debug/$flag.hh"')
+    code()
+    code('namespace Debug {')
     code()
 
-    for flag, compound, desc in allFlags:
-        if not compound:
-            continue
-        code('static const Flags ${flag}Map[] = {')
+    if not compound:
+        code('SimpleFlag $name("$name", "$desc");')
+    else:
+        code('CompoundFlag $name("$name", "$desc",')
         code.indent()
-        for flag in compound:
-            code('$flag,')
-        code('(Flags)-1')
+        last = len(compound) - 1
+        for i,flag in enumerate(compound):
+            if i != last:
+                code('$flag,')
+            else:
+                code('$flag);')
         code.dedent()
-        code('};')
-        code()
 
-    # Finally the compoundFlags[] array maps the compound flags
-    # to their individual arrays/
-    code('const Flags *Trace::compoundFlags[] = {')
-    code.indent()
-    code('AllMap,')
-    for flag, compound, desc in allFlags:
-        if compound:
-            code('${flag}Map,')
-    # file trailer
-    code.dedent()
-    code('};')
+    code()
+    code('} // namespace Debug')
 
     code.write(str(target[0]))
 
-def traceFlagsHH(target, source, env):
-    assert(len(target) == 1)
+def makeDebugFlagHH(target, source, env):
+    assert(len(target) == 1 and len(source) == 1)
 
-    allFlags = getFlags(source)
+    val = eval(source[0].get_contents())
+    name, compound, desc = val
+
     code = code_formatter()
 
     # file header boilerplate
@@ -781,76 +682,43 @@
 /*
  * DO NOT EDIT THIS FILE!
  *
- * Automatically generated from traceflags.py
+ * Automatically generated by SCons
  */
 
-#ifndef __BASE_TRACE_FLAGS_HH__
-#define __BASE_TRACE_FLAGS_HH__
+#ifndef __DEBUG_${name}_HH__
+#define __DEBUG_${name}_HH__
 
-namespace Trace {
+namespace Debug {
+''')
 
-enum Flags {''')
+    if compound:
+        code('class CompoundFlag;')
+    code('class SimpleFlag;')
 
-    # Generate the enum.  Base flags come first, then compound flags.
-    idx = 0
-    code.indent()
-    for flag, compound, desc in allFlags:
-        if not compound:
-            code('$flag = $idx,')
-            idx += 1
+    if compound:
+        code('extern CompoundFlag $name;')
+        for flag in compound:
+            code('extern SimpleFlag $flag;')
+    else:
+        code('extern SimpleFlag $name;')
 
-    numBaseFlags = idx
-    code('NumFlags = $idx,')
-    code.dedent()
-    code()
+    code('''
+}
 
-    # put a comment in here to separate base from compound flags
-    code('''
-// 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.''')
-
-    code.indent()
-    code('All = $idx,')
-    idx += 1
-    for flag, compound, desc in allFlags:
-        if compound:
-            code('$flag = $idx,')
-            idx += 1
-
-    numCompoundFlags = idx - numBaseFlags
-    code('NumCompoundFlags = $numCompoundFlags')
-    code.dedent()
-
-    # trailer boilerplate
-    code('''\
-}; // 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__
+#endif // __DEBUG_${name}_HH__
 ''')
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to