sim, gdb: Refactor some Event subclasses into lambdas
authorSean Wilson <spwilson2@wisc.edu>
Tue, 27 Jun 2017 18:07:51 +0000 (13:07 -0500)
committerSean Wilson <spwilson2@wisc.edu>
Wed, 12 Jul 2017 20:07:05 +0000 (20:07 +0000)
Change-Id: If3e4329204f27eda96b50ec6ac279ebc6ef23d99
Signed-off-by: Sean Wilson <spwilson2@wisc.edu>
Reviewed-on: https://gem5-review.googlesource.com/3921
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/base/remote_gdb.cc
src/base/remote_gdb.hh
src/sim/ticked_object.cc
src/sim/ticked_object.hh

index 3b436cced5d94dd5ca690c4c1cc2d0ba86832448..6ed5957d786ff4da02b00f6e04a3e5b490371f52 100644 (file)
@@ -289,17 +289,18 @@ BaseRemoteGDB::TrapEvent::process()
 }
 
 void
-BaseRemoteGDB::SingleStepEvent::process()
+BaseRemoteGDB::processSingleStepEvent()
 {
-    if (!gdb->singleStepEvent.scheduled())
-        gdb->scheduleInstCommitEvent(&gdb->singleStepEvent, 1);
-    gdb->trap(SIGTRAP);
+    if (!singleStepEvent.scheduled())
+        scheduleInstCommitEvent(&singleStepEvent, 1);
+    trap(SIGTRAP);
 }
 
 BaseRemoteGDB::BaseRemoteGDB(System *_system, ThreadContext *c) :
-        inputEvent(NULL), trapEvent(this), listener(NULL),
-        number(-1), fd(-1), active(false), attached(false), system(_system),
-        context(c), singleStepEvent(this)
+        inputEvent(NULL), trapEvent(this), listener(NULL), number(-1),
+        fd(-1), active(false), attached(false), system(_system),
+        context(c),
+        singleStepEvent([this]{ processSingleStepEvent(); }, name())
 {
 }
 
@@ -1123,4 +1124,3 @@ BaseRemoteGDB::hex2i(const char **srcp)
     *srcp = src;
     return r;
 }
-
index b7de0ae54fec3d2f64cfe9446cf4f83ec892c07c..121faaf2ec3f1b4dd0aecc0abe974b850ff8ea2b 100644 (file)
@@ -260,20 +260,8 @@ class BaseRemoteGDB
         return trap(SIGTRAP);
     }
 
-  protected:
-    class SingleStepEvent : public Event
-    {
-      protected:
-        BaseRemoteGDB *gdb;
-
-      public:
-        SingleStepEvent(BaseRemoteGDB *g) : gdb(g)
-        {}
-
-        void process();
-    };
-
-    SingleStepEvent singleStepEvent;
+    void processSingleStepEvent();
+    EventFunctionWrapper singleStepEvent;
 
     void clearSingleStep();
     void setSingleStep();
index a9f3aceb760486a4e8602060d6bd0e8f61c7771f..1a04dc14f9f50cfbf3f30d0f8a490e65296f83d3 100644 (file)
@@ -46,7 +46,7 @@ Ticked::Ticked(ClockedObject &object_,
     Stats::Scalar *imported_num_cycles,
     Event::Priority priority) :
     object(object_),
-    event(*this, priority),
+    event([this]{ processClockEvent(); }, name(), false, priority),
     running(false),
     lastStopped(0),
     /* Allocate numCycles if an external stat wasn't passed in */
@@ -55,6 +55,16 @@ Ticked::Ticked(ClockedObject &object_,
         *numCyclesLocal))
 { }
 
+void
+Ticked::processClockEvent() {
+    ++tickCycles;
+    ++numCycles;
+    countCycles(Cycles(1));
+    evaluate();
+    if (running)
+        object.schedule(event, object.clockEdge(Cycles(1)));
+}
+
 void
 Ticked::regStats()
 {
index 3ba0045fc573990287705bf1f6c7ea2d775c2657..ad7d6e93b1930fda46ddc3d02fea3a2fe018f5c1 100644 (file)
@@ -60,39 +60,14 @@ class TickedObjectParams;
 class Ticked : public Serializable
 {
   protected:
-    /** An event to call process periodically */
-    class ClockEvent : public Event
-    {
-      public:
-        Ticked &owner;
-
-        ClockEvent(Ticked &owner_, Priority priority) :
-            Event(priority),
-            owner(owner_)
-        { }
-
-        /** Evaluate and reschedule */
-        void
-        process()
-        {
-            ++owner.tickCycles;
-            ++owner.numCycles;
-            owner.countCycles(Cycles(1));
-            owner.evaluate();
-            if (owner.running) {
-                owner.object.schedule(this,
-                    owner.object.clockEdge(Cycles(1)));
-            }
-        }
-    };
-
-    friend class ClockEvent;
-
     /** ClockedObject who is responsible for this Ticked's actions/stats */
     ClockedObject &object;
 
-    /** The single instance of ClockEvent used */
-    ClockEvent event;
+    /** The wrapper for processClockEvent */
+    EventFunctionWrapper event;
+
+    /** Evaluate and reschedule */
+    void processClockEvent();
 
     /** Have I been started? and am not stopped */
     bool running;