diff --git a/src/systemc/core/process.cc b/src/systemc/core/process.cc index 1fd16e0d90..b8eab3cde3 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 2ec75dc06c..d28d46396e 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 8418a3136c..2ba0fa221d 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