summaryrefslogtreecommitdiff
path: root/src/systemc/ext/core
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-08-30 01:39:21 -0700
committerGabe Black <gabeblack@google.com>2018-10-03 00:21:28 +0000
commit1cc084fc7a214e6b3ed30910e9cd9a0c81f25b2f (patch)
tree87b0cafcc2559d3a95c964d2776068e78e1f1b37 /src/systemc/ext/core
parent475e8cd58094b6acad8d5ef8859c6fed0b543a2e (diff)
downloadgem5-1cc084fc7a214e6b3ed30910e9cd9a0c81f25b2f.tar.xz
systemc: Raise an error when SC_METHOD, etc. is used after starting.
Those mechanisms for creating processes are only allowed before the end of elaboration, or in other words before sc_start is called. Technically the check in Accellera's implementation won't trigger if the simulation is stopped, and we immitate that behavior. Change-Id: I9b8b5bd32f876781b6e0d5c0ee0e09de19bdabc1 Reviewed-on: https://gem5-review.googlesource.com/c/12447 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/ext/core')
-rw-r--r--src/systemc/ext/core/sc_module.hh12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/systemc/ext/core/sc_module.hh b/src/systemc/ext/core/sc_module.hh
index 539d275ec..0e5e679c9 100644
--- a/src/systemc/ext/core/sc_module.hh
+++ b/src/systemc/ext/core/sc_module.hh
@@ -289,7 +289,8 @@ bool timed_out();
#name, new ::sc_gem5::ProcessMemberFuncWrapper< \
SC_CURRENT_USER_MODULE>(this, \
&SC_CURRENT_USER_MODULE::name)); \
- this->sensitive << p; \
+ if (p) \
+ this->sensitive << p; \
}
#define SC_THREAD(name) \
{ \
@@ -298,7 +299,8 @@ bool timed_out();
#name, new ::sc_gem5::ProcessMemberFuncWrapper< \
SC_CURRENT_USER_MODULE>(this, \
&SC_CURRENT_USER_MODULE::name)); \
- this->sensitive << p; \
+ if (p) \
+ this->sensitive << p; \
}
#define SC_CTHREAD(name, clk) \
{ \
@@ -307,8 +309,10 @@ bool timed_out();
#name, new ::sc_gem5::ProcessMemberFuncWrapper< \
SC_CURRENT_USER_MODULE>(this, \
&SC_CURRENT_USER_MODULE::name)); \
- this->sensitive << p; \
- this->sensitive << clk; \
+ if (p) { \
+ this->sensitive << p; \
+ this->sensitive << clk; \
+ } \
}
// Nonstandard