summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-05 16:08:24 -0700
committerGabe Black <gabeblack@google.com>2018-10-09 21:36:27 +0000
commit930386c114eda9e0f57d407d2ef61740fd75fc88 (patch)
treec1bee81ffe3cf56891bb278b092cb15d8eceddb1
parent38086692c4103f1373c06d79b09a0943935a8b2a (diff)
downloadgem5-930386c114eda9e0f57d407d2ef61740fd75fc88.tar.xz
systemc: Implement the nonstandard halt function.
Change-Id: Ie9bd9db92a63169980230bc9a15e153d5609dd0b Reviewed-on: https://gem5-review.googlesource.com/c/12594 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r--src/systemc/core/process.cc2
-rw-r--r--src/systemc/core/process.hh3
-rw-r--r--src/systemc/core/sc_module.cc3
3 files changed, 7 insertions, 1 deletions
diff --git a/src/systemc/core/process.cc b/src/systemc/core/process.cc
index 1fd16e0d9..b8eab3cde 100644
--- a/src/systemc/core/process.cc
+++ b/src/systemc/core/process.cc
@@ -338,6 +338,8 @@ Process::run()
reset = false;
try {
func->call();
+ } catch(ScHalt) {
+ std::cout << "Terminating process " << name() << std::endl;
} catch(const ::sc_core::sc_unwind_exception &exc) {
reset = exc.is_reset();
_isUnwinding = false;
diff --git a/src/systemc/core/process.hh b/src/systemc/core/process.hh
index 2ec75dc06..d28d46396 100644
--- a/src/systemc/core/process.hh
+++ b/src/systemc/core/process.hh
@@ -52,6 +52,9 @@
namespace sc_gem5
{
+class ScHalt
+{};
+
class Sensitivity
{
protected:
diff --git a/src/systemc/core/sc_module.cc b/src/systemc/core/sc_module.cc
index 8418a3136..2ba0fa221 100644
--- a/src/systemc/core/sc_module.cc
+++ b/src/systemc/core/sc_module.cc
@@ -670,7 +670,8 @@ wait(double d, sc_time_unit u, const sc_event_and_list &eal)
void
halt()
{
- warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ ::sc_core::wait();
+ throw ::sc_gem5::ScHalt();
}
void