summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@eecs.umich.edu>2007-02-05 22:05:00 -0800
committerSteve Reinhardt <stever@eecs.umich.edu>2007-02-05 22:05:00 -0800
commitf5a803f56e6057a9d908c47aa05fbbfb98a575b5 (patch)
tree59f9760a26a5aace26d815e502468585fa25a4f0 /src
parent17cbfe55fdd80ccd4c9c33ade3b636ba793def56 (diff)
downloadgem5-f5a803f56e6057a9d908c47aa05fbbfb98a575b5.tar.xz
Use an instance counter to give Events repeatable IDs
in debugging mode (especially valuable for tracediff). --HG-- extra : convert_revision : 227434a06b5271a8300f2f6861bd06c4ac19e6c4
Diffstat (limited to 'src')
-rw-r--r--src/sim/eventq.cc2
-rw-r--r--src/sim/eventq.hh19
2 files changed, 21 insertions, 0 deletions
diff --git a/src/sim/eventq.cc b/src/sim/eventq.cc
index 6ae838897..de3050d8c 100644
--- a/src/sim/eventq.cc
+++ b/src/sim/eventq.cc
@@ -53,6 +53,8 @@ using namespace std;
//
EventQueue mainEventQueue("MainEventQueue");
+Counter Event::instanceCounter = 0;
+
void
EventQueue::insert(Event *event)
{
diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh
index fa65b08af..1aeb26e25 100644
--- a/src/sim/eventq.hh
+++ b/src/sim/eventq.hh
@@ -75,6 +75,18 @@ class Event : public Serializable, public FastAlloc
friend class EventQueue;
private:
+
+#ifndef NDEBUG
+ /// Global counter to generate unique IDs for Event instances
+ static Counter instanceCounter;
+
+ /// This event's unique ID. We can also use pointer values for
+ /// this but they're not consistent across runs making debugging
+ /// more difficult. Thus we use a global counter value when
+ /// debugging.
+ Counter instanceId;
+#endif // NDEBUG
+
/// queue to which this event belongs (though it may or may not be
/// scheduled on this queue yet)
EventQueue *queue;
@@ -173,12 +185,19 @@ class Event : public Serializable, public FastAlloc
#endif
annotated_value(0)
{
+#ifndef NDEBUG
+ instanceId = ++instanceCounter;
+#endif
}
~Event() {}
virtual const std::string name() const {
+#ifndef NDEBUG
+ return csprintf("Event_%d", instanceId);
+#else
return csprintf("Event_%x", (uintptr_t)this);
+#endif
}
/// Determine if the current event is scheduled