diff options
Diffstat (limited to 'src/sim')
-rw-r--r-- | src/sim/system.cc | 14 | ||||
-rw-r--r-- | src/sim/system.hh | 15 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/sim/system.cc b/src/sim/system.cc index 3868f57b8..7b8ca87e3 100644 --- a/src/sim/system.cc +++ b/src/sim/system.cc @@ -292,6 +292,20 @@ System::registerThreadContext(ThreadContext *tc, ContextID assigned) return id; } +#if THE_ISA != NULL_ISA +bool +System::schedule(PCEvent *event) +{ + return pcEventQueue.schedule(event); +} + +bool +System::remove(PCEvent *event) +{ + return pcEventQueue.remove(event); +} +#endif + int System::numRunningContexts() { diff --git a/src/sim/system.hh b/src/sim/system.hh index 852bc21a2..c2b841107 100644 --- a/src/sim/system.hh +++ b/src/sim/system.hh @@ -74,7 +74,8 @@ */ #if THE_ISA != NULL_ISA #include "cpu/pc_event.hh" - +#else +class PCEvent; #endif class BaseRemoteGDB; @@ -83,6 +84,9 @@ class ObjectFile; class ThreadContext; class System : public SimObject +#if THE_ISA != NULL_ISA + , public PCEventScope +#endif { private: @@ -201,6 +205,13 @@ class System : public SimObject std::vector<ThreadContext *> threadContexts; const bool multiThread; + using SimObject::schedule; + +#if THE_ISA != NULL_ISA + bool schedule(PCEvent *event) override; + bool remove(PCEvent *event) override; +#endif + ThreadContext *getThreadContext(ContextID tid) const { return threadContexts[tid]; @@ -493,7 +504,7 @@ class System : public SimObject #if THE_ISA != NULL_ISA if (symtab->findAddress(lbl, addr)) { - T *ev = new T(&pcEventQueue, desc, fixFuncEventAddr(addr), + T *ev = new T(this, desc, fixFuncEventAddr(addr), std::forward<Args>(args)...); return ev; } |