summaryrefslogtreecommitdiff
path: root/src/systemc
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc')
-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