Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/12967

Change subject: systemc: Make sure the right type process is running when calling wait.
......................................................................

systemc: Make sure the right type process is running when calling wait.

That function is only allowed when running a thread or cthread.

Change-Id: Idf98b70018169d4f724aa8168f3c4e8161f0b83d
---
M src/systemc/core/sc_module.cc
A src/systemc/tests/systemc/kernel/dynamic_processes/test03/expected_returncode
2 files changed, 34 insertions(+), 0 deletions(-)



diff --git a/src/systemc/core/sc_module.cc b/src/systemc/core/sc_module.cc
index 32d1c97..dfd8979 100644
--- a/src/systemc/core/sc_module.cc
+++ b/src/systemc/core/sc_module.cc
@@ -591,10 +591,29 @@
 }


+namespace
+{
+
+bool
+waitErrorCheck(sc_gem5::Process *p)
+{
+    if (p->procKind() == SC_METHOD_PROC_) {
+        SC_REPORT_ERROR(
+ "(E519) wait() is only allowed in SC_THREADs and SC_CTHREADs",
+                "\n        in SC_METHODs use next_trigger() instead");
+        return true;
+    }
+    return false;
+}
+
+} // anonymous namespace
+
 void
 wait()
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->cancelTimeout();
     p->clearDynamic();
     sc_gem5::scheduler.yield();
@@ -615,6 +634,8 @@
 wait(const sc_event &e)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->cancelTimeout();
     ::sc_gem5::newDynamicSensitivityEvent(p, &e);
     sc_gem5::scheduler.yield();
@@ -624,6 +645,8 @@
 wait(const sc_event_or_list &eol)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->cancelTimeout();
     ::sc_gem5::newDynamicSensitivityEventOrList(p, &eol);
     sc_gem5::scheduler.yield();
@@ -633,6 +656,8 @@
 wait(const sc_event_and_list &eal)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->cancelTimeout();
     ::sc_gem5::newDynamicSensitivityEventAndList(p, &eal);
     sc_gem5::scheduler.yield();
@@ -642,6 +667,8 @@
 wait(const sc_time &t)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->setTimeout(t);
     p->clearDynamic();
     sc_gem5::scheduler.yield();
@@ -657,6 +684,8 @@
 wait(const sc_time &t, const sc_event &e)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->setTimeout(t);
     ::sc_gem5::newDynamicSensitivityEvent(p, &e);
     sc_gem5::scheduler.yield();
@@ -672,6 +701,8 @@
 wait(const sc_time &t, const sc_event_or_list &eol)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->setTimeout(t);
     ::sc_gem5::newDynamicSensitivityEventOrList(p, &eol);
     sc_gem5::scheduler.yield();
@@ -687,6 +718,8 @@
 wait(const sc_time &t, const sc_event_and_list &eal)
 {
     sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (waitErrorCheck(p))
+        return;
     p->setTimeout(t);
     ::sc_gem5::newDynamicSensitivityEventAndList(p, &eal);
     sc_gem5::scheduler.yield();
diff --git a/src/systemc/tests/systemc/kernel/dynamic_processes/test03/expected_returncode b/src/systemc/tests/systemc/kernel/dynamic_processes/test03/expected_returncode
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/src/systemc/tests/systemc/kernel/dynamic_processes/test03/expected_returncode
@@ -0,0 +1 @@
+1

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12967
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Idf98b70018169d4f724aa8168f3c4e8161f0b83d
Gerrit-Change-Number: 12967
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to