diff options
Diffstat (limited to 'src/systemc')
-rw-r--r-- | src/systemc/core/process.cc | 2 | ||||
-rw-r--r-- | src/systemc/core/process.hh | 3 | ||||
-rw-r--r-- | src/systemc/core/sc_module.cc | 3 |
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 |