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
diff --git a/src/SConscript b/src/SConscript
index 842044e..77dec89 100755
--- a/src/SConscript
+++ b/src/SConscript
@@ -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()
-
-    # 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__
 ''')
 
     code.write(str(target[0]))
 
-flags = map(Value, trace_flags.values())
-env.Command('base/traceflags.py', flags, 
-            MakeAction(traceFlagsPy, Transform("TRACING", 0)))
-PySource('m5', 'base/traceflags.py')
+for name,flag in sorted(debug_flags.iteritems()):
+    n, compound, desc = flag
+    assert n == name
 
-env.Command('base/traceflags.hh', flags,
-            MakeAction(traceFlagsHH, Transform("TRACING", 0)))
-env.Command('base/traceflags.cc', flags, 
-            MakeAction(traceFlagsCC, Transform("TRACING", 0)))
-Source('base/traceflags.cc')
+    env.Command('debug/%s.hh' % name, Value(flag),
+                MakeAction(makeDebugFlagHH, Transform("TRACING", 0)))
+    env.Command('debug/%s.cc' % name, Value(flag),
+                MakeAction(makeDebugFlagCC, Transform("TRACING", 0)))
+    Source('debug/%s.cc' % name)
 
 # Embed python files.  All .py files that have been indicated by a
 # PySource() call in a SConscript need to be embedded into the M5
diff --git a/src/arch/alpha/interrupts.hh b/src/arch/alpha/interrupts.hh
index cbaa8e9..ce3108d 100644
--- a/src/arch/alpha/interrupts.hh
+++ b/src/arch/alpha/interrupts.hh
@@ -37,6 +37,8 @@
 #include "base/compiler.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Flow.hh"
+#include "debug/Interrupt.hh"
 #include "params/AlphaInterrupts.hh"
 #include "sim/sim_object.hh"
 
diff --git a/src/arch/alpha/kernel_stats.cc b/src/arch/alpha/kernel_stats.cc
index 70eeadd..c057e7f 100644
--- a/src/arch/alpha/kernel_stats.cc
+++ b/src/arch/alpha/kernel_stats.cc
@@ -38,6 +38,7 @@
 #include "arch/alpha/osfpal.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Context.hh"
 #include "kern/tru64/tru64_syscalls.hh"
 #include "sim/system.hh"
 
diff --git a/src/arch/alpha/linux/process.cc b/src/arch/alpha/linux/process.cc
index 0e3c4ea..97df1fe 100644
--- a/src/arch/alpha/linux/process.cc
+++ b/src/arch/alpha/linux/process.cc
@@ -34,6 +34,7 @@
 #include "arch/alpha/isa_traits.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/SyscallVerbose.hh"
 #include "kern/linux/linux.hh"
 #include "sim/process.hh"
 #include "sim/syscall_emul.hh"
diff --git a/src/arch/alpha/linux/system.cc b/src/arch/alpha/linux/system.cc
index e7440e0..6ca603a 100644
--- a/src/arch/alpha/linux/system.cc
+++ b/src/arch/alpha/linux/system.cc
@@ -48,6 +48,7 @@
 #include "base/loader/symtab.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Thread.hh"
 #include "dev/platform.hh"
 #include "kern/linux/events.hh"
 #include "kern/linux/printk.hh"
diff --git a/src/arch/alpha/process.cc b/src/arch/alpha/process.cc
index 269a7bd..637fbe0 100644
--- a/src/arch/alpha/process.cc
+++ b/src/arch/alpha/process.cc
@@ -35,6 +35,7 @@
 #include "base/loader/object_file.hh"
 #include "base/misc.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Loader.hh"
 #include "mem/page_table.hh"
 #include "sim/byteswap.hh"
 #include "sim/process_impl.hh"
diff --git a/src/arch/alpha/remote_gdb.cc b/src/arch/alpha/remote_gdb.cc
index f05b448..82fd9c2 100644
--- a/src/arch/alpha/remote_gdb.cc
+++ b/src/arch/alpha/remote_gdb.cc
@@ -136,6 +136,8 @@
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/GDBAcc.hh"
+#include "debug/GDBMisc.hh"
 #include "mem/physical.hh"
 #include "mem/port.hh"
 #include "sim/system.hh"
diff --git a/src/arch/alpha/stacktrace.hh b/src/arch/alpha/stacktrace.hh
index c09ab35..669c657 100644
--- a/src/arch/alpha/stacktrace.hh
+++ b/src/arch/alpha/stacktrace.hh
@@ -33,6 +33,7 @@
 
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/Stack.hh"
 
 class ThreadContext;
 
diff --git a/src/arch/alpha/system.cc b/src/arch/alpha/system.cc
index 4964347..6a55ef8 100644
--- a/src/arch/alpha/system.cc
+++ b/src/arch/alpha/system.cc
@@ -37,6 +37,7 @@
 #include "base/loader/object_file.hh"
 #include "base/loader/symtab.hh"
 #include "base/trace.hh"
+#include "debug/Loader.hh"
 #include "mem/physical.hh"
 #include "mem/vport.hh"
 #include "params/AlphaSystem.hh"
diff --git a/src/arch/alpha/tlb.cc b/src/arch/alpha/tlb.cc
index 6bcfffa..2c7e673 100644
--- a/src/arch/alpha/tlb.cc
+++ b/src/arch/alpha/tlb.cc
@@ -40,6 +40,7 @@
 #include "base/str.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/TLB.hh"
 
 using namespace std;
 
diff --git a/src/arch/alpha/vtophys.cc b/src/arch/alpha/vtophys.cc
index 4a043d8..c51cddd 100644
--- a/src/arch/alpha/vtophys.cc
+++ b/src/arch/alpha/vtophys.cc
@@ -37,6 +37,7 @@
 #include "base/chunk_generator.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/VtoPhys.hh"
 #include "mem/vport.hh"
 
 using namespace std;
diff --git a/src/arch/arm/faults.cc b/src/arch/arm/faults.cc
index 4150adb..03a65ea 100644
--- a/src/arch/arm/faults.cc
+++ b/src/arch/arm/faults.cc
@@ -46,6 +46,7 @@
 #include "base/trace.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Faults.hh"
 
 namespace ArmISA
 {
diff --git a/src/arch/arm/isa.cc b/src/arch/arm/isa.cc
index 9988d43..f7334ca 100644
--- a/src/arch/arm/isa.cc
+++ b/src/arch/arm/isa.cc
@@ -39,6 +39,8 @@
  */
 
 #include "arch/arm/isa.hh"
+#include "debug/Arm.hh"
+#include "debug/MiscRegs.hh"
 #include "sim/faults.hh"
 #include "sim/stat_control.hh"
 
diff --git a/src/arch/arm/isa.hh b/src/arch/arm/isa.hh
index 88d08e9..48840bf 100644
--- a/src/arch/arm/isa.hh
+++ b/src/arch/arm/isa.hh
@@ -46,6 +46,7 @@
 #include "arch/arm/registers.hh"
 #include "arch/arm/tlb.hh"
 #include "arch/arm/types.hh"
+#include "debug/Checkpoint.hh"
 
 class ThreadContext;
 class Checkpoint;
diff --git a/src/arch/arm/isa/includes.isa b/src/arch/arm/isa/includes.isa
index aebce09..b54545e 100644
--- a/src/arch/arm/isa/includes.isa
+++ b/src/arch/arm/isa/includes.isa
@@ -87,6 +87,7 @@
 #endif
 
 #include "base/cp_annotate.hh"
+#include "debug/Arm.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 #include "sim/sim_exit.hh"
diff --git a/src/arch/arm/nativetrace.cc b/src/arch/arm/nativetrace.cc
index 531a6ee..2dd225e 100644
--- a/src/arch/arm/nativetrace.cc
+++ b/src/arch/arm/nativetrace.cc
@@ -44,6 +44,7 @@
 #include "arch/arm/miscregs.hh"
 #include "arch/arm/nativetrace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/ExecRegDelta.hh"
 #include "params/ArmNativeTrace.hh"
 #include "sim/byteswap.hh"
 
diff --git a/src/arch/arm/predecoder.cc b/src/arch/arm/predecoder.cc
index b87ca62..a221f4e 100644
--- a/src/arch/arm/predecoder.cc
+++ b/src/arch/arm/predecoder.cc
@@ -46,6 +46,7 @@
 #include "arch/arm/utility.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Predecoder.hh"
 
 namespace ArmISA
 {
diff --git a/src/arch/arm/process.cc b/src/arch/arm/process.cc
index 6134919..c3b0274 100644
--- a/src/arch/arm/process.cc
+++ b/src/arch/arm/process.cc
@@ -48,6 +48,7 @@
 #include "base/loader/object_file.hh"
 #include "base/misc.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Stack.hh"
 #include "mem/page_table.hh"
 #include "mem/translating_port.hh"
 #include "sim/byteswap.hh"
diff --git a/src/arch/arm/remote_gdb.cc b/src/arch/arm/remote_gdb.cc
index 2a46807..1303f6f 100644
--- a/src/arch/arm/remote_gdb.cc
+++ b/src/arch/arm/remote_gdb.cc
@@ -151,6 +151,8 @@
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
 #include "cpu/thread_state.hh"
+#include "debug/GDBAcc.hh"
+#include "debug/GDBMisc.hh"
 #include "mem/page_table.hh"
 #include "mem/physical.hh"
 #include "mem/port.hh"
diff --git a/src/arch/arm/stacktrace.hh b/src/arch/arm/stacktrace.hh
index 05fdb9e..f88ed35 100644
--- a/src/arch/arm/stacktrace.hh
+++ b/src/arch/arm/stacktrace.hh
@@ -33,6 +33,7 @@
 
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/Stack.hh"
 
 class ThreadContext;
 namespace ArmISA
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc
index ccbca3d..ca2b68b 100644
--- a/src/arch/arm/tlb.cc
+++ b/src/arch/arm/tlb.cc
@@ -53,6 +53,9 @@
 #include "base/str.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Checkpoint.hh"
+#include "debug/TLB.hh"
+#include "debug/TLBVerbose.hh"
 #include "mem/page_table.hh"
 #include "params/ArmTLB.hh"
 #include "sim/process.hh"
diff --git a/src/arch/arm/types.hh b/src/arch/arm/types.hh
index 6bd449e..9e7c0ff 100644
--- a/src/arch/arm/types.hh
+++ b/src/arch/arm/types.hh
@@ -48,6 +48,7 @@
 #include "base/hashmap.hh"
 #include "base/misc.hh"
 #include "base/types.hh"
+#include "debug/Predecoder.hh"
 
 namespace ArmISA
 {
diff --git a/src/arch/mips/faults.cc b/src/arch/mips/faults.cc
index 9bb945d..652b596 100644
--- a/src/arch/mips/faults.cc
+++ b/src/arch/mips/faults.cc
@@ -36,6 +36,7 @@
 #include "base/trace.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/MipsPRA.hh"
 
 #if !FULL_SYSTEM
 #include "mem/page_table.hh"
diff --git a/src/arch/mips/isa.cc b/src/arch/mips/isa.cc
index 902574b..6a525ed 100644
--- a/src/arch/mips/isa.cc
+++ b/src/arch/mips/isa.cc
@@ -35,6 +35,7 @@
 #include "base/bitfield.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/MipsPRA.hh"
 
 namespace MipsISA
 {
diff --git a/src/arch/mips/isa/includes.isa b/src/arch/mips/isa/includes.isa
index b0d1aa7..73d751f 100644
--- a/src/arch/mips/isa/includes.isa
+++ b/src/arch/mips/isa/includes.isa
@@ -82,6 +82,7 @@
 
 #include "cpu/base.hh"
 #include "cpu/exetrace.hh"
+#include "debug/MipsPRA.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 #include "sim/eventq.hh"
diff --git a/src/arch/mips/linux/process.cc b/src/arch/mips/linux/process.cc
index fa8e659..156d4ea 100644
--- a/src/arch/mips/linux/process.cc
+++ b/src/arch/mips/linux/process.cc
@@ -35,6 +35,7 @@
 #include "arch/mips/isa_traits.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/SyscallVerbose.hh"
 #include "kern/linux/linux.hh"
 #include "sim/eventq.hh"
 #include "sim/process.hh"
diff --git a/src/arch/mips/locked_mem.hh b/src/arch/mips/locked_mem.hh
index 1cc08ee..60df825 100644
--- a/src/arch/mips/locked_mem.hh
+++ b/src/arch/mips/locked_mem.hh
@@ -40,6 +40,7 @@
 #include "arch/registers.hh"
 #include "base/misc.hh"
 #include "base/trace.hh"
+#include "debug/LLSC.hh"
 #include "mem/request.hh"
 
 namespace MipsISA
diff --git a/src/arch/mips/process.cc b/src/arch/mips/process.cc
index b6f21c9..c62b60b 100644
--- a/src/arch/mips/process.cc
+++ b/src/arch/mips/process.cc
@@ -36,6 +36,7 @@
 #include "base/loader/object_file.hh"
 #include "base/misc.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Loader.hh"
 #include "mem/page_table.hh"
 #include "sim/process.hh"
 #include "sim/process_impl.hh"
diff --git a/src/arch/mips/stacktrace.hh b/src/arch/mips/stacktrace.hh
index 4c02cc8..8520c3d 100644
--- a/src/arch/mips/stacktrace.hh
+++ b/src/arch/mips/stacktrace.hh
@@ -33,6 +33,7 @@
 
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/Stack.hh"
 
 class ThreadContext;
 
diff --git a/src/arch/mips/tlb.cc b/src/arch/mips/tlb.cc
index b73eae7..0f76363 100644
--- a/src/arch/mips/tlb.cc
+++ b/src/arch/mips/tlb.cc
@@ -43,6 +43,8 @@
 #include "base/str.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/MipsPRA.hh"
+#include "debug/TLB.hh"
 #include "mem/page_table.hh"
 #include "params/MipsTLB.hh"
 #include "sim/process.hh"
diff --git a/src/arch/power/process.cc b/src/arch/power/process.cc
index a34a874..d12e3ea 100644
--- a/src/arch/power/process.cc
+++ b/src/arch/power/process.cc
@@ -37,6 +37,7 @@
 #include "base/loader/object_file.hh"
 #include "base/misc.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Stack.hh"
 #include "mem/page_table.hh"
 #include "mem/translating_port.hh"
 #include "sim/process_impl.hh"
diff --git a/src/arch/power/stacktrace.hh b/src/arch/power/stacktrace.hh
index e87203d..72a66e5 100644
--- a/src/arch/power/stacktrace.hh
+++ b/src/arch/power/stacktrace.hh
@@ -37,6 +37,7 @@
 
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/Stack.hh"
 
 class ThreadContext;
 class StackTrace;
diff --git a/src/arch/power/tlb.cc b/src/arch/power/tlb.cc
index aa47b83..8a08803 100644
--- a/src/arch/power/tlb.cc
+++ b/src/arch/power/tlb.cc
@@ -46,6 +46,8 @@
 #include "base/str.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Power.hh"
+#include "debug/TLB.hh"
 #include "mem/page_table.hh"
 #include "params/PowerTLB.hh"
 #include "sim/process.hh"
diff --git a/src/arch/sparc/interrupts.hh b/src/arch/sparc/interrupts.hh
index 5e9ae2d..b728e71 100644
--- a/src/arch/sparc/interrupts.hh
+++ b/src/arch/sparc/interrupts.hh
@@ -36,6 +36,7 @@
 #include "arch/sparc/isa_traits.hh"
 #include "arch/sparc/registers.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Interrupt.hh"
 #include "params/SparcInterrupts.hh"
 #include "sim/sim_object.hh"
 
diff --git a/src/arch/sparc/isa.cc b/src/arch/sparc/isa.cc
index c605675..6c9be81 100644
--- a/src/arch/sparc/isa.cc
+++ b/src/arch/sparc/isa.cc
@@ -35,6 +35,8 @@
 #include "config/full_system.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/MiscRegs.hh"
+#include "debug/Timer.hh"
 
 namespace SparcISA
 {
diff --git a/src/arch/sparc/isa/includes.isa b/src/arch/sparc/isa/includes.isa
index 8ef753d..885cd9c 100644
--- a/src/arch/sparc/isa/includes.isa
+++ b/src/arch/sparc/isa/includes.isa
@@ -74,6 +74,7 @@
 #include "base/bigint.hh"
 #include "cpu/base.hh"
 #include "cpu/exetrace.hh"
+#include "debug/Sparc.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 #include "sim/sim_exit.hh"
diff --git a/src/arch/sparc/process.cc b/src/arch/sparc/process.cc
index bd3db92..3eee3d1 100644
--- a/src/arch/sparc/process.cc
+++ b/src/arch/sparc/process.cc
@@ -39,6 +39,7 @@
 #include "base/loader/object_file.hh"
 #include "base/misc.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Stack.hh"
 #include "mem/page_table.hh"
 #include "mem/translating_port.hh"
 #include "sim/process_impl.hh"
diff --git a/src/arch/sparc/remote_gdb.cc b/src/arch/sparc/remote_gdb.cc
index 86c2872..48f0c3e 100644
--- a/src/arch/sparc/remote_gdb.cc
+++ b/src/arch/sparc/remote_gdb.cc
@@ -130,6 +130,7 @@
 #include "config/full_system.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/GDBRead.hh"
 #include "mem/page_table.hh"
 #include "mem/physical.hh"
 #include "mem/port.hh"
diff --git a/src/arch/sparc/stacktrace.hh b/src/arch/sparc/stacktrace.hh
index 0b7d0b0..1e7853d 100644
--- a/src/arch/sparc/stacktrace.hh
+++ b/src/arch/sparc/stacktrace.hh
@@ -35,6 +35,7 @@
 
 #include "base/types.hh"
 #include "cpu/static_inst.hh"
+#include "debug/Stack.hh"
 
 class ThreadContext;
 namespace SparcISA
diff --git a/src/arch/sparc/tlb.cc b/src/arch/sparc/tlb.cc
index 8742cfd..00ec4e4 100644
--- a/src/arch/sparc/tlb.cc
+++ b/src/arch/sparc/tlb.cc
@@ -38,6 +38,8 @@
 #include "base/trace.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/IPR.hh"
+#include "debug/TLB.hh"
 #include "mem/packet_access.hh"
 #include "mem/request.hh"
 #include "sim/system.hh"
diff --git a/src/arch/sparc/ua2005.cc b/src/arch/sparc/ua2005.cc
index efab8b8..67c1790 100644
--- a/src/arch/sparc/ua2005.cc
+++ b/src/arch/sparc/ua2005.cc
@@ -33,6 +33,8 @@
 #include "base/trace.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Quiesce.hh"
+#include "debug/Timer.hh"
 #include "sim/system.hh"
 
 using namespace SparcISA;
diff --git a/src/arch/sparc/vtophys.cc b/src/arch/sparc/vtophys.cc
index c8f35fe..edcf888 100644
--- a/src/arch/sparc/vtophys.cc
+++ b/src/arch/sparc/vtophys.cc
@@ -36,6 +36,7 @@
 #include "base/compiler.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/VtoPhys.hh"
 #include "mem/vport.hh"
 
 using namespace std;
diff --git a/src/arch/x86/faults.cc b/src/arch/x86/faults.cc
index 7fb677c..feb88fd 100644
--- a/src/arch/x86/faults.cc
+++ b/src/arch/x86/faults.cc
@@ -45,12 +45,14 @@
 #include "base/trace.hh"
 #include "config/full_system.hh"
 #include "cpu/thread_context.hh"
+
 #if !FULL_SYSTEM
 #include "arch/x86/isa_traits.hh"
 #include "mem/page_table.hh"
 #include "sim/process.hh"
 #else
 #include "arch/x86/tlb.hh"
+#include "debug/Faults.hh"
 #endif
 
 namespace X86ISA
diff --git a/src/arch/x86/insts/microregop.cc b/src/arch/x86/insts/microregop.cc
index dedea0f..f5f32e3 100644
--- a/src/arch/x86/insts/microregop.cc
+++ b/src/arch/x86/insts/microregop.cc
@@ -42,6 +42,7 @@
 #include "arch/x86/insts/microregop.hh"
 #include "arch/x86/regs/misc.hh"
 #include "base/condcodes.hh"
+#include "debug/X86.hh"
 
 namespace X86ISA
 {
diff --git a/src/arch/x86/insts/static_inst.hh b/src/arch/x86/insts/static_inst.hh
index 8813f21..b4e348f 100644
--- a/src/arch/x86/insts/static_inst.hh
+++ b/src/arch/x86/insts/static_inst.hh
@@ -42,6 +42,7 @@
 
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/X86.hh"
 
 namespace X86ISA
 {
diff --git a/src/arch/x86/interrupts.cc b/src/arch/x86/interrupts.cc
index c45b0c3..7d6f6e3 100644
--- a/src/arch/x86/interrupts.cc
+++ b/src/arch/x86/interrupts.cc
@@ -41,6 +41,7 @@
 #include "arch/x86/interrupts.hh"
 #include "arch/x86/intmessage.hh"
 #include "cpu/base.hh"
+#include "debug/LocalApic.hh"
 #include "dev/x86/i82094aa.hh"
 #include "dev/x86/pc.hh"
 #include "dev/x86/south_bridge.hh"
diff --git a/src/arch/x86/isa/includes.isa b/src/arch/x86/isa/includes.isa
index 6f4c400..8d4af68 100644
--- a/src/arch/x86/isa/includes.isa
+++ b/src/arch/x86/isa/includes.isa
@@ -118,6 +118,7 @@
 #include "base/condcodes.hh"
 #include "cpu/base.hh"
 #include "cpu/exetrace.hh"
+#include "debug/X86.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 #include "mem/request.hh"
diff --git a/src/arch/x86/nativetrace.cc b/src/arch/x86/nativetrace.cc
index 3dd5890..557508e 100644
--- a/src/arch/x86/nativetrace.cc
+++ b/src/arch/x86/nativetrace.cc
@@ -33,6 +33,7 @@
 #include "arch/x86/isa_traits.hh"
 #include "arch/x86/nativetrace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/ExecRegDelta.hh"
 #include "params/X86NativeTrace.hh"
 #include "sim/byteswap.hh"
 
diff --git a/src/arch/x86/pagetable_walker.cc b/src/arch/x86/pagetable_walker.cc
index 835cc69..c80fe10 100644
--- a/src/arch/x86/pagetable_walker.cc
+++ b/src/arch/x86/pagetable_walker.cc
@@ -44,6 +44,7 @@
 #include "base/bitfield.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/PageTableWalker.hh"
 #include "mem/packet_access.hh"
 #include "mem/request.hh"
 #include "sim/system.hh"
diff --git a/src/arch/x86/predecoder.cc b/src/arch/x86/predecoder.cc
index 0318230..429b916 100644
--- a/src/arch/x86/predecoder.cc
+++ b/src/arch/x86/predecoder.cc
@@ -43,6 +43,7 @@
 #include "base/trace.hh"
 #include "base/types.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Predecoder.hh"
 
 namespace X86ISA
 {
diff --git a/src/arch/x86/predecoder.hh b/src/arch/x86/predecoder.hh
index f0d9cda..49938dd 100644
--- a/src/arch/x86/predecoder.hh
+++ b/src/arch/x86/predecoder.hh
@@ -48,6 +48,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "base/types.hh"
+#include "debug/Predecoder.hh"
 
 class ThreadContext;
 
diff --git a/src/arch/x86/process.cc b/src/arch/x86/process.cc
index 693a8fa..79a1407 100644
--- a/src/arch/x86/process.cc
+++ b/src/arch/x86/process.cc
@@ -51,6 +51,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Stack.hh"
 #include "mem/page_table.hh"
 #include "mem/translating_port.hh"
 #include "sim/process_impl.hh"
diff --git a/src/arch/x86/stacktrace.hh b/src/arch/x86/stacktrace.hh
index 854fb39..e9d6900 100644
--- a/src/arch/x86/stacktrace.hh
+++ b/src/arch/x86/stacktrace.hh
@@ -33,6 +33,7 @@
 
 #include "base/trace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/Stack.hh"
 
 class ThreadContext;
 namespace X86ISA
diff --git a/src/arch/x86/tlb.cc b/src/arch/x86/tlb.cc
index f5e73dc..199f070 100644
--- a/src/arch/x86/tlb.cc
+++ b/src/arch/x86/tlb.cc
@@ -50,6 +50,7 @@
 #include "config/full_system.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/TLB.hh"
 #include "mem/packet_access.hh"
 #include "mem/request.hh"
 
diff --git a/src/arch/x86/vtophys.cc b/src/arch/x86/vtophys.cc
index 0fa43fd..60ce371 100644
--- a/src/arch/x86/vtophys.cc
+++ b/src/arch/x86/vtophys.cc
@@ -45,6 +45,7 @@
 #include "base/trace.hh"
 #include "config/full_system.hh"
 #include "cpu/thread_context.hh"
+#include "debug/VtoPhys.hh"
 #include "sim/fault_fwd.hh"
 
 using namespace std;
diff --git a/src/base/debug.cc b/src/base/debug.cc
index 6f01b3f..be301da 100644
--- a/src/base/debug.cc
+++ b/src/base/debug.cc
@@ -31,12 +31,24 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <algorithm>
 #include <csignal>
+#include <map>
+#include <vector>
 
 #include "base/cprintf.hh"
+#include "base/debug.hh"
+#include "base/misc.hh"
+
+using namespace std;
 
 namespace Debug {
 
+//
+// This function will cause the process to signal itself with a
+// SIGTRAP which is ignored if not in gdb, but will cause the debugger
+// to break if in gdb.
+//
 void
 breakpoint()
 {
@@ -47,4 +59,127 @@
 #endif
 }
 
+//
+// Flags for debugging purposes.  Primarily for trace.hh
+//
+typedef std::map<string, Flag *> FlagsMap;
+int allFlagsVersion = 0;
+FlagsMap &
+allFlags()
+{
+    static FlagsMap flags;
+    return flags;
+}
+
+Flag *
+findFlag(const std::string &name)
+{
+    FlagsMap::iterator i = allFlags().find(name);
+    if (i == allFlags().end())
+        return NULL;
+    return i->second;
+}
+
+Flag::Flag(const char *name, const char *desc)
+    : _name(name), _desc(desc)
+{
+    pair<FlagsMap::iterator, bool> result =
+        allFlags().insert(make_pair(name, this));
+
+    if (!result.second)
+        panic("Flag %s already defined!", name);
+
+    ++allFlagsVersion;
+}
+
+Flag::~Flag()
+{
+    // should find and remove flag.
+}
+
+void
+CompoundFlag::enable()
+{
+    SimpleFlag::enable();
+    for_each(flags.begin(), flags.end(), mem_fun(&Flag::enable));
+}
+
+void
+CompoundFlag::disable()
+{
+    SimpleFlag::disable();
+    for_each(flags.begin(), flags.end(), mem_fun(&Flag::disable));
+}
+
+struct AllFlags : public Flag
+{
+    AllFlags()
+        : Flag("All", "All Flags")
+    {}
+
+    void
+    enable()
+    {
+        FlagsMap::iterator i = allFlags().begin();
+        FlagsMap::iterator end = allFlags().end();
+        for (; i != end; ++i)
+            if (i->second != this)
+                i->second->enable();
+    }
+
+    void
+    disable()
+    {
+        FlagsMap::iterator i = allFlags().begin();
+        FlagsMap::iterator end = allFlags().end();
+        for (; i != end; ++i)
+            if (i->second != this)
+                i->second->enable();
+    }
+};
+
+AllFlags theAllFlags;
+Flag *const All = &theAllFlags;
+
+bool
+changeFlag(const char *s, bool value)
+{
+    Flag *f = findFlag(s);
+    if (!f)
+        return false;
+
+    if (value)
+        f->enable();
+    else
+        f->disable();
+
+    return true;
+}
+
 } // namespace Debug
+
+// add a set of functions that can easily be invoked from gdb
+void
+setDebugFlag(const char *string)
+{
+    Debug::changeFlag(string, true);
+}
+
+void
+clearDebugFlag(const char *string)
+{
+    Debug::changeFlag(string, false);
+}
+
+void
+dumpDebugFlags()
+{
+    using namespace Debug;
+    FlagsMap::iterator i = allFlags().begin();
+    FlagsMap::iterator end = allFlags().end();
+    for (; i != end; ++i) {
+        SimpleFlag *f = dynamic_cast<SimpleFlag *>(i->second);
+        if (f && f->status())
+            cprintf("%s\n", f->name());
+    }
+}
diff --git a/src/base/debug.hh b/src/base/debug.hh
index ee74029..ced6b4f 100644
--- a/src/base/debug.hh
+++ b/src/base/debug.hh
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2010 The Hewlett-Packard Development Company
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,10 +32,84 @@
 #ifndef __BASE_DEBUG_HH__
 #define __BASE_DEBUG_HH__
 
+#include <string>
+#include <vector>
+
 namespace Debug {
 
 void breakpoint();
 
+class Flag
+{
+  protected:
+    const char *_name;
+    const char *_desc;
+
+  public:
+    Flag(const char *name, const char *desc);
+    virtual ~Flag();
+
+    std::string name() const { return _name; }
+    std::string desc() const { return _desc; }
+
+    virtual void enable() = 0;
+    virtual void disable() = 0;
+};
+
+class SimpleFlag : public Flag
+{
+  protected:
+    bool _status;
+
+  public:
+    SimpleFlag(const char *name, const char *desc)
+        : Flag(name, desc)
+    { }
+
+    bool status() const { return _status; }
+    operator bool() const { return _status; }
+    bool operator!() const { return !_status; }
+
+    void enable() { _status = true; }
+    void disable() { _status = false; }
+};
+
+class CompoundFlag : public SimpleFlag
+{
+  protected:
+    std::vector<Flag *> flags;
+
+  public:
+    CompoundFlag(const char *name, const char *desc,
+        Flag &f00 = *(Flag *)0, Flag &f01 = *(Flag *)0,
+        Flag &f02 = *(Flag *)0, Flag &f03 = *(Flag *)0,
+        Flag &f04 = *(Flag *)0, Flag &f05 = *(Flag *)0,
+        Flag &f06 = *(Flag *)0, Flag &f07 = *(Flag *)0,
+        Flag &f08 = *(Flag *)0, Flag &f09 = *(Flag *)0,
+        Flag &f10 = *(Flag *)0, Flag &f11 = *(Flag *)0,
+        Flag &f12 = *(Flag *)0, Flag &f13 = *(Flag *)0,
+        Flag &f14 = *(Flag *)0, Flag &f15 = *(Flag *)0,
+        Flag &f16 = *(Flag *)0, Flag &f17 = *(Flag *)0,
+        Flag &f18 = *(Flag *)0, Flag &f19 = *(Flag *)0)
+        : SimpleFlag(name, desc)
+    {
+        addFlag(f00); addFlag(f01); addFlag(f02); addFlag(f03); addFlag(f04);
+        addFlag(f05); addFlag(f06); addFlag(f07); addFlag(f08); addFlag(f09);
+        addFlag(f10); addFlag(f11); addFlag(f12); addFlag(f13); addFlag(f14);
+        addFlag(f15); addFlag(f16); addFlag(f17); addFlag(f18); addFlag(f19);
+    }
+
+    void
+    addFlag(Flag &f)
+    {
+        if (&f != NULL)
+            flags.push_back(&f);
+    }
+
+    void enable();
+    void disable();
+};
+
 } // namespace Debug
 
 #endif // __BASE_DEBUG_HH__
diff --git a/src/base/loader/aout_object.cc b/src/base/loader/aout_object.cc
index 31a6a28..756f03a 100644
--- a/src/base/loader/aout_object.cc
+++ b/src/base/loader/aout_object.cc
@@ -34,6 +34,7 @@
 #include "base/loader/exec_aout.h"
 #include "base/loader/symtab.hh"
 #include "base/trace.hh"
+#include "debug/Loader.hh"
 
 using namespace std;
 
diff --git a/src/base/loader/ecoff_object.cc b/src/base/loader/ecoff_object.cc
index 2027a2e..263085d 100644
--- a/src/base/loader/ecoff_object.cc
+++ b/src/base/loader/ecoff_object.cc
@@ -35,6 +35,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "base/types.hh"
+#include "debug/Loader.hh"
 
 // Only alpha will be able to load ecoff files for now.
 // base/types.hh and ecoff_machdep.h must be before the other .h files
diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc
index 22316c0..6fcbd0a 100644
--- a/src/base/loader/elf_object.cc
+++ b/src/base/loader/elf_object.cc
@@ -37,6 +37,7 @@
 #include "base/bitfield.hh"
 #include "base/misc.hh"
 #include "base/trace.hh"
+#include "debug/Loader.hh"
 #include "sim/byteswap.hh"
 #include "gelf.h"
 
diff --git a/src/base/loader/raw_object.cc b/src/base/loader/raw_object.cc
index d002d90..eb1e06d 100644
--- a/src/base/loader/raw_object.cc
+++ b/src/base/loader/raw_object.cc
@@ -31,6 +31,7 @@
 #include "base/loader/raw_object.hh"
 #include "base/loader/symtab.hh"
 #include "base/trace.hh"
+#include "debug/Loader.hh"
 
 ObjectFile *
 RawObject::tryFile(const std::string &fname, int fd, size_t len, uint8_t *data)
diff --git a/src/base/mysql.cc b/src/base/mysql.cc
index 3216bcf..a029c13 100644
--- a/src/base/mysql.cc
+++ b/src/base/mysql.cc
@@ -32,6 +32,7 @@
 
 #include "base/mysql.hh"
 #include "base/trace.hh"
+#include "debug/SQL.hh"
 
 using namespace std;
 
diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc
index 02ee8e3..01e5082 100644
--- a/src/base/remote_gdb.cc
+++ b/src/base/remote_gdb.cc
@@ -136,11 +136,13 @@
 #include "config/the_isa.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/GDBAll.hh"
 #include "mem/port.hh"
 #include "mem/translating_port.hh"
 #include "sim/system.hh"
 
 using namespace std;
+using namespace Debug;
 using namespace TheISA;
 
 #ifndef NDEBUG
diff --git a/src/base/trace.cc b/src/base/trace.cc
index 7783b6d..1a035d4 100644
--- a/src/base/trace.cc
+++ b/src/base/trace.cc
@@ -32,9 +32,7 @@
 #include <cctype>
 #include <fstream>
 #include <iostream>
-#include <list>
 #include <string>
-#include <vector>
 
 #include "base/misc.hh"
 #include "base/output.hh"
@@ -45,8 +43,8 @@
 using namespace std;
 
 namespace Trace {
+
 const string DefaultName("global");
-FlagVec flags(NumFlags, false);
 bool enabled = false;
 
 //
@@ -149,63 +147,4 @@
     }
 }
 
-bool
-changeFlag(const char *s, bool value)
-{
-    using namespace Trace;
-    std::string str(s);
-
-    for (int i = 0; i < numFlagStrings; ++i) {
-        if (str != flagStrings[i])
-            continue;
-
-        if (i < NumFlags) {
-            flags[i] = value;
-        } else {
-            i -= NumFlags;
-
-            const Flags *flagVec = compoundFlags[i];
-            for (int j = 0; flagVec[j] != -1; ++j) {
-                if (flagVec[j] < NumFlags)
-                    flags[flagVec[j]] = value;
-            }
-        }
-
-        return true;
-    }
-
-    // the flag was not found.
-    return false;
-}
-
-void
-dumpStatus()
-{
-    using namespace Trace;
-    for (int i = 0; i < numFlagStrings; ++i) {
-        if (flags[i])
-            cprintf("%s\n", flagStrings[i]);
-    }
-}
-
 } // namespace Trace
-
-
-// add a set of functions that can easily be invoked from gdb
-void
-setTraceFlag(const char *string)
-{
-    Trace::changeFlag(string, true);
-}
-
-void
-clearTraceFlag(const char *string)
-{
-    Trace::changeFlag(string, false);
-}
-
-void
-dumpTraceStatus()
-{
-    Trace::dumpStatus();
-}
diff --git a/src/base/trace.hh b/src/base/trace.hh
index a03a340..dbeffdc 100644
--- a/src/base/trace.hh
+++ b/src/base/trace.hh
@@ -33,23 +33,22 @@
 #define __BASE_TRACE_HH__
 
 #include <string>
-#include <vector>
 
 #include "base/cprintf.hh"
+#include "base/debug.hh"
 #include "base/match.hh"
-#include "base/traceflags.hh"
 #include "base/types.hh"
 #include "sim/core.hh"
 
 namespace Trace {
 
+using Debug::SimpleFlag;
+using Debug::CompoundFlag;
+
 std::ostream &output();
 void setOutput(const std::string &filename);
 
 extern bool enabled;
-typedef std::vector<bool> FlagVec;
-extern FlagVec flags;
-inline bool IsOn(int t) { return flags[t]; }
 bool changeFlag(const char *str, bool value);
 void dumpStatus();
 
@@ -85,25 +84,28 @@
 
 #if TRACING_ON
 
-#define DTRACE(x) (Trace::IsOn(Trace::x) && Trace::enabled)
+#define DTRACE(x) ((Debug::x) && Trace::enabled)
 
 #define DDUMP(x, data, count) do {                              \
+    using namespace Debug;                                      \
     if (DTRACE(x))                                              \
         Trace::dump(curTick(), name(), data, count);              \
 } while (0)
 
 #define DPRINTF(x, ...) do {                                    \
+    using namespace Debug;                                      \
     if (DTRACE(x))                                              \
         Trace::dprintf(curTick(), name(), __VA_ARGS__);           \
 } while (0)
 
-#define DPRINTFS(x,s, ...) do {                                    \
+#define DPRINTFS(x, s, ...) do {                                \
+    using namespace Debug;                                      \
     if (DTRACE(x))                                              \
-        Trace::dprintf(curTick(), s->name(), __VA_ARGS__);           \
+        Trace::dprintf(curTick(), s->name(), __VA_ARGS__);      \
 } while (0)
 
-
 #define DPRINTFR(x, ...) do {                                   \
+    using namespace Debug;                                      \
     if (DTRACE(x))                                              \
         Trace::dprintf((Tick)-1, std::string(), __VA_ARGS__);   \
 } while (0)
diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index 84e1a20..18e581b 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -55,6 +55,7 @@
 #include "base/misc.hh"
 #include "base/socket.hh"
 #include "base/trace.hh"
+#include "debug/VNC.hh"
 #include "sim/byteswap.hh"
 
 using namespace std;
diff --git a/src/cpu/SConscript b/src/cpu/SConscript
index 99308c2..fb7c868 100644
--- a/src/cpu/SConscript
+++ b/src/cpu/SConscript
@@ -173,6 +173,10 @@
 TraceFlag('PCEvent')
 TraceFlag('Quiesce')
 
+CompoundFlag('ExecAll', [ 'ExecEnable', 'ExecCPSeq', 'ExecEffAddr',
+    'ExecFaulting', 'ExecFetchSeq', 'ExecOpClass', 'ExecRegDelta',
+    'ExecResult', 'ExecSpeculative', 'ExecSymbol', 'ExecThread',
+    'ExecTicks', 'ExecMicro', 'ExecMacro' ])
 CompoundFlag('Exec', [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', 'ExecThread',
     'ExecEffAddr', 'ExecResult', 'ExecSymbol', 'ExecMicro', 'ExecFaulting' ])
 CompoundFlag('ExecNoTicks', [ 'ExecEnable', 'ExecOpClass', 'ExecThread',
diff --git a/src/cpu/activity.cc b/src/cpu/activity.cc
index 84f88d5..13613cf 100644
--- a/src/cpu/activity.cc
+++ b/src/cpu/activity.cc
@@ -32,6 +32,7 @@
 
 #include "cpu/activity.hh"
 #include "cpu/timebuf.hh"
+#include "debug/Activity.hh"
 
 using namespace std;
 
diff --git a/src/cpu/base.cc b/src/cpu/base.cc
index 1d249b2..1e25a59 100644
--- a/src/cpu/base.cc
+++ b/src/cpu/base.cc
@@ -45,6 +45,7 @@
 #include "cpu/cpuevent.hh"
 #include "cpu/profile.hh"
 #include "cpu/thread_context.hh"
+#include "debug/SyscallVerbose.hh"
 #include "params/BaseCPU.hh"
 #include "sim/process.hh"
 #include "sim/sim_events.hh"
diff --git a/src/cpu/base_dyn_inst_impl.hh b/src/cpu/base_dyn_inst_impl.hh
index 688d5c6..226291e 100644
--- a/src/cpu/base_dyn_inst_impl.hh
+++ b/src/cpu/base_dyn_inst_impl.hh
@@ -50,6 +50,8 @@
 #include "config/the_isa.hh"
 #include "cpu/base_dyn_inst.hh"
 #include "cpu/exetrace.hh"
+#include "debug/DynInst.hh"
+#include "debug/IQ.hh"
 #include "mem/request.hh"
 #include "sim/faults.hh"
 
diff --git a/src/cpu/exetrace.cc b/src/cpu/exetrace.cc
index ea90ba7..a6450ff 100644
--- a/src/cpu/exetrace.cc
+++ b/src/cpu/exetrace.cc
@@ -41,6 +41,7 @@
 #include "cpu/exetrace.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/ExecAll.hh"
 #include "enums/OpClass.hh"
 
 using namespace std;
@@ -59,22 +60,21 @@
 {
     ostream &outs = Trace::output();
 
-    if (IsOn(ExecTicks))
+    if (Debug::ExecTicks)
         dumpTicks(outs);
 
     outs << thread->getCpuPtr()->name() << " ";
 
-    if (IsOn(ExecSpeculative))
+    if (Debug::ExecSpeculative)
         outs << (misspeculating ? "-" : "+") << " ";
 
-    if (IsOn(ExecThread))
+    if (Debug::ExecThread)
         outs << "T" << thread->threadId() << " : ";
 
     std::string sym_str;
     Addr sym_addr;
     Addr cur_pc = pc.instAddr();
-    if (debugSymbolTable
-        && IsOn(ExecSymbol)
+    if (debugSymbolTable && Debug::ExecSymbol
 #if FULL_SYSTEM
         && !inUserMode(thread)
 #endif
@@ -104,25 +104,25 @@
     if (ran) {
         outs << " : ";
 
-        if (IsOn(ExecOpClass)) {
+        if (Debug::ExecOpClass) {
             outs << Enums::OpClassStrings[inst->opClass()] << " : ";
         }
 
-        if (IsOn(ExecResult) && predicate == false) {
+        if (Debug::ExecResult && predicate == false) {
             outs << "Predicated False";
         }
 
-        if (IsOn(ExecResult) && data_status != DataInvalid) {
+        if (Debug::ExecResult && data_status != DataInvalid) {
             ccprintf(outs, " D=%#018x", data.as_int);
         }
 
-        if (IsOn(ExecEffAddr) && addr_valid)
+        if (Debug::ExecEffAddr && addr_valid)
             outs << " A=0x" << hex << addr;
 
-        if (IsOn(ExecFetchSeq) && fetch_seq_valid)
+        if (Debug::ExecFetchSeq && fetch_seq_valid)
             outs << "  FetchSeq=" << dec << fetch_seq;
 
-        if (IsOn(ExecCPSeq) && cp_seq_valid)
+        if (Debug::ExecCPSeq && cp_seq_valid)
             outs << "  CPSeq=" << dec << cp_seq;
     }
 
@@ -143,14 +143,14 @@
      * finishes. Macroops then behave like regular instructions and don't
      * complete/print when they fault.
      */
-    if (IsOn(ExecMacro) && staticInst->isMicroop() &&
-            ((IsOn(ExecMicro) &&
-             macroStaticInst && staticInst->isFirstMicroop()) ||
-            (!IsOn(ExecMicro) &&
+    if (Debug::ExecMacro && staticInst->isMicroop() &&
+        ((Debug::ExecMicro &&
+            macroStaticInst && staticInst->isFirstMicroop()) ||
+            (!Debug::ExecMicro &&
              macroStaticInst && staticInst->isLastMicroop()))) {
         traceInst(macroStaticInst, false);
     }
-    if (IsOn(ExecMicro) || !staticInst->isMicroop()) {
+    if (Debug::ExecMicro || !staticInst->isMicroop()) {
         traceInst(staticInst, true);
     }
 }
diff --git a/src/cpu/exetrace.hh b/src/cpu/exetrace.hh
index 5dc65b4..6d9f2a3 100644
--- a/src/cpu/exetrace.hh
+++ b/src/cpu/exetrace.hh
@@ -36,6 +36,8 @@
 #include "base/types.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/ExecEnable.hh"
+#include "debug/ExecSpeculative.hh"
 #include "params/ExeTracer.hh"
 #include "sim/insttracer.hh"
 
@@ -72,13 +74,13 @@
             const StaticInstPtr staticInst, TheISA::PCState pc,
             const StaticInstPtr macroStaticInst = NULL)
     {
-        if (!IsOn(ExecEnable))
+        if (!Debug::ExecEnable)
             return NULL;
 
         if (!Trace::enabled)
             return NULL;
 
-        if (!IsOn(ExecSpeculative) && tc->misspeculating())
+        if (!Debug::ExecSpeculative && tc->misspeculating())
             return NULL;
 
         return new ExeTracerRecord(when, tc,
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc
index f7fff05..c270206 100644
--- a/src/cpu/inorder/cpu.cc
+++ b/src/cpu/inorder/cpu.cc
@@ -47,6 +47,10 @@
 #include "cpu/exetrace.hh"
 #include "cpu/simple_thread.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Activity.hh"
+#include "debug/InOrderCPU.hh"
+#include "debug/RefCount.hh"
+#include "debug/SkedCache.hh"
 #include "mem/translating_port.hh"
 #include "params/InOrderCPU.hh"
 #include "sim/process.hh"
diff --git a/src/cpu/inorder/first_stage.cc b/src/cpu/inorder/first_stage.cc
index bf57681..20fd916 100644
--- a/src/cpu/inorder/first_stage.cc
+++ b/src/cpu/inorder/first_stage.cc
@@ -34,6 +34,7 @@
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/first_stage.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/InOrderStage.hh"
 #include "params/InOrderTrace.hh"
 
 using namespace std;
diff --git a/src/cpu/inorder/inorder_dyn_inst.cc b/src/cpu/inorder/inorder_dyn_inst.cc
index 90134f5..30a69bb 100644
--- a/src/cpu/inorder/inorder_dyn_inst.cc
+++ b/src/cpu/inorder/inorder_dyn_inst.cc
@@ -41,6 +41,7 @@
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/inorder_dyn_inst.hh"
 #include "cpu/exetrace.hh"
+#include "debug/InOrderDynInst.hh"
 #include "mem/request.hh"
 
 using namespace std;
diff --git a/src/cpu/inorder/inorder_dyn_inst.hh b/src/cpu/inorder/inorder_dyn_inst.hh
index 1fbc476..033726d 100644
--- a/src/cpu/inorder/inorder_dyn_inst.hh
+++ b/src/cpu/inorder/inorder_dyn_inst.hh
@@ -57,6 +57,7 @@
 #include "cpu/op_class.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/InOrderDynInst.hh"
 #include "mem/packet.hh"
 #include "sim/system.hh"
 
diff --git a/src/cpu/inorder/inorder_trace.cc b/src/cpu/inorder/inorder_trace.cc
index 8d40451..8edb5b1 100644
--- a/src/cpu/inorder/inorder_trace.cc
+++ b/src/cpu/inorder/inorder_trace.cc
@@ -37,6 +37,7 @@
 #include "cpu/exetrace.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/ExecEnable.hh"
 #include "params/InOrderTrace.hh"
 
 using namespace std;
@@ -64,7 +65,7 @@
 InOrderTrace::getInstRecord(unsigned num_stages, bool stage_tracing,
         ThreadContext *tc)
 {
-    if (!IsOn(ExecEnable))
+    if (!Debug::ExecEnable)
         return NULL;
 
     if (!Trace::enabled)
diff --git a/src/cpu/inorder/pipeline_stage.cc b/src/cpu/inorder/pipeline_stage.cc
index b9e21e2..fe97fb8 100644
--- a/src/cpu/inorder/pipeline_stage.cc
+++ b/src/cpu/inorder/pipeline_stage.cc
@@ -34,6 +34,11 @@
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/pipeline_stage.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/Activity.hh"
+#include "debug/InOrderStage.hh"
+#include "debug/InOrderStall.hh"
+#include "debug/Resource.hh"
+#include "debug/ThreadModel.hh"
 
 using namespace std;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/reg_dep_map.cc b/src/cpu/inorder/reg_dep_map.cc
index 8eb7a31..cf66f42 100644
--- a/src/cpu/inorder/reg_dep_map.cc
+++ b/src/cpu/inorder/reg_dep_map.cc
@@ -35,6 +35,7 @@
 #include "cpu/inorder/inorder_dyn_inst.hh"
 #include "cpu/inorder/pipeline_traits.hh"
 #include "cpu/inorder/reg_dep_map.hh"
+#include "debug/RegDepMap.hh"
 
 using namespace std;
 using namespace TheISA;
diff --git a/src/cpu/inorder/resource.cc b/src/cpu/inorder/resource.cc
index b72dbd1..bdcfbde 100644
--- a/src/cpu/inorder/resource.cc
+++ b/src/cpu/inorder/resource.cc
@@ -35,6 +35,10 @@
 #include "base/str.hh"
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/resource.hh"
+#include "debug/RefCount.hh"
+#include "debug/ResReqCount.hh"
+#include "debug/Resource.hh"
+
 using namespace std;
 
 Resource::Resource(string res_name, int res_id, int res_width,
diff --git a/src/cpu/inorder/resource_pool.cc b/src/cpu/inorder/resource_pool.cc
index a9eb742..536a3b5 100644
--- a/src/cpu/inorder/resource_pool.cc
+++ b/src/cpu/inorder/resource_pool.cc
@@ -34,6 +34,7 @@
 
 #include "cpu/inorder/resources/resource_list.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/Resource.hh"
 
 using namespace std;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/resource_sked.cc b/src/cpu/inorder/resource_sked.cc
index 4435008..96b4f84 100644
--- a/src/cpu/inorder/resource_sked.cc
+++ b/src/cpu/inorder/resource_sked.cc
@@ -35,6 +35,7 @@
 
 #include "cpu/inorder/pipeline_traits.hh"
 #include "cpu/inorder/resource_sked.hh"
+#include "debug/SkedCache.hh"
 
 using namespace std;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/resources/agen_unit.cc b/src/cpu/inorder/resources/agen_unit.cc
index 3e26c4d..d87ca36 100644
--- a/src/cpu/inorder/resources/agen_unit.cc
+++ b/src/cpu/inorder/resources/agen_unit.cc
@@ -30,6 +30,7 @@
  */
 
 #include "cpu/inorder/resources/agen_unit.hh"
+#include "debug/InOrderAGEN.hh"
 
 AGENUnit::AGENUnit(std::string res_name, int res_id, int res_width,
                    int res_latency, InOrderCPU *_cpu,
diff --git a/src/cpu/inorder/resources/bpred_unit.cc b/src/cpu/inorder/resources/bpred_unit.cc
index 9e15a4f..127843e 100644
--- a/src/cpu/inorder/resources/bpred_unit.cc
+++ b/src/cpu/inorder/resources/bpred_unit.cc
@@ -33,9 +33,10 @@
 
 #include "arch/utility.hh"
 #include "base/trace.hh"
-#include "base/traceflags.hh"
 #include "config/the_isa.hh"
 #include "cpu/inorder/resources/bpred_unit.hh"
+#include "debug/InOrderBPred.hh"
+#include "debug/Resource.hh"
 
 using namespace std;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/resources/branch_predictor.cc b/src/cpu/inorder/resources/branch_predictor.cc
index 4b82050..829ae43 100644
--- a/src/cpu/inorder/resources/branch_predictor.cc
+++ b/src/cpu/inorder/resources/branch_predictor.cc
@@ -31,6 +31,8 @@
 
 #include "config/the_isa.hh"
 #include "cpu/inorder/resources/branch_predictor.hh"
+#include "debug/InOrderBPred.hh"
+#include "debug/InOrderStage.hh"
 
 using namespace std;
 using namespace TheISA;
diff --git a/src/cpu/inorder/resources/cache_unit.cc b/src/cpu/inorder/resources/cache_unit.cc
index ce4c538..620ba06 100644
--- a/src/cpu/inorder/resources/cache_unit.cc
+++ b/src/cpu/inorder/resources/cache_unit.cc
@@ -41,6 +41,14 @@
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/pipeline_traits.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/Activity.hh"
+#include "debug/AddrDep.hh"
+#include "debug/InOrderCachePort.hh"
+#include "debug/InOrderStall.hh"
+#include "debug/InOrderTLB.hh"
+#include "debug/LLSC.hh"
+#include "debug/RefCount.hh"
+#include "debug/ThreadModel.hh"
 #include "mem/request.hh"
 
 using namespace std;
diff --git a/src/cpu/inorder/resources/decode_unit.cc b/src/cpu/inorder/resources/decode_unit.cc
index 71d33ab..559beca 100644
--- a/src/cpu/inorder/resources/decode_unit.cc
+++ b/src/cpu/inorder/resources/decode_unit.cc
@@ -31,6 +31,9 @@
 
 #include "config/the_isa.hh"
 #include "cpu/inorder/resources/decode_unit.hh"
+#include "debug/InOrderDecode.hh"
+#include "debug/InOrderStall.hh"
+#include "debug/Resource.hh"
 
 using namespace TheISA;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/resources/execution_unit.cc b/src/cpu/inorder/resources/execution_unit.cc
index 2ec3407..7ed9aed 100644
--- a/src/cpu/inorder/resources/execution_unit.cc
+++ b/src/cpu/inorder/resources/execution_unit.cc
@@ -35,6 +35,8 @@
 #include "cpu/inorder/resources/execution_unit.hh"
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/InOrderExecute.hh"
+#include "debug/InOrderStall.hh"
 
 using namespace std;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/resources/fetch_seq_unit.cc b/src/cpu/inorder/resources/fetch_seq_unit.cc
index 8d9187c..df8c6de 100644
--- a/src/cpu/inorder/resources/fetch_seq_unit.cc
+++ b/src/cpu/inorder/resources/fetch_seq_unit.cc
@@ -32,6 +32,8 @@
 #include "config/the_isa.hh"
 #include "cpu/inorder/resources/fetch_seq_unit.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/InOrderFetchSeq.hh"
+#include "debug/InOrderStall.hh"
 
 using namespace std;
 using namespace TheISA;
diff --git a/src/cpu/inorder/resources/fetch_unit.cc b/src/cpu/inorder/resources/fetch_unit.cc
index 899fa8c..692f78c 100644
--- a/src/cpu/inorder/resources/fetch_unit.cc
+++ b/src/cpu/inorder/resources/fetch_unit.cc
@@ -42,6 +42,11 @@
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/pipeline_traits.hh"
 #include "cpu/inorder/resource_pool.hh"
+#include "debug/Activity.hh"
+#include "debug/InOrderCachePort.hh"
+#include "debug/InOrderStall.hh"
+#include "debug/RefCount.hh"
+#include "debug/ThreadModel.hh"
 #include "mem/request.hh"
 
 using namespace std;
diff --git a/src/cpu/inorder/resources/graduation_unit.cc b/src/cpu/inorder/resources/graduation_unit.cc
index edc2fb3..a753034 100644
--- a/src/cpu/inorder/resources/graduation_unit.cc
+++ b/src/cpu/inorder/resources/graduation_unit.cc
@@ -30,6 +30,7 @@
  */
 
 #include "cpu/inorder/resources/graduation_unit.hh"
+#include "debug/InOrderGraduation.hh"
 
 using namespace ThePipeline;
 
diff --git a/src/cpu/inorder/resources/inst_buffer.cc b/src/cpu/inorder/resources/inst_buffer.cc
index e040587..d64eb79 100644
--- a/src/cpu/inorder/resources/inst_buffer.cc
+++ b/src/cpu/inorder/resources/inst_buffer.cc
@@ -37,6 +37,8 @@
 #include "cpu/inorder/resources/inst_buffer.hh"
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/pipeline_traits.hh"
+#include "debug/InOrderInstBuffer.hh"
+#include "debug/Resource.hh"
 
 using namespace std;
 using namespace TheISA;
diff --git a/src/cpu/inorder/resources/mult_div_unit.cc b/src/cpu/inorder/resources/mult_div_unit.cc
index 8fbfc23..49df901 100644
--- a/src/cpu/inorder/resources/mult_div_unit.cc
+++ b/src/cpu/inorder/resources/mult_div_unit.cc
@@ -36,6 +36,8 @@
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/resource_pool.hh"
 #include "cpu/op_class.hh"
+#include "debug/InOrderMDU.hh"
+#include "debug/Resource.hh"
 
 using namespace std;
 using namespace ThePipeline;
diff --git a/src/cpu/inorder/resources/use_def.cc b/src/cpu/inorder/resources/use_def.cc
index 8a00ab7..beb8d4d 100644
--- a/src/cpu/inorder/resources/use_def.cc
+++ b/src/cpu/inorder/resources/use_def.cc
@@ -37,6 +37,8 @@
 #include "cpu/inorder/resources/use_def.hh"
 #include "cpu/inorder/cpu.hh"
 #include "cpu/inorder/pipeline_traits.hh"
+#include "debug/InOrderStall.hh"
+#include "debug/InOrderUseDef.hh"
 
 using namespace std;
 using namespace TheISA;
diff --git a/src/cpu/inorder/thread_context.cc b/src/cpu/inorder/thread_context.cc
index 636bcee..a217630 100644
--- a/src/cpu/inorder/thread_context.cc
+++ b/src/cpu/inorder/thread_context.cc
@@ -33,6 +33,7 @@
 #include "config/the_isa.hh"
 #include "cpu/inorder/thread_context.hh"
 #include "cpu/exetrace.hh"
+#include "debug/InOrderCPU.hh"
 
 using namespace TheISA;
 
diff --git a/src/cpu/inteltrace.hh b/src/cpu/inteltrace.hh
index 5083318..dbb6300 100644
--- a/src/cpu/inteltrace.hh
+++ b/src/cpu/inteltrace.hh
@@ -35,6 +35,8 @@
 #include "base/trace.hh"
 #include "base/types.hh"
 #include "cpu/static_inst.hh"
+#include "debug/ExecEnable.hh"
+#include "debug/ExecSpeculative.hh"
 #include "params/IntelTrace.hh"
 #include "sim/insttracer.hh"
 
@@ -68,13 +70,13 @@
             const StaticInstPtr staticInst, TheISA::PCState pc,
             const StaticInstPtr macroStaticInst = NULL)
     {
-        if (!IsOn(ExecEnable))
+        if (!Debug::ExecEnable)
             return NULL;
 
         if (!Trace::enabled)
             return NULL;
 
-        if (!IsOn(ExecSpeculative) && tc->misspeculating())
+        if (!Debug::ExecSpeculative && tc->misspeculating())
             return NULL;
 
         return new IntelTraceRecord(when, tc,
diff --git a/src/cpu/intr_control.cc b/src/cpu/intr_control.cc
index 085dbe9..8f38088 100644
--- a/src/cpu/intr_control.cc
+++ b/src/cpu/intr_control.cc
@@ -36,6 +36,7 @@
 #include "cpu/base.hh"
 #include "cpu/intr_control.hh"
 #include "cpu/thread_context.hh"
+#include "debug/IntrControl.hh"
 #include "sim/sim_object.hh"
 
 using namespace std;
diff --git a/src/cpu/nativetrace.cc b/src/cpu/nativetrace.cc
index 9660c0e..1f51322 100644
--- a/src/cpu/nativetrace.cc
+++ b/src/cpu/nativetrace.cc
@@ -31,6 +31,7 @@
 #include "base/socket.hh"
 #include "cpu/nativetrace.hh"
 #include "cpu/static_inst.hh"
+#include "debug/GDBMisc.hh"
 #include "params/NativeTrace.hh"
 
 using namespace std;
diff --git a/src/cpu/o3/bpred_unit_impl.hh b/src/cpu/o3/bpred_unit_impl.hh
index 44e6f42..e0292e2 100644
--- a/src/cpu/o3/bpred_unit_impl.hh
+++ b/src/cpu/o3/bpred_unit_impl.hh
@@ -34,9 +34,9 @@
 #include "arch/types.hh"
 #include "arch/utility.hh"
 #include "base/trace.hh"
-#include "base/traceflags.hh"
 #include "config/the_isa.hh"
 #include "cpu/o3/bpred_unit.hh"
+#include "debug/Fetch.hh"
 #include "params/DerivO3CPU.hh"
 
 template<class Impl>
diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh
index 2512ab1..aa72c07 100644
--- a/src/cpu/o3/commit_impl.hh
+++ b/src/cpu/o3/commit_impl.hh
@@ -54,6 +54,10 @@
 #include "cpu/o3/thread_state.hh"
 #include "cpu/exetrace.hh"
 #include "cpu/timebuf.hh"
+#include "debug/Activity.hh"
+#include "debug/Commit.hh"
+#include "debug/CommitRate.hh"
+#include "debug/ExecFaulting.hh"
 #include "params/DerivO3CPU.hh"
 #include "sim/faults.hh"
 
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index 565c68f..b19e4f4 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -40,6 +40,9 @@
 #include "cpu/activity.hh"
 #include "cpu/simple_thread.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Activity.hh"
+#include "debug/O3CPU.hh"
+#include "debug/Quiesce.hh"
 #include "enums/MemoryMode.hh"
 #include "sim/core.hh"
 #include "sim/stat_control.hh"
@@ -57,6 +60,7 @@
 
 #if THE_ISA == ALPHA_ISA
 #include "arch/alpha/osfpal.hh"
+#include "debug/Activity.hh"
 #endif
 
 class BaseCPUParams;
diff --git a/src/cpu/o3/decode_impl.hh b/src/cpu/o3/decode_impl.hh
index cee5977..010dbfa 100644
--- a/src/cpu/o3/decode_impl.hh
+++ b/src/cpu/o3/decode_impl.hh
@@ -34,6 +34,8 @@
 #include "config/the_isa.hh"
 #include "cpu/o3/decode.hh"
 #include "cpu/inst_seq.hh"
+#include "debug/Activity.hh"
+#include "debug/Decode.hh"
 #include "params/DerivO3CPU.hh"
 
 using namespace std;
diff --git a/src/cpu/o3/fetch_impl.hh b/src/cpu/o3/fetch_impl.hh
index 806cf79..0f7d908 100644
--- a/src/cpu/o3/fetch_impl.hh
+++ b/src/cpu/o3/fetch_impl.hh
@@ -52,6 +52,8 @@
 #include "cpu/checker/cpu.hh"
 #include "cpu/o3/fetch.hh"
 #include "cpu/exetrace.hh"
+#include "debug/Activity.hh"
+#include "debug/Fetch.hh"
 #include "mem/packet.hh"
 #include "mem/request.hh"
 #include "params/DerivO3CPU.hh"
diff --git a/src/cpu/o3/free_list.cc b/src/cpu/o3/free_list.cc
index 88020a0..4224d0e 100644
--- a/src/cpu/o3/free_list.cc
+++ b/src/cpu/o3/free_list.cc
@@ -30,6 +30,7 @@
 
 #include "base/trace.hh"
 #include "cpu/o3/free_list.hh"
+#include "debug/FreeList.hh"
 
 SimpleFreeList::SimpleFreeList(ThreadID activeThreads,
                                unsigned _numLogicalIntRegs,
diff --git a/src/cpu/o3/free_list.hh b/src/cpu/o3/free_list.hh
index 96289f6..fec0760 100644
--- a/src/cpu/o3/free_list.hh
+++ b/src/cpu/o3/free_list.hh
@@ -37,9 +37,9 @@
 #include "arch/registers.hh"
 #include "base/misc.hh"
 #include "base/trace.hh"
-#include "base/traceflags.hh"
 #include "config/the_isa.hh"
 #include "cpu/o3/comm.hh"
+#include "debug/FreeList.hh"
 
 /**
  * FreeList class that simply holds the list of free integer and floating
diff --git a/src/cpu/o3/iew.hh b/src/cpu/o3/iew.hh
index 75f6df7..8ebbfb2 100644
--- a/src/cpu/o3/iew.hh
+++ b/src/cpu/o3/iew.hh
@@ -52,6 +52,7 @@
 #include "cpu/o3/lsq.hh"
 #include "cpu/o3/scoreboard.hh"
 #include "cpu/timebuf.hh"
+#include "debug/IEW.hh"
 
 class DerivO3CPUParams;
 class FUPool;
diff --git a/src/cpu/o3/iew_impl.hh b/src/cpu/o3/iew_impl.hh
index e76a6bc..2569dbb 100644
--- a/src/cpu/o3/iew_impl.hh
+++ b/src/cpu/o3/iew_impl.hh
@@ -51,6 +51,9 @@
 #include "cpu/o3/fu_pool.hh"
 #include "cpu/o3/iew.hh"
 #include "cpu/timebuf.hh"
+#include "debug/Activity.hh"
+#include "debug/Decode.hh"
+#include "debug/IEW.hh"
 #include "params/DerivO3CPU.hh"
 
 using namespace std;
diff --git a/src/cpu/o3/inst_queue_impl.hh b/src/cpu/o3/inst_queue_impl.hh
index 1a211af..bac9e2e 100644
--- a/src/cpu/o3/inst_queue_impl.hh
+++ b/src/cpu/o3/inst_queue_impl.hh
@@ -46,6 +46,7 @@
 
 #include "cpu/o3/fu_pool.hh"
 #include "cpu/o3/inst_queue.hh"
+#include "debug/IQ.hh"
 #include "enums/OpClass.hh"
 #include "params/DerivO3CPU.hh"
 #include "sim/core.hh"
diff --git a/src/cpu/o3/lsq_impl.hh b/src/cpu/o3/lsq_impl.hh
index ddfc637..8dd2405 100644
--- a/src/cpu/o3/lsq_impl.hh
+++ b/src/cpu/o3/lsq_impl.hh
@@ -33,6 +33,9 @@
 #include <string>
 
 #include "cpu/o3/lsq.hh"
+#include "debug/Fetch.hh"
+#include "debug/LSQ.hh"
+#include "debug/Writeback.hh"
 #include "params/DerivO3CPU.hh"
 
 using namespace std;
diff --git a/src/cpu/o3/lsq_unit.hh b/src/cpu/o3/lsq_unit.hh
index 2d9a6ce..be9c91a 100644
--- a/src/cpu/o3/lsq_unit.hh
+++ b/src/cpu/o3/lsq_unit.hh
@@ -45,6 +45,7 @@
 #include "config/the_isa.hh"
 #include "cpu/inst_seq.hh"
 #include "cpu/timebuf.hh"
+#include "debug/LSQUnit.hh"
 #include "mem/packet.hh"
 #include "mem/port.hh"
 
diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh
index 6a366d0..aa86c3d 100644
--- a/src/cpu/o3/lsq_unit_impl.hh
+++ b/src/cpu/o3/lsq_unit_impl.hh
@@ -47,6 +47,9 @@
 #include "config/use_checker.hh"
 #include "cpu/o3/lsq.hh"
 #include "cpu/o3/lsq_unit.hh"
+#include "debug/Activity.hh"
+#include "debug/IEW.hh"
+#include "debug/LSQUnit.hh"
 #include "mem/packet.hh"
 #include "mem/request.hh"
 
diff --git a/src/cpu/o3/mem_dep_unit.hh b/src/cpu/o3/mem_dep_unit.hh
index a9560f4..5d6f0a1 100644
--- a/src/cpu/o3/mem_dep_unit.hh
+++ b/src/cpu/o3/mem_dep_unit.hh
@@ -38,6 +38,7 @@
 #include "base/refcnt.hh"
 #include "base/statistics.hh"
 #include "cpu/inst_seq.hh"
+#include "debug/MemDepUnit.hh"
 
 struct SNHash {
     size_t operator() (const InstSeqNum &seq_num) const {
diff --git a/src/cpu/o3/mem_dep_unit_impl.hh b/src/cpu/o3/mem_dep_unit_impl.hh
index fdea84e..6f3c922 100644
--- a/src/cpu/o3/mem_dep_unit_impl.hh
+++ b/src/cpu/o3/mem_dep_unit_impl.hh
@@ -32,6 +32,7 @@
 
 #include "cpu/o3/inst_queue.hh"
 #include "cpu/o3/mem_dep_unit.hh"
+#include "debug/MemDepUnit.hh"
 #include "params/DerivO3CPU.hh"
 
 template <class MemDepPred, class Impl>
diff --git a/src/cpu/o3/regfile.hh b/src/cpu/o3/regfile.hh
index e252fa3..d04f45c 100644
--- a/src/cpu/o3/regfile.hh
+++ b/src/cpu/o3/regfile.hh
@@ -40,6 +40,7 @@
 #include "config/full_system.hh"
 #include "config/the_isa.hh"
 #include "cpu/o3/comm.hh"
+#include "debug/IEW.hh"
 
 #if FULL_SYSTEM
 #include "arch/kernel_stats.hh"
diff --git a/src/cpu/o3/rename_impl.hh b/src/cpu/o3/rename_impl.hh
index 1f34b72..7d20cac 100644
--- a/src/cpu/o3/rename_impl.hh
+++ b/src/cpu/o3/rename_impl.hh
@@ -48,6 +48,8 @@
 #include "config/full_system.hh"
 #include "config/the_isa.hh"
 #include "cpu/o3/rename.hh"
+#include "debug/Activity.hh"
+#include "debug/Rename.hh"
 #include "params/DerivO3CPU.hh"
 
 using namespace std;
diff --git a/src/cpu/o3/rename_map.cc b/src/cpu/o3/rename_map.cc
index e6649ce..cc5044c 100644
--- a/src/cpu/o3/rename_map.cc
+++ b/src/cpu/o3/rename_map.cc
@@ -31,6 +31,7 @@
 #include <vector>
 
 #include "cpu/o3/rename_map.hh"
+#include "debug/Rename.hh"
 
 using namespace std;
 
diff --git a/src/cpu/o3/rob_impl.hh b/src/cpu/o3/rob_impl.hh
index d9d1dad..dcde54a 100644
--- a/src/cpu/o3/rob_impl.hh
+++ b/src/cpu/o3/rob_impl.hh
@@ -33,6 +33,8 @@
 
 #include "config/full_system.hh"
 #include "cpu/o3/rob.hh"
+#include "debug/Fetch.hh"
+#include "debug/ROB.hh"
 
 using namespace std;
 
diff --git a/src/cpu/o3/scoreboard.cc b/src/cpu/o3/scoreboard.cc
index 7fb47f3..83a88f2 100644
--- a/src/cpu/o3/scoreboard.cc
+++ b/src/cpu/o3/scoreboard.cc
@@ -31,6 +31,7 @@
 
 #include "config/the_isa.hh"
 #include "cpu/o3/scoreboard.hh"
+#include "debug/Scoreboard.hh"
 
 Scoreboard::Scoreboard(unsigned activeThreads,
                        unsigned _numLogicalIntRegs,
diff --git a/src/cpu/o3/scoreboard.hh b/src/cpu/o3/scoreboard.hh
index 4789e21..8a49d7a 100644
--- a/src/cpu/o3/scoreboard.hh
+++ b/src/cpu/o3/scoreboard.hh
@@ -37,7 +37,6 @@
 #include <vector>
 
 #include "base/trace.hh"
-#include "base/traceflags.hh"
 #include "cpu/o3/comm.hh"
 
 /**
diff --git a/src/cpu/o3/store_set.cc b/src/cpu/o3/store_set.cc
index df4ee00..fc87c41 100644
--- a/src/cpu/o3/store_set.cc
+++ b/src/cpu/o3/store_set.cc
@@ -32,6 +32,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "cpu/o3/store_set.hh"
+#include "debug/StoreSet.hh"
 
 StoreSet::StoreSet(int _SSIT_size, int _LFST_size)
     : SSITSize(_SSIT_size), LFSTSize(_LFST_size)
diff --git a/src/cpu/o3/thread_context_impl.hh b/src/cpu/o3/thread_context_impl.hh
index b179ad5..c3b7d22 100755
--- a/src/cpu/o3/thread_context_impl.hh
+++ b/src/cpu/o3/thread_context_impl.hh
@@ -45,6 +45,7 @@
 #include "config/the_isa.hh"
 #include "cpu/o3/thread_context.hh"
 #include "cpu/quiesce_event.hh"
+#include "debug/O3CPU.hh"
 
 #if FULL_SYSTEM
 template <class Impl>
diff --git a/src/cpu/pc_event.cc b/src/cpu/pc_event.cc
index 0ac5102..f9955d0 100644
--- a/src/cpu/pc_event.cc
+++ b/src/cpu/pc_event.cc
@@ -40,6 +40,7 @@
 #include "cpu/base.hh"
 #include "cpu/pc_event.hh"
 #include "cpu/thread_context.hh"
+#include "debug/PCEvent.hh"
 #include "sim/core.hh"
 #include "sim/system.hh"
 
diff --git a/src/cpu/pred/2bit_local.cc b/src/cpu/pred/2bit_local.cc
index a70d652..dc8cf50 100644
--- a/src/cpu/pred/2bit_local.cc
+++ b/src/cpu/pred/2bit_local.cc
@@ -32,6 +32,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "cpu/pred/2bit_local.hh"
+#include "debug/Fetch.hh"
 
 LocalBP::LocalBP(unsigned _localPredictorSize,
                  unsigned _localCtrBits,
diff --git a/src/cpu/pred/btb.cc b/src/cpu/pred/btb.cc
index e87cc6d..393e52c 100644
--- a/src/cpu/pred/btb.cc
+++ b/src/cpu/pred/btb.cc
@@ -31,6 +31,7 @@
 #include "base/intmath.hh"
 #include "base/trace.hh"
 #include "cpu/pred/btb.hh"
+#include "debug/Fetch.hh"
 
 DefaultBTB::DefaultBTB(unsigned _numEntries,
                        unsigned _tagBits,
diff --git a/src/cpu/quiesce_event.cc b/src/cpu/quiesce_event.cc
index 7906898..d5c3fe2 100644
--- a/src/cpu/quiesce_event.cc
+++ b/src/cpu/quiesce_event.cc
@@ -31,6 +31,7 @@
 #include "cpu/base.hh"
 #include "cpu/quiesce_event.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Quiesce.hh"
 
 EndQuiesceEvent::EndQuiesceEvent(ThreadContext *_tc)
     : tc(_tc)
diff --git a/src/cpu/simple/atomic.cc b/src/cpu/simple/atomic.cc
index c5730e1..f3d79dd 100644
--- a/src/cpu/simple/atomic.cc
+++ b/src/cpu/simple/atomic.cc
@@ -35,6 +35,8 @@
 #include "config/the_isa.hh"
 #include "cpu/simple/atomic.hh"
 #include "cpu/exetrace.hh"
+#include "debug/ExecFaulting.hh"
+#include "debug/SimpleCPU.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 #include "params/AtomicSimpleCPU.hh"
diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc
index 4645203..699e787 100644
--- a/src/cpu/simple/base.cc
+++ b/src/cpu/simple/base.cc
@@ -60,6 +60,9 @@
 #include "cpu/smt.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Decode.hh"
+#include "debug/Fetch.hh"
+#include "debug/Quiesce.hh"
 #include "mem/packet.hh"
 #include "mem/request.hh"
 #include "params/BaseSimpleCPU.hh"
diff --git a/src/cpu/simple/timing.cc b/src/cpu/simple/timing.cc
index 52d4b06..c992cb0 100644
--- a/src/cpu/simple/timing.cc
+++ b/src/cpu/simple/timing.cc
@@ -47,6 +47,9 @@
 #include "config/the_isa.hh"
 #include "cpu/simple/timing.hh"
 #include "cpu/exetrace.hh"
+#include "debug/Config.hh"
+#include "debug/ExecFaulting.hh"
+#include "debug/SimpleCPU.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
 #include "params/TimingSimpleCPU.hh"
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 5420519..dcf0663 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -42,6 +42,8 @@
 #include "config/the_isa.hh"
 #include "cpu/thread_context.hh"
 #include "cpu/thread_state.hh"
+#include "debug/FloatRegs.hh"
+#include "debug/IntRegs.hh"
 #include "mem/request.hh"
 #include "sim/byteswap.hh"
 #include "sim/eventq.hh"
diff --git a/src/cpu/testers/directedtest/InvalidateGenerator.cc b/src/cpu/testers/directedtest/InvalidateGenerator.cc
index 3b5aa55..902c6cc 100644
--- a/src/cpu/testers/directedtest/InvalidateGenerator.cc
+++ b/src/cpu/testers/directedtest/InvalidateGenerator.cc
@@ -30,6 +30,7 @@
 #include "cpu/testers/directedtest/DirectedGenerator.hh"
 #include "cpu/testers/directedtest/InvalidateGenerator.hh"
 #include "cpu/testers/directedtest/RubyDirectedTester.hh"
+#include "debug/DirectedTest.hh"
 
 InvalidateGenerator::InvalidateGenerator(const Params *p)
     : DirectedGenerator(p)
diff --git a/src/cpu/testers/directedtest/RubyDirectedTester.cc b/src/cpu/testers/directedtest/RubyDirectedTester.cc
index cc7c84d..b85cf78 100644
--- a/src/cpu/testers/directedtest/RubyDirectedTester.cc
+++ b/src/cpu/testers/directedtest/RubyDirectedTester.cc
@@ -29,6 +29,7 @@
 
 #include "cpu/testers/directedtest/DirectedGenerator.hh"
 #include "cpu/testers/directedtest/RubyDirectedTester.hh"
+#include "debug/DirectedTest.hh"
 #include "mem/ruby/eventqueue/RubyEventQueue.hh"
 #include "sim/sim_exit.hh"
 
diff --git a/src/cpu/testers/directedtest/SeriesRequestGenerator.cc b/src/cpu/testers/directedtest/SeriesRequestGenerator.cc
index 5b6395f..43e1401 100644
--- a/src/cpu/testers/directedtest/SeriesRequestGenerator.cc
+++ b/src/cpu/testers/directedtest/SeriesRequestGenerator.cc
@@ -30,6 +30,7 @@
 #include "cpu/testers/directedtest/DirectedGenerator.hh"
 #include "cpu/testers/directedtest/RubyDirectedTester.hh"
 #include "cpu/testers/directedtest/SeriesRequestGenerator.hh"
+#include "debug/DirectedTest.hh"
 
 SeriesRequestGenerator::SeriesRequestGenerator(const Params *p)
     : DirectedGenerator(p)
diff --git a/src/cpu/testers/memtest/memtest.cc b/src/cpu/testers/memtest/memtest.cc
index 758a25e..d75bcb8 100644
--- a/src/cpu/testers/memtest/memtest.cc
+++ b/src/cpu/testers/memtest/memtest.cc
@@ -39,6 +39,7 @@
 #include "base/misc.hh"
 #include "base/statistics.hh"
 #include "cpu/testers/memtest/memtest.hh"
+#include "debug/MemTest.hh"
 #include "mem/mem_object.hh"
 #include "mem/packet.hh"
 #include "mem/port.hh"
diff --git a/src/cpu/testers/networktest/networktest.cc b/src/cpu/testers/networktest/networktest.cc
index 1c15557..dcc4767 100644
--- a/src/cpu/testers/networktest/networktest.cc
+++ b/src/cpu/testers/networktest/networktest.cc
@@ -37,6 +37,7 @@
 #include "base/misc.hh"
 #include "base/statistics.hh"
 #include "cpu/testers/networktest/networktest.hh"
+#include "debug/NetworkTest.hh"
 #include "mem/mem_object.hh"
 #include "mem/packet.hh"
 #include "mem/port.hh"
diff --git a/src/cpu/testers/rubytest/Check.cc b/src/cpu/testers/rubytest/Check.cc
index c0007cd..164fb56 100644
--- a/src/cpu/testers/rubytest/Check.cc
+++ b/src/cpu/testers/rubytest/Check.cc
@@ -28,6 +28,7 @@
  */
 
 #include "cpu/testers/rubytest/Check.hh"
+#include "debug/RubyTest.hh"
 #include "mem/ruby/common/SubBlock.hh"
 #include "mem/ruby/system/Sequencer.hh"
 #include "mem/ruby/system/System.hh"
diff --git a/src/cpu/testers/rubytest/CheckTable.cc b/src/cpu/testers/rubytest/CheckTable.cc
index c2aa68a..f3335b4 100644
--- a/src/cpu/testers/rubytest/CheckTable.cc
+++ b/src/cpu/testers/rubytest/CheckTable.cc
@@ -30,6 +30,7 @@
 #include "base/intmath.hh"
 #include "cpu/testers/rubytest/Check.hh"
 #include "cpu/testers/rubytest/CheckTable.hh"
+#include "debug/RubyTest.hh"
 
 CheckTable::CheckTable(int _num_cpu_sequencers, RubyTester* _tester)
     : m_num_cpu_sequencers(_num_cpu_sequencers), m_tester_ptr(_tester)
diff --git a/src/cpu/testers/rubytest/RubyTester.cc b/src/cpu/testers/rubytest/RubyTester.cc
index 024cb74..5040d9f 100644
--- a/src/cpu/testers/rubytest/RubyTester.cc
+++ b/src/cpu/testers/rubytest/RubyTester.cc
@@ -30,6 +30,7 @@
 #include "base/misc.hh"
 #include "cpu/testers/rubytest/Check.hh"
 #include "cpu/testers/rubytest/RubyTester.hh"
+#include "debug/RubyTest.hh"
 #include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/SubBlock.hh"
 #include "mem/ruby/eventqueue/RubyEventQueue.hh"
diff --git a/src/cpu/thread_context.cc b/src/cpu/thread_context.cc
index c4960ea..334bdf4 100644
--- a/src/cpu/thread_context.cc
+++ b/src/cpu/thread_context.cc
@@ -32,6 +32,7 @@
 #include "base/trace.hh"
 #include "config/the_isa.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Context.hh"
 
 void
 ThreadContext::compare(ThreadContext *one, ThreadContext *two)
diff --git a/src/dev/alpha/backdoor.cc b/src/dev/alpha/backdoor.cc
index 960832f..31ab628 100644
--- a/src/dev/alpha/backdoor.cc
+++ b/src/dev/alpha/backdoor.cc
@@ -44,6 +44,7 @@
 #include "base/trace.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/AlphaBackdoor.hh"
 #include "dev/alpha/backdoor.hh"
 #include "dev/platform.hh"
 #include "dev/simple_disk.hh"
diff --git a/src/dev/alpha/tsunami_cchip.cc b/src/dev/alpha/tsunami_cchip.cc
index fd76fd9..74f769c 100644
--- a/src/dev/alpha/tsunami_cchip.cc
+++ b/src/dev/alpha/tsunami_cchip.cc
@@ -42,6 +42,8 @@
 #include "config/the_isa.hh"
 #include "cpu/intr_control.hh"
 #include "cpu/thread_context.hh"
+#include "debug/IPI.hh"
+#include "debug/Tsunami.hh"
 #include "dev/alpha/tsunami.hh"
 #include "dev/alpha/tsunami_cchip.hh"
 #include "dev/alpha/tsunamireg.h"
diff --git a/src/dev/alpha/tsunami_io.cc b/src/dev/alpha/tsunami_io.cc
index 37456ad..0c1937a 100644
--- a/src/dev/alpha/tsunami_io.cc
+++ b/src/dev/alpha/tsunami_io.cc
@@ -43,6 +43,7 @@
 #include "base/time.hh"
 #include "base/trace.hh"
 #include "config/the_isa.hh"
+#include "debug/Tsunami.hh"
 #include "dev/alpha/tsunami.hh"
 #include "dev/alpha/tsunami_cchip.hh"
 #include "dev/alpha/tsunami_io.hh"
diff --git a/src/dev/alpha/tsunami_pchip.cc b/src/dev/alpha/tsunami_pchip.cc
index e293f63..f8c9104 100644
--- a/src/dev/alpha/tsunami_pchip.cc
+++ b/src/dev/alpha/tsunami_pchip.cc
@@ -39,6 +39,7 @@
 
 #include "base/trace.hh"
 #include "config/the_isa.hh"
+#include "debug/Tsunami.hh"
 #include "dev/alpha/tsunami.hh"
 #include "dev/alpha/tsunami_pchip.hh"
 #include "dev/alpha/tsunamireg.h"
diff --git a/src/dev/copy_engine.cc b/src/dev/copy_engine.cc
index feb0342..361d4db 100644
--- a/src/dev/copy_engine.cc
+++ b/src/dev/copy_engine.cc
@@ -36,6 +36,7 @@
 
 #include "base/cp_annotate.hh"
 #include "base/trace.hh"
+#include "debug/DMACopyEngine.hh"
 #include "dev/copy_engine.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/disk_image.cc b/src/dev/disk_image.cc
index 6a06e74..4c770fb 100644
--- a/src/dev/disk_image.cc
+++ b/src/dev/disk_image.cc
@@ -44,6 +44,8 @@
 #include "base/callback.hh"
 #include "base/misc.hh"
 #include "base/trace.hh"
+#include "debug/DiskImageRead.hh"
+#include "debug/DiskImageWrite.hh"
 #include "dev/disk_image.hh"
 #include "sim/byteswap.hh"
 #include "sim/sim_exit.hh"
diff --git a/src/dev/etherbus.cc b/src/dev/etherbus.cc
index b072e16..c9e9c93 100644
--- a/src/dev/etherbus.cc
+++ b/src/dev/etherbus.cc
@@ -38,6 +38,8 @@
 #include <vector>
 
 #include "base/trace.hh"
+#include "debug/Ethernet.hh"
+#include "debug/EthernetData.hh"
 #include "dev/etherbus.hh"
 #include "dev/etherdump.hh"
 #include "dev/etherint.hh"
diff --git a/src/dev/etherlink.cc b/src/dev/etherlink.cc
index dcecfd9..289b745 100644
--- a/src/dev/etherlink.cc
+++ b/src/dev/etherlink.cc
@@ -40,6 +40,8 @@
 
 #include "base/random.hh"
 #include "base/trace.hh"
+#include "debug/Ethernet.hh"
+#include "debug/EthernetData.hh"
 #include "dev/etherdump.hh"
 #include "dev/etherint.hh"
 #include "dev/etherlink.hh"
diff --git a/src/dev/ethertap.cc b/src/dev/ethertap.cc
index 401ea8a..2a85aa5 100644
--- a/src/dev/ethertap.cc
+++ b/src/dev/ethertap.cc
@@ -45,6 +45,8 @@
 #include "base/pollevent.hh"
 #include "base/socket.hh"
 #include "base/trace.hh"
+#include "debug/Ethernet.hh"
+#include "debug/EthernetData.hh"
 #include "dev/etherdump.hh"
 #include "dev/etherint.hh"
 #include "dev/etherpkt.hh"
diff --git a/src/dev/i8254xGBe.cc b/src/dev/i8254xGBe.cc
index 78a8978..db03f57 100644
--- a/src/dev/i8254xGBe.cc
+++ b/src/dev/i8254xGBe.cc
@@ -44,6 +44,7 @@
 
 #include "base/inet.hh"
 #include "base/trace.hh"
+#include "debug/EthernetAll.hh"
 #include "dev/i8254xGBe.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/i8254xGBe.hh b/src/dev/i8254xGBe.hh
index 738b1cf..1e50be1 100644
--- a/src/dev/i8254xGBe.hh
+++ b/src/dev/i8254xGBe.hh
@@ -40,6 +40,8 @@
 
 #include "base/cp_annotate.hh"
 #include "base/inet.hh"
+#include "debug/EthernetDesc.hh"
+#include "debug/EthernetIntr.hh"
 #include "dev/etherdevice.hh"
 #include "dev/etherint.hh"
 #include "dev/etherpkt.hh"
diff --git a/src/dev/ide_ctrl.cc b/src/dev/ide_ctrl.cc
index 8e9b673..a370c7f 100644
--- a/src/dev/ide_ctrl.cc
+++ b/src/dev/ide_ctrl.cc
@@ -34,6 +34,7 @@
 
 #include "base/trace.hh"
 #include "cpu/intr_control.hh"
+#include "debug/IdeCtrl.hh"
 #include "dev/ide_ctrl.hh"
 #include "dev/ide_disk.hh"
 #include "mem/packet.hh"
diff --git a/src/dev/ide_disk.cc b/src/dev/ide_disk.cc
index c6c020e..a67318b 100644
--- a/src/dev/ide_disk.cc
+++ b/src/dev/ide_disk.cc
@@ -43,6 +43,7 @@
 #include "base/cprintf.hh" // csprintf
 #include "base/trace.hh"
 #include "config/the_isa.hh"
+#include "debug/IdeDisk.hh"
 #include "dev/disk_image.hh"
 #include "dev/ide_ctrl.hh"
 #include "dev/ide_disk.hh"
diff --git a/src/dev/intel_8254_timer.cc b/src/dev/intel_8254_timer.cc
index cad59bb..4aa3fec 100644
--- a/src/dev/intel_8254_timer.cc
+++ b/src/dev/intel_8254_timer.cc
@@ -31,6 +31,7 @@
  */
 
 #include "base/misc.hh"
+#include "debug/Intel8254Timer.hh"
 #include "dev/intel_8254_timer.hh"
 
 using namespace std;
diff --git a/src/dev/intel_8254_timer.hh b/src/dev/intel_8254_timer.hh
index bdfdf36..72b9b9c 100644
--- a/src/dev/intel_8254_timer.hh
+++ b/src/dev/intel_8254_timer.hh
@@ -38,6 +38,7 @@
 
 #include "base/bitunion.hh"
 #include "base/types.hh"
+#include "debug/Intel8254Timer.hh"
 #include "sim/eventq.hh"
 #include "sim/serialize.hh"
 
diff --git a/src/dev/io_device.cc b/src/dev/io_device.cc
index b9c47ad..bfdf3d4 100644
--- a/src/dev/io_device.cc
+++ b/src/dev/io_device.cc
@@ -31,6 +31,8 @@
 
 #include "base/chunk_generator.hh"
 #include "base/trace.hh"
+#include "debug/BusAddrRanges.hh"
+#include "debug/DMA.hh"
 #include "dev/io_device.hh"
 #include "sim/system.hh"
 
diff --git a/src/dev/isa_fake.cc b/src/dev/isa_fake.cc
index af3ca3b..21b723b 100644
--- a/src/dev/isa_fake.cc
+++ b/src/dev/isa_fake.cc
@@ -33,6 +33,7 @@
  */
 
 #include "base/trace.hh"
+#include "debug/IsaFake.hh"
 #include "dev/isa_fake.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/mc146818.cc b/src/dev/mc146818.cc
index c29bb94..9397a59 100644
--- a/src/dev/mc146818.cc
+++ b/src/dev/mc146818.cc
@@ -38,6 +38,7 @@
 #include "base/bitfield.hh"
 #include "base/time.hh"
 #include "base/trace.hh"
+#include "debug/MC146818.hh"
 #include "dev/mc146818.hh"
 #include "dev/rtcreg.h"
 
diff --git a/src/dev/ns_gige.cc b/src/dev/ns_gige.cc
index f1b95e1..a7bc6d0 100644
--- a/src/dev/ns_gige.cc
+++ b/src/dev/ns_gige.cc
@@ -41,6 +41,7 @@
 #include "base/types.hh"
 #include "config/the_isa.hh"
 #include "cpu/thread_context.hh"
+#include "debug/EthernetAll.hh"
 #include "dev/etherlink.hh"
 #include "dev/ns_gige.hh"
 #include "dev/pciconfigall.hh"
diff --git a/src/dev/pciconfigall.cc b/src/dev/pciconfigall.cc
index 74396be..55b4398 100644
--- a/src/dev/pciconfigall.cc
+++ b/src/dev/pciconfigall.cc
@@ -34,6 +34,7 @@
  */
 
 #include "base/trace.hh"
+#include "debug/PciConfigAll.hh"
 #include "dev/pciconfigall.hh"
 #include "dev/pcireg.h"
 #include "dev/platform.hh"
diff --git a/src/dev/pcidev.cc b/src/dev/pcidev.cc
index db68a37..a22612d 100644
--- a/src/dev/pcidev.cc
+++ b/src/dev/pcidev.cc
@@ -43,6 +43,7 @@
 #include "base/misc.hh"
 #include "base/str.hh"
 #include "base/trace.hh"
+#include "debug/PCIDEV.hh"
 #include "dev/alpha/tsunamireg.h"
 #include "dev/pciconfigall.hh"
 #include "dev/pcidev.hh"
diff --git a/src/dev/simple_disk.cc b/src/dev/simple_disk.cc
index eb603c6..4bf24b1 100644
--- a/src/dev/simple_disk.cc
+++ b/src/dev/simple_disk.cc
@@ -42,6 +42,8 @@
 
 #include "base/misc.hh"
 #include "base/trace.hh"
+#include "debug/SimpleDisk.hh"
+#include "debug/SimpleDiskData.hh"
 #include "dev/disk_image.hh"
 #include "dev/simple_disk.hh"
 #include "mem/port.hh"
diff --git a/src/dev/sinic.cc b/src/dev/sinic.cc
index 9141b62..1c7e169 100644
--- a/src/dev/sinic.cc
+++ b/src/dev/sinic.cc
@@ -39,6 +39,7 @@
 #include "config/the_isa.hh"
 #include "cpu/intr_control.hh"
 #include "cpu/thread_context.hh"
+#include "debug/EthernetAll.hh"
 #include "dev/etherlink.hh"
 #include "dev/sinic.hh"
 #include "mem/packet.hh"
diff --git a/src/dev/sparc/iob.cc b/src/dev/sparc/iob.cc
index 9bf8eca..748a08c 100644
--- a/src/dev/sparc/iob.cc
+++ b/src/dev/sparc/iob.cc
@@ -42,6 +42,7 @@
 #include "base/bitfield.hh"
 #include "base/trace.hh"
 #include "cpu/intr_control.hh"
+#include "debug/Iob.hh"
 #include "dev/sparc/iob.hh"
 #include "dev/platform.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/sparc/mm_disk.cc b/src/dev/sparc/mm_disk.cc
index f9a91ed..b869053 100644
--- a/src/dev/sparc/mm_disk.cc
+++ b/src/dev/sparc/mm_disk.cc
@@ -36,6 +36,7 @@
 #include <cstring>
 
 #include "base/trace.hh"
+#include "debug/IdeDisk.hh"
 #include "dev/sparc/mm_disk.hh"
 #include "dev/platform.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/terminal.cc b/src/dev/terminal.cc
index 6370610..bae4c91 100644
--- a/src/dev/terminal.cc
+++ b/src/dev/terminal.cc
@@ -50,6 +50,8 @@
 #include "base/output.hh"
 #include "base/socket.hh"
 #include "base/trace.hh"
+#include "debug/Terminal.hh"
+#include "debug/TerminalVerbose.hh"
 #include "dev/platform.hh"
 #include "dev/terminal.hh"
 #include "dev/uart.hh"
diff --git a/src/dev/uart8250.cc b/src/dev/uart8250.cc
index f33a428..877e9fb 100644
--- a/src/dev/uart8250.cc
+++ b/src/dev/uart8250.cc
@@ -39,6 +39,7 @@
 #include "base/str.hh"        // for to_number
 #include "base/trace.hh"
 #include "config/the_isa.hh"
+#include "debug/Uart.hh"
 #include "dev/platform.hh"
 #include "dev/terminal.hh"
 #include "dev/uart8250.hh"
diff --git a/src/dev/x86/cmos.cc b/src/dev/x86/cmos.cc
index aa92521..d7107de 100644
--- a/src/dev/x86/cmos.cc
+++ b/src/dev/x86/cmos.cc
@@ -28,6 +28,7 @@
  * Authors: Gabe Black
  */
 
+#include "debug/CMOS.hh"
 #include "dev/x86/cmos.hh"
 #include "dev/x86/intdev.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/x86/i8042.cc b/src/dev/x86/i8042.cc
index fb14126..a0786c9 100644
--- a/src/dev/x86/i8042.cc
+++ b/src/dev/x86/i8042.cc
@@ -29,6 +29,7 @@
  */
 
 #include "base/bitunion.hh"
+#include "debug/I8042.hh"
 #include "dev/x86/i8042.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
diff --git a/src/dev/x86/i82094aa.cc b/src/dev/x86/i82094aa.cc
index 90c6a09..584090a 100644
--- a/src/dev/x86/i82094aa.cc
+++ b/src/dev/x86/i82094aa.cc
@@ -30,6 +30,7 @@
 
 #include "arch/x86/interrupts.hh"
 #include "arch/x86/intmessage.hh"
+#include "debug/I82094AA.hh"
 #include "dev/x86/i82094aa.hh"
 #include "dev/x86/i8259.hh"
 #include "mem/packet.hh"
diff --git a/src/dev/x86/i8254.cc b/src/dev/x86/i8254.cc
index dd1ff7c..f6af34a 100644
--- a/src/dev/x86/i8254.cc
+++ b/src/dev/x86/i8254.cc
@@ -28,6 +28,7 @@
  * Authors: Gabe Black
  */
 
+#include "debug/I8254.hh"
 #include "dev/x86/i8254.hh"
 #include "dev/x86/intdev.hh"
 #include "mem/packet.hh"
diff --git a/src/dev/x86/i8259.cc b/src/dev/x86/i8259.cc
index 651196b..4e8c101 100644
--- a/src/dev/x86/i8259.cc
+++ b/src/dev/x86/i8259.cc
@@ -29,6 +29,7 @@
  */
 
 #include "base/bitfield.hh"
+#include "debug/I8259.hh"
 #include "dev/x86/i82094aa.hh"
 #include "dev/x86/i8259.hh"
 #include "mem/packet.hh"
diff --git a/src/dev/x86/speaker.cc b/src/dev/x86/speaker.cc
index b0f4dcd..70f52dd 100644
--- a/src/dev/x86/speaker.cc
+++ b/src/dev/x86/speaker.cc
@@ -30,6 +30,7 @@
 
 #include "base/bitunion.hh"
 #include "base/trace.hh"
+#include "debug/PcSpeaker.hh"
 #include "dev/x86/i8254.hh"
 #include "dev/x86/speaker.hh"
 #include "mem/packet.hh"
diff --git a/src/kern/linux/events.cc b/src/kern/linux/events.cc
index 2133172..c8b53d8 100644
--- a/src/kern/linux/events.cc
+++ b/src/kern/linux/events.cc
@@ -46,6 +46,7 @@
 #include "arch/utility.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "debug/DebugPrintf.hh"
 #include "kern/linux/events.hh"
 #include "kern/linux/printk.hh"
 #include "kern/system_events.hh"
diff --git a/src/kern/linux/linux.cc b/src/kern/linux/linux.cc
index 72f1832..62c25e2 100644
--- a/src/kern/linux/linux.cc
+++ b/src/kern/linux/linux.cc
@@ -32,6 +32,7 @@
 #include <string>
 
 #include "cpu/thread_context.hh"
+#include "debug/SyscallVerbose.hh"
 #include "kern/linux/linux.hh"
 #include "sim/process.hh"
 #include "sim/system.hh"
diff --git a/src/kern/system_events.cc b/src/kern/system_events.cc
index 612aabc..3ee7a09 100644
--- a/src/kern/system_events.cc
+++ b/src/kern/system_events.cc
@@ -34,6 +34,7 @@
 #include "base/trace.hh"
 #include "config/the_isa.hh"
 #include "cpu/thread_context.hh"
+#include "debug/PCEvent.hh"
 #include "kern/system_events.hh"
 
 using namespace TheISA;
diff --git a/src/kern/tru64/tru64.hh b/src/kern/tru64/tru64.hh
index 7e7fedb..09cbb16 100644
--- a/src/kern/tru64/tru64.hh
+++ b/src/kern/tru64/tru64.hh
@@ -61,6 +61,7 @@
 #include "arch/alpha/registers.hh"
 #include "config/the_isa.hh"
 #include "cpu/base.hh"
+#include "debug/SyscallVerbose.hh"
 #include "sim/core.hh"
 #include "sim/syscall_emul.hh"
 
diff --git a/src/kern/tru64/tru64_events.cc b/src/kern/tru64/tru64_events.cc
index 7b8cf0d..216f81b 100644
--- a/src/kern/tru64/tru64_events.cc
+++ b/src/kern/tru64/tru64_events.cc
@@ -34,6 +34,9 @@
 #include "config/the_isa.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/BADADDR.hh"
+#include "debug/DebugPrintf.hh"
+#include "debug/Printf.hh"
 #include "kern/tru64/dump_mbuf.hh"
 #include "kern/tru64/printf.hh"
 #include "kern/tru64/tru64_events.hh"
diff --git a/src/mem/bridge.cc b/src/mem/bridge.cc
index 4b83250..9e5e640 100644
--- a/src/mem/bridge.cc
+++ b/src/mem/bridge.cc
@@ -39,6 +39,7 @@
 
 #include "base/range_ops.hh"
 #include "base/trace.hh"
+#include "debug/BusBridge.hh"
 #include "mem/bridge.hh"
 #include "params/Bridge.hh"
 
diff --git a/src/mem/bus.cc b/src/mem/bus.cc
index c84d9fc..69b1454 100644
--- a/src/mem/bus.cc
+++ b/src/mem/bus.cc
@@ -38,6 +38,9 @@
 
 #include "base/misc.hh"
 #include "base/trace.hh"
+#include "debug/Bus.hh"
+#include "debug/BusAddrRanges.hh"
+#include "debug/MMU.hh"
 #include "mem/bus.hh"
 
 Bus::Bus(const BusParams *p)
diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
index b7e331d..7863edd 100644
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -35,6 +35,7 @@
 
 #include "cpu/base.hh"
 #include "cpu/smt.hh"
+#include "debug/Cache.hh"
 #include "mem/cache/base.hh"
 #include "mem/cache/mshr.hh"
 
diff --git a/src/mem/cache/base.hh b/src/mem/cache/base.hh
index d1ddedb..297692b 100644
--- a/src/mem/cache/base.hh
+++ b/src/mem/cache/base.hh
@@ -48,6 +48,8 @@
 #include "base/trace.hh"
 #include "base/types.hh"
 #include "config/full_system.hh"
+#include "debug/Cache.hh"
+#include "debug/CachePort.hh"
 #include "mem/cache/mshr_queue.hh"
 #include "mem/mem_object.hh"
 #include "mem/packet.hh"
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh
index 5fb95fc..d4a969d 100644
--- a/src/mem/cache/cache_impl.hh
+++ b/src/mem/cache/cache_impl.hh
@@ -54,6 +54,8 @@
 #include "base/misc.hh"
 #include "base/range.hh"
 #include "base/types.hh"
+#include "debug/Cache.hh"
+#include "debug/CachePort.hh"
 #include "mem/cache/prefetch/base.hh"
 #include "mem/cache/blk.hh"
 #include "mem/cache/cache.hh"
diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc
index 292c11c..821a363 100644
--- a/src/mem/cache/mshr.cc
+++ b/src/mem/cache/mshr.cc
@@ -42,6 +42,7 @@
 
 #include "base/misc.hh"
 #include "base/types.hh"
+#include "debug/Cache.hh"
 #include "mem/cache/cache.hh"
 #include "mem/cache/mshr.hh"
 #include "sim/core.hh"
diff --git a/src/mem/cache/prefetch/base.cc b/src/mem/cache/prefetch/base.cc
index c81f029..12028ac 100644
--- a/src/mem/cache/prefetch/base.cc
+++ b/src/mem/cache/prefetch/base.cc
@@ -38,6 +38,7 @@
 #include "arch/isa_traits.hh"
 #include "base/trace.hh"
 #include "config/the_isa.hh"
+#include "debug/HWPrefetch.hh"
 #include "mem/cache/prefetch/base.hh"
 #include "mem/cache/base.hh"
 #include "mem/request.hh"
diff --git a/src/mem/cache/prefetch/ghb.cc b/src/mem/cache/prefetch/ghb.cc
index f8f7de1..dbc565b 100644
--- a/src/mem/cache/prefetch/ghb.cc
+++ b/src/mem/cache/prefetch/ghb.cc
@@ -35,6 +35,7 @@
  */
 
 #include "base/trace.hh"
+#include "debug/HWPrefetch.hh"
 #include "mem/cache/prefetch/ghb.hh"
 
 void
diff --git a/src/mem/cache/prefetch/stride.cc b/src/mem/cache/prefetch/stride.cc
index 8af4e61..f71fd97 100644
--- a/src/mem/cache/prefetch/stride.cc
+++ b/src/mem/cache/prefetch/stride.cc
@@ -35,6 +35,7 @@
  */
 
 #include "base/trace.hh"
+#include "debug/HWPrefetch.hh"
 #include "mem/cache/prefetch/stride.hh"
 
 void
diff --git a/src/mem/cache/tags/iic.cc b/src/mem/cache/tags/iic.cc
index d0e97de..113ad8b 100644
--- a/src/mem/cache/tags/iic.cc
+++ b/src/mem/cache/tags/iic.cc
@@ -40,6 +40,9 @@
 
 #include "base/intmath.hh"
 #include "base/trace.hh"
+#include "debug/Cache.hh"
+#include "debug/IIC.hh"
+#include "debug/IICMore.hh"
 #include "mem/cache/tags/iic.hh"
 #include "mem/cache/base.hh"
 #include "sim/core.hh"
diff --git a/src/mem/cache/tags/lru.cc b/src/mem/cache/tags/lru.cc
index 33517a5..33f0f14 100644
--- a/src/mem/cache/tags/lru.cc
+++ b/src/mem/cache/tags/lru.cc
@@ -36,6 +36,7 @@
 #include <string>
 
 #include "base/intmath.hh"
+#include "debug/CacheRepl.hh"
 #include "mem/cache/tags/cacheset.hh"
 #include "mem/cache/tags/lru.hh"
 #include "mem/cache/base.hh"
diff --git a/src/mem/page_table.cc b/src/mem/page_table.cc
index 861c4a8..a94d924 100644
--- a/src/mem/page_table.cc
+++ b/src/mem/page_table.cc
@@ -42,6 +42,7 @@
 #include "base/intmath.hh"
 #include "base/trace.hh"
 #include "config/the_isa.hh"
+#include "debug/MMU.hh"
 #include "mem/page_table.hh"
 #include "sim/faults.hh"
 #include "sim/process.hh"
diff --git a/src/mem/physical.cc b/src/mem/physical.cc
index fa9ec7e..84af4c7 100644
--- a/src/mem/physical.cc
+++ b/src/mem/physical.cc
@@ -61,6 +61,8 @@
 #include "base/types.hh"
 #include "config/full_system.hh"
 #include "config/the_isa.hh"
+#include "debug/LLSC.hh"
+#include "debug/MemoryAccess.hh"
 #include "mem/packet_access.hh"
 #include "mem/physical.hh"
 #include "sim/eventq.hh"
diff --git a/src/mem/port.cc b/src/mem/port.cc
index 4d44d48..c87785a 100644
--- a/src/mem/port.cc
+++ b/src/mem/port.cc
@@ -36,6 +36,7 @@
 
 #include "base/chunk_generator.hh"
 #include "base/trace.hh"
+#include "debug/Config.hh"
 #include "mem/mem_object.hh"
 #include "mem/port.hh"
 
diff --git a/src/mem/ruby/buffers/MessageBuffer.cc b/src/mem/ruby/buffers/MessageBuffer.cc
index 4c4db5d..e5df19c 100644
--- a/src/mem/ruby/buffers/MessageBuffer.cc
+++ b/src/mem/ruby/buffers/MessageBuffer.cc
@@ -31,6 +31,7 @@
 #include "base/cprintf.hh"
 #include "base/misc.hh"
 #include "base/stl_helpers.hh"
+#include "debug/RubyQueue.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/system/System.hh"
 
diff --git a/src/mem/ruby/common/NetDest.hh b/src/mem/ruby/common/NetDest.hh
index b5c5715..8006045 100644
--- a/src/mem/ruby/common/NetDest.hh
+++ b/src/mem/ruby/common/NetDest.hh
@@ -37,6 +37,7 @@
 #include <iostream>
 #include <vector>
 
+#include "debug/RubyMemory.hh"
 #include "mem/protocol/MachineType.hh"
 #include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/Set.hh"
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
index d7f275f..71fefa2 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
@@ -32,6 +32,7 @@
 #include <cmath>
 
 #include "base/stl_helpers.hh"
+#include "debug/RubyNetwork.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh"
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc
index 62510a4..c656b43 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc
@@ -29,6 +29,7 @@
  */
 
 #include "base/stl_helpers.hh"
+#include "debug/RubyNetwork.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh"
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
index c4c8042..de51a72 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
@@ -32,6 +32,7 @@
 #include <cmath>
 
 #include "base/stl_helpers.hh"
+#include "debug/RubyNetwork.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh"
 #include "mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh"
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
index d7d242b..31ecf96 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
@@ -29,6 +29,7 @@
  */
 
 #include "base/stl_helpers.hh"
+#include "debug/RubyNetwork.hh"
 #include "mem/ruby/network/garnet/flexible-pipeline/InVcState.hh"
 #include "mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh"
 #include "mem/ruby/network/garnet/flexible-pipeline/Router.hh"
diff --git a/src/mem/ruby/network/simple/PerfectSwitch.cc b/src/mem/ruby/network/simple/PerfectSwitch.cc
index 52c9eaa..a054cee 100644
--- a/src/mem/ruby/network/simple/PerfectSwitch.cc
+++ b/src/mem/ruby/network/simple/PerfectSwitch.cc
@@ -28,6 +28,7 @@
 
 #include <algorithm>
 
+#include "debug/RubyNetwork.hh"
 #include "mem/protocol/Protocol.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/network/simple/PerfectSwitch.hh"
diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc
index 0274a97..905a7aa 100644
--- a/src/mem/ruby/network/simple/Throttle.cc
+++ b/src/mem/ruby/network/simple/Throttle.cc
@@ -29,6 +29,7 @@
 #include <cassert>
 
 #include "base/cprintf.hh"
+#include "debug/RubyNetwork.hh"
 #include "mem/protocol/Protocol.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/network/simple/Throttle.hh"
diff --git a/src/mem/ruby/network/simple/Topology.cc b/src/mem/ruby/network/simple/Topology.cc
index a06c157..95f94e9 100644
--- a/src/mem/ruby/network/simple/Topology.cc
+++ b/src/mem/ruby/network/simple/Topology.cc
@@ -28,6 +28,7 @@
 
 #include <cassert>
 
+#include "debug/RubyNetwork.hh"
 #include "mem/protocol/MachineType.hh"
 #include "mem/protocol/Protocol.hh"
 #include "mem/protocol/TopologyType.hh"
diff --git a/src/mem/ruby/system/CacheMemory.cc b/src/mem/ruby/system/CacheMemory.cc
index 192fa8c..c22572c 100644
--- a/src/mem/ruby/system/CacheMemory.cc
+++ b/src/mem/ruby/system/CacheMemory.cc
@@ -27,6 +27,7 @@
  */
 
 #include "base/intmath.hh"
+#include "debug/RubyCache.hh"
 #include "mem/ruby/system/CacheMemory.hh"
 
 using namespace std;
diff --git a/src/mem/ruby/system/DMASequencer.cc b/src/mem/ruby/system/DMASequencer.cc
index 2889c0c..f8e4cf8 100644
--- a/src/mem/ruby/system/DMASequencer.cc
+++ b/src/mem/ruby/system/DMASequencer.cc
@@ -26,6 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "debug/RubyDma.hh"
 #include "mem/protocol/SequencerMsg.hh"
 #include "mem/protocol/SequencerRequestType.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
diff --git a/src/mem/ruby/system/DirectoryMemory.cc b/src/mem/ruby/system/DirectoryMemory.cc
index c9d072c..fe54c8d 100644
--- a/src/mem/ruby/system/DirectoryMemory.cc
+++ b/src/mem/ruby/system/DirectoryMemory.cc
@@ -27,6 +27,7 @@
  */
 
 #include "base/intmath.hh"
+#include "debug/RubyCache.hh"
 #include "mem/ruby/slicc_interface/RubySlicc_Util.hh"
 #include "mem/ruby/system/DirectoryMemory.hh"
 #include "mem/ruby/system/System.hh"
diff --git a/src/mem/ruby/system/RubyPort.cc b/src/mem/ruby/system/RubyPort.cc
index 3546343..40f8932 100644
--- a/src/mem/ruby/system/RubyPort.cc
+++ b/src/mem/ruby/system/RubyPort.cc
@@ -31,6 +31,8 @@
 #include "arch/x86/insts/microldstop.hh"
 #endif // X86_ISA
 #include "cpu/testers/rubytest/RubyTester.hh"
+#include "debug/MemoryAccess.hh"
+#include "debug/Ruby.hh"
 #include "mem/ruby/slicc_interface/AbstractController.hh"
 #include "mem/ruby/system/RubyPort.hh"
 #include "mem/physical.hh"
diff --git a/src/mem/ruby/system/Sequencer.cc b/src/mem/ruby/system/Sequencer.cc
index db30b17..e260ce8 100644
--- a/src/mem/ruby/system/Sequencer.cc
+++ b/src/mem/ruby/system/Sequencer.cc
@@ -29,6 +29,8 @@
 #include "base/misc.hh"
 #include "base/str.hh"
 #include "cpu/testers/rubytest/RubyTester.hh"
+#include "debug/MemoryAccess.hh"
+#include "debug/ProtocolTrace.hh"
 #include "mem/protocol/Protocol.hh"
 #include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/common/Global.hh"
diff --git a/src/mem/ruby/system/SparseMemory.cc b/src/mem/ruby/system/SparseMemory.cc
index 51d3379..fd90e22 100644
--- a/src/mem/ruby/system/SparseMemory.cc
+++ b/src/mem/ruby/system/SparseMemory.cc
@@ -26,6 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "debug/RubyCache.hh"
 #include "mem/ruby/system/SparseMemory.hh"
 #include "mem/ruby/system/System.hh"
 
diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py
index d1be107..b1b185c 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -417,6 +417,8 @@
 #include <string>
 
 #include "base/cprintf.hh"
+#include "debug/RubyGenerated.hh"
+#include "debug/RubySlicc.hh"
 #include "mem/protocol/${ident}_Controller.hh"
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
@@ -968,6 +970,7 @@
 #include <cassert>
 
 #include "base/misc.hh"
+#include "debug/RubySlicc.hh"
 #include "mem/protocol/${ident}_Controller.hh"
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
@@ -1037,6 +1040,8 @@
 
 #include "base/misc.hh"
 #include "base/trace.hh"
+#include "debug/ProtocolTrace.hh"
+#include "debug/RubyGenerated.hh"
 #include "mem/protocol/${ident}_Controller.hh"
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
diff --git a/src/mem/tport.cc b/src/mem/tport.cc
index 61f9e14..8e02215 100644
--- a/src/mem/tport.cc
+++ b/src/mem/tport.cc
@@ -28,6 +28,7 @@
  * Authors: Ali Saidi
  */
 
+#include "debug/Bus.hh"
 #include "mem/tport.hh"
 
 using namespace std;
diff --git a/src/python/m5/debug.py b/src/python/m5/debug.py
index cd40b8f..8231126 100644
--- a/src/python/m5/debug.py
+++ b/src/python/m5/debug.py
@@ -29,3 +29,65 @@
 import internal
 
 from internal.debug import schedBreakCycle, setRemoteGDBPort
+
+def help():
+    print "Base Flags:"
+    for flag in flags.basic:
+        print "    %s: %s" % (flag, flags.descriptions[flag])
+    print
+    print "Compound Flags:"
+    for flag in flags.compound:
+        if flag == 'All':
+            continue
+        print "    %s: %s" % (flag, flags.descriptions[flag])
+        util.printList(flags.compoundMap[flag], indent=8)
+        print
+
+class AllFlags(object):
+    def __init__(self):
+        self._version = -1
+        self._dict = {}
+
+    def _update(self):
+        current_version = internal.debug.getAllFlagsVersion()
+        if self._version == current_version:
+            return
+
+        self._dict.clear()
+        for flag in internal.debug.getAllFlags():
+            self._dict[flag.name()] = flag
+        self._version = current_version
+
+    def __contains__(self, item):
+        self._update()
+        return item in self._dict
+
+    def __getitem__(self, item):
+        self._update()
+        return self._dict[item]
+
+    def keys(self):
+        self._update()
+        return self._dict.keys()
+
+    def values(self):
+        self._update()
+        return self._dict.values()
+
+    def items(self):
+        self._update()
+        return self._dict.items()
+
+    def iterkeys(self):
+        self._update()
+        return self._dict.iterkeys()
+
+    def itervalues(self):
+        self._update()
+        return self._dict.itervalues()
+
+    def iteritems(self):
+        self._update()
+        return self._dict.iteritems()
+
+flags = AllFlags()
diff --git a/src/python/m5/main.py b/src/python/m5/main.py
index f932ec6..adf42fc 100644
--- a/src/python/m5/main.py
+++ b/src/python/m5/main.py
@@ -98,15 +98,15 @@
 set_group("Debugging Options")
 add_option("--debug-break", metavar="TIME[,TIME]", action='append', split=',',
     help="Cycle to create a breakpoint")
+add_option("--debug-help", action='store_true',
+    help="Print help on debug flags")
+add_option("--debug-flags", metavar="FLAG[,FLAG]", action='append', split=',',
+    help="Sets the flags for debugging (-FLAG disables a flag)")
 add_option("--remote-gdb-port", type='int', default=7000,
     help="Remote gdb base port (set to 0 to disable listening)")
 
 # Tracing options
 set_group("Trace Options")
-add_option("--trace-help", action='store_true',
-    help="Print help on trace flags")
-add_option("--trace-flags", metavar="FLAG[,FLAG]", action='append', split=',',
-    help="Sets the flags for tracing (-FLAG disables a flag)")
 add_option("--trace-start", metavar="TIME", type='int',
     help="Start tracing at TIME (must be in ticks)")
 add_option("--trace-file", metavar="FILE", default="cout",
@@ -214,10 +214,10 @@
         print info.README
         print
 
-    if options.trace_help:
+    if options.debug_help:
         done = True
         check_tracing()
-        trace.help()
+        debug.help()
 
     if options.list_sim_objects:
         import SimObject
@@ -284,30 +284,25 @@
     for when in options.debug_break:
         debug.schedBreakCycle(int(when))
 
-    if options.trace_flags:
+    if options.debug_flags:
         check_tracing()
 
         on_flags = []
         off_flags = []
-        for flag in options.trace_flags:
+        for flag in options.debug_flags:
             off = False
             if flag.startswith('-'):
                 flag = flag[1:]
                 off = True
-            if flag not in trace.flags.all and flag != "All":
-                print >>sys.stderr, "invalid trace flag '%s'" % flag
+
+            if flag not in debug.flags:
+                print >>sys.stderr, "invalid debug flag '%s'" % flag
                 sys.exit(1)
 
             if off:
-                off_flags.append(flag)
+                debug.flags[flag].disable()
             else:
-                on_flags.append(flag)
-
-        for flag in on_flags:
-            trace.set(flag)
-
-        for flag in off_flags:
-            trace.clear(flag)
+                debug.flags[flag].enable()
 
     if options.trace_start:
         check_tracing()
diff --git a/src/python/m5/trace.py b/src/python/m5/trace.py
index db23904..f344448 100644
--- a/src/python/m5/trace.py
+++ b/src/python/m5/trace.py
@@ -27,26 +27,12 @@
 # Authors: Nathan Binkert
 
 import internal
-import traceflags as flags
 import util
 
-from internal.trace import clear, output, set, ignore
+from internal.trace import output, ignore
 
 def disable():
     internal.trace.cvar.enabled = False
 
 def enable():
     internal.trace.cvar.enabled = True
-
-def help():
-    print "Base Flags:"
-    for flag in flags.basic:
-        print "    %s: %s" % (flag, flags.descriptions[flag])
-    print
-    print "Compound Flags:"
-    for flag in flags.compound:
-        if flag == 'All':
-            continue
-        print "    %s: %s" % (flag, flags.descriptions[flag])
-        util.printList(flags.compoundMap[flag], indent=8)
-        print
diff --git a/src/python/swig/debug.i b/src/python/swig/debug.i
index 8486075..c2eb3ed 100644
--- a/src/python/swig/debug.i
+++ b/src/python/swig/debug.i
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2010 The Hewlett-Packard Development Company
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,11 +32,62 @@
 %module(package="m5.internal") debug
 
 %{
+#include <cassert>
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/debug.hh"
 #include "base/types.hh"
 #include "sim/debug.hh"
+
+using namespace std;
+
+typedef map<string, Debug::Flag *> FlagsMap;
+typedef vector<Debug::Flag *> FlagsVec;
+
+namespace Debug {
+extern int allFlagsVersion;
+FlagsMap &allFlags();
+}
+
+inline int
+getAllFlagsVersion()
+{
+    return Debug::allFlagsVersion;
+}
+
+inline FlagsVec
+getAllFlags()
+{
+    FlagsMap &flagsMap = Debug::allFlags();
+
+    FlagsVec flags(flagsMap.size());
+
+    int index = 0;
+    FlagsMap::iterator i = flagsMap.begin();
+    FlagsMap::iterator end = flagsMap.end();
+    for (; i != end; ++i) {
+        assert(index < flags.size());
+        flags[index++] = i->second;
+    }
+
+    return flags;
+}
+
 %}
 
+%ignore Debug::SimpleFlag::operator!;
+
+%include <std_string.i>
+%include <std_vector.i>
 %include <stdint.i>
 
+%include "base/debug.hh"
 %include "base/types.hh"
 %include "sim/debug.hh"
+
+%template(AllFlags) std::vector<Debug::Flag *>;
+
+int getAllFlagsVersion();
+std::vector<Debug::Flag *> getAllFlags();
diff --git a/src/python/swig/trace.i b/src/python/swig/trace.i
index 5407b68..3b049a3 100644
--- a/src/python/swig/trace.i
+++ b/src/python/swig/trace.i
@@ -41,18 +41,6 @@
 }
 
 inline void
-set(const char *flag)
-{
-    Trace::changeFlag(flag, true);
-}
-
-inline void
-clear(const char *flag)
-{
-    Trace::changeFlag(flag, false);
-}
-
-inline void
 ignore(const char *expr)
 {
     Trace::ignore.setExpression(expr);
@@ -61,10 +49,6 @@
 using Trace::enabled;
 %}
 
-%inline %{
 extern void output(const char *string);
-extern void set(const char *string);
-extern void clear(const char *string);
 extern void ignore(const char *expr);
 extern bool enabled;
-%}
diff --git a/src/sim/eventq.cc b/src/sim/eventq.cc
index 71036fe..78524fe 100644
--- a/src/sim/eventq.cc
+++ b/src/sim/eventq.cc
@@ -40,6 +40,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "cpu/smt.hh"
+#include "debug/Config.hh"
 #include "sim/core.hh"
 #include "sim/eventq.hh"
 
diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh
index 8fbd1b2..fcfa119 100644
--- a/src/sim/eventq.hh
+++ b/src/sim/eventq.hh
@@ -47,6 +47,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "base/types.hh"
+#include "debug/Event.hh"
 #include "sim/serialize.hh"
 
 class EventQueue;       // forward declaration
diff --git a/src/sim/faults.cc b/src/sim/faults.cc
index adf6b24..8e9b8e0 100644
--- a/src/sim/faults.cc
+++ b/src/sim/faults.cc
@@ -33,6 +33,7 @@
 #include "base/misc.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Fault.hh"
 #include "mem/page_table.hh"
 #include "sim/faults.hh"
 #include "sim/process.hh"
diff --git a/src/sim/pseudo_inst.cc b/src/sim/pseudo_inst.cc
index 3b78cc1..eba7273 100644
--- a/src/sim/pseudo_inst.cc
+++ b/src/sim/pseudo_inst.cc
@@ -54,6 +54,9 @@
 #include "cpu/base.hh"
 #include "cpu/quiesce_event.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Loader.hh"
+#include "debug/Quiesce.hh"
+#include "debug/WorkItems.hh"
 #include "params/BaseCPU.hh"
 #include "sim/pseudo_inst.hh"
 #include "sim/serialize.hh"
diff --git a/src/sim/root.cc b/src/sim/root.cc
index d51fcbd..1102e6a 100644
--- a/src/sim/root.cc
+++ b/src/sim/root.cc
@@ -32,6 +32,7 @@
  */
 
 #include "base/misc.hh"
+#include "debug/TimeSync.hh"
 #include "sim/root.hh"
 
 Root *Root::_root = NULL;
diff --git a/src/sim/sim_object.cc b/src/sim/sim_object.cc
index 7a7b83b..8919f3e 100644
--- a/src/sim/sim_object.cc
+++ b/src/sim/sim_object.cc
@@ -38,6 +38,7 @@
 #include "base/misc.hh"
 #include "base/trace.hh"
 #include "base/types.hh"
+#include "debug/Config.hh"
 #include "sim/sim_object.hh"
 #include "sim/stats.hh"
 
diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc
index 76fa8a2..6873d4a 100644
--- a/src/sim/syscall_emul.cc
+++ b/src/sim/syscall_emul.cc
@@ -42,6 +42,7 @@
 #include "config/the_isa.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/SyscallVerbose.hh"
 #include "mem/page_table.hh"
 #include "sim/process.hh"
 #include "sim/sim_exit.hh"
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index 06fadf5..e685a0f 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -60,6 +60,7 @@
 #include "config/the_isa.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "debug/SyscallVerbose.hh"
 #include "mem/page_table.hh"
 #include "mem/translating_port.hh"
 #include "sim/byteswap.hh"
diff --git a/src/sim/system.cc b/src/sim/system.cc
index e710bc5..bb8eccf 100644
--- a/src/sim/system.cc
+++ b/src/sim/system.cc
@@ -42,6 +42,7 @@
 #include "config/full_system.hh"
 #include "config/the_isa.hh"
 #include "cpu/thread_context.hh"
+#include "debug/Loader.hh"
 #include "mem/mem_object.hh"
 #include "mem/physical.hh"
 #include "sim/byteswap.hh"