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