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
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev