Trace: Allow printing ASIDs and selectively tracing based on user/kernel code.
authorChander Sudanthi <chander.sudanthi@arm.com>
Fri, 13 May 2011 22:27:00 +0000 (17:27 -0500)
committerChander Sudanthi <chander.sudanthi@arm.com>
Fri, 13 May 2011 22:27:00 +0000 (17:27 -0500)
Debug flags are ExecUser, ExecKernel, and ExecAsid. ExecUser and
ExecKernel are set by default when Exec is specified.  Use minus
sign with ExecUser or ExecKernel to remove user or kernel tracing
respectively.

src/arch/alpha/utility.cc
src/arch/alpha/utility.hh
src/arch/arm/utility.hh
src/arch/mips/utility.hh
src/arch/power/utility.hh
src/arch/sparc/utility.hh
src/arch/x86/utility.hh
src/cpu/SConscript
src/cpu/exetrace.cc

index 2d56ca9b8e0977359691771c7b80c7d1fd153bf1..5d40f85d7c2e05cbd8ef080bab5ed89db2c548cd 100644 (file)
@@ -29,7 +29,6 @@
  *          Ali Saidi
  */
 
-#include "arch/alpha/ev5.hh"
 #include "arch/alpha/utility.hh"
 
 #if FULL_SYSTEM
index 8759b49ce19adfbdc0c85c64c278fb618b1397af..c0c985c3433dabe932b94ab86c562abd0904f1b7 100644 (file)
@@ -39,6 +39,7 @@
 #include "config/full_system.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/thread_context.hh"
+#include "arch/alpha/ev5.hh"
 
 namespace AlphaISA {
 
@@ -111,6 +112,12 @@ advancePC(PCState &pc, const StaticInstPtr inst)
     pc.advance();
 }
 
+inline uint64_t
+getExecutingAsid(ThreadContext *tc)
+{
+    return DTB_ASN_ASN(tc->readMiscRegNoEffect(IPR_DTB_ASN));
+}
+
 } // namespace AlphaISA
 
 #endif // __ARCH_ALPHA_UTILITY_HH__
index 20cb9b42625c8045a2eacc04720d3e5bb3e4257a..8ad3de66aa2a0049796949d3bea6600d392e1715 100644 (file)
@@ -173,7 +173,12 @@ advancePC(PCState &pc, const StaticInstPtr inst)
 Addr truncPage(Addr addr);
 Addr roundPage(Addr addr);
 
-};
+inline uint64_t
+getExecutingAsid(ThreadContext *tc)
+{
+    return tc->readMiscReg(MISCREG_CONTEXTIDR);
+}
 
+};
 
 #endif
index 61c43a158f589eaa9b8ccffa64329753f2bb1fdf..a2995b098422cb9877e1f37f55fb62713e9e3b11 100644 (file)
@@ -120,6 +120,12 @@ advancePC(PCState &pc, const StaticInstPtr inst)
     pc.advance();
 }
 
+inline uint64_t
+getExecutingAsid(ThreadContext *tc)
+{
+    return 0;
+}
+
 };
 
 
index cbb9bb646d1bcacd221be5d1ca07aecd83d9161d..34905477448031caf8461b4e4aa31d9fa4b496e4 100644 (file)
@@ -78,6 +78,19 @@ advancePC(PCState &pc, const StaticInstPtr inst)
     pc.advance();
 }
 
+static inline bool
+inUserMode(ThreadContext *tc)
+{
+    return 0;
+}
+
+inline uint64_t
+getExecutingAsid(ThreadContext *tc)
+{
+    return 0;
+}
+
 } // namespace PowerISA
 
+
 #endif // __ARCH_POWER_UTILITY_HH__
index b702e683865fe16e4faf66c7d6ba6906e90686d5..76b551ac86460a3d71e3660e630a3e061726cd9a 100644 (file)
@@ -94,6 +94,12 @@ advancePC(PCState &pc, const StaticInstPtr inst)
     inst->advancePC(pc);
 }
 
+inline uint64_t
+getExecutingAsid(ThreadContext *tc)
+{
+    return tc->readMiscRegNoEffect(MISCREG_MMU_P_CONTEXT);
+}
+
 } // namespace SparcISA
 
 #endif
index 143fde00c05df1396f28a2dbc15bdb8776c29883..4cfbe77db37aee033c32b0caaffbedac104dbc8b 100644 (file)
@@ -102,6 +102,13 @@ namespace X86ISA
     {
         inst->advancePC(pc);
     }
+
+    inline uint64_t
+    getExecutingAsid(ThreadContext *tc)
+    {
+        return 0;
+    }
+
 };
 
 #endif // __ARCH_X86_UTILITY_HH__
index fb7c8684551a2a81a0ec243739ba9902077abb88..f6ed8068054ae20b6ce8b7402a2a66b0c593318a 100644 (file)
@@ -168,6 +168,9 @@ TraceFlag('ExecThread')
 TraceFlag('ExecTicks')
 TraceFlag('ExecMicro')
 TraceFlag('ExecMacro')
+TraceFlag('ExecUser')
+TraceFlag('ExecKernel')
+TraceFlag('ExecAsid')
 TraceFlag('Fetch')
 TraceFlag('IntrControl')
 TraceFlag('PCEvent')
@@ -176,8 +179,11 @@ TraceFlag('Quiesce')
 CompoundFlag('ExecAll', [ 'ExecEnable', 'ExecCPSeq', 'ExecEffAddr',
     'ExecFaulting', 'ExecFetchSeq', 'ExecOpClass', 'ExecRegDelta',
     'ExecResult', 'ExecSpeculative', 'ExecSymbol', 'ExecThread',
-    'ExecTicks', 'ExecMicro', 'ExecMacro' ])
+    'ExecTicks', 'ExecMicro', 'ExecMacro', 'ExecUser', 'ExecKernel',
+    'ExecAsid' ])
 CompoundFlag('Exec', [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', 'ExecThread',
-    'ExecEffAddr', 'ExecResult', 'ExecSymbol', 'ExecMicro', 'ExecFaulting' ])
+    'ExecEffAddr', 'ExecResult', 'ExecSymbol', 'ExecMicro', 'ExecFaulting',
+    'ExecUser', 'ExecKernel' ])
 CompoundFlag('ExecNoTicks', [ 'ExecEnable', 'ExecOpClass', 'ExecThread',
-    'ExecEffAddr', 'ExecResult', 'ExecMicro', 'ExecFaulting' ])
+    'ExecEffAddr', 'ExecResult', 'ExecMicro', 'ExecFaulting',
+    'ExecUser', 'ExecKernel' ])
index a6450ffe3b5a175fea1b4ff18742b6147237fcb2..40991652da74c988f9001f139a4a3cab554d17d3 100644 (file)
@@ -60,6 +60,12 @@ Trace::ExeTracerRecord::traceInst(StaticInstPtr inst, bool ran)
 {
     ostream &outs = Trace::output();
 
+    if (!Debug::ExecUser || !Debug::ExecKernel) {
+        bool in_user_mode = TheISA::inUserMode(thread);
+        if (in_user_mode && !Debug::ExecUser) return;
+        if (!in_user_mode && !Debug::ExecKernel) return;
+    }
+
     if (Debug::ExecTicks)
         dumpTicks(outs);
 
@@ -68,6 +74,9 @@ Trace::ExeTracerRecord::traceInst(StaticInstPtr inst, bool ran)
     if (Debug::ExecSpeculative)
         outs << (misspeculating ? "-" : "+") << " ";
 
+    if (Debug::ExecAsid)
+        outs << "A" << dec << TheISA::getExecutingAsid(thread) << " ";
+
     if (Debug::ExecThread)
         outs << "T" << thread->threadId() << " : ";