sim: print --debug-flag Event execution and instance ID
authorCiro Santilli <ciro.santilli@arm.com>
Fri, 22 Nov 2019 16:14:50 +0000 (16:14 +0000)
committerCiro Santilli <ciro.santilli@arm.com>
Wed, 26 Feb 2020 10:58:37 +0000 (10:58 +0000)
This makes it much easier to determine what event is causing something to
happen, especially when there are multiple events happening at the
same time.

Change-Id: I17378e16bd3de1d98e936a6252aab2cd8c303b23
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/25383
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/sim/eventq.cc
src/sim/eventq.hh

index 6141380a1ee1545ca353eac948a7fae284626884..25131b3f6d3491ace5ece8e3e5b465afe5143e62 100644 (file)
@@ -81,11 +81,7 @@ Event::~Event()
 const std::string
 Event::name() const
 {
-#ifndef NDEBUG
-    return csprintf("Event_%d", instance);
-#else
-    return csprintf("Event_%x", (uintptr_t)this);
-#endif
+    return csprintf("Event_%s", instanceString());
 }
 
 
@@ -220,7 +216,8 @@ EventQueue::serviceOne()
     if (!event->squashed()) {
         // forward current cycle to the time when this event occurs.
         setCurTick(event->when());
-
+        if (DTRACE(Event))
+            event->trace("executed");
         event->process();
         if (event->isExitEvent()) {
             assert(!event->flags.isSet(Event::Managed) ||
@@ -388,8 +385,18 @@ Event::trace(const char *action)
     // more informative message in the trace, override this method on
     // the particular subclass where you have the information that
     // needs to be printed.
-    DPRINTF_UNCONDITIONAL(Event, "%s event %s @ %d\n",
-            description(), action, when());
+    DPRINTF_UNCONDITIONAL(Event, "%s %s %s @ %d\n",
+            description(), instanceString(), action, when());
+}
+
+const std::string
+Event::instanceString() const
+{
+#ifndef NDEBUG
+    return csprintf("%d", instance);
+#else
+    return csprintf("%#x", (uintptr_t)this);
+#endif
 }
 
 void
index a703363ab411c06a88a513277b8bf3f1dec0a213..2976e11cb5491746eb82e5a64ea417c5fcf887ef 100644 (file)
@@ -284,6 +284,9 @@ class Event : public EventBase, public Serializable
     // This function isn't really useful if TRACING_ON is not defined
     virtual void trace(const char *action);     //!< trace event activity
 
+    /// Return the instance number as a string.
+    const std::string instanceString() const;
+
   protected: /* Memory management */
     /**
      * @{