From: Gabe Black Date: Wed, 29 Aug 2018 06:14:40 +0000 (-0700) Subject: systemc: Improve handling of empty process handles. X-Git-Tag: v19.0.0.0~1691 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b6ad37a88e95a2efbb118324ef48206ee0b6dbc6;p=gem5.git systemc: Improve handling of empty process handles. Most had checks, but didn't print any message. throw_it needed a check as well. Change-Id: I916c837112f9b27852583f01b3e16a6f53d5e7ca Reviewed-on: https://gem5-review.googlesource.com/c/12440 Reviewed-by: Gabe Black Maintainer: Gabe Black --- diff --git a/src/systemc/core/sc_process_handle.cc b/src/systemc/core/sc_process_handle.cc index 8c756afa2..c7701a684 100644 --- a/src/systemc/core/sc_process_handle.cc +++ b/src/systemc/core/sc_process_handle.cc @@ -32,6 +32,7 @@ #include "systemc/core/scheduler.hh" #include "systemc/ext/core/sc_main.hh" #include "systemc/ext/core/sc_process_handle.hh" +#include "systemc/ext/utils/sc_report_handler.hh" namespace sc_core { @@ -196,56 +197,79 @@ sc_process_handle::terminated() const const sc_event & sc_process_handle::terminated_event() const { - static sc_event non_event; - return _gem5_process ? _gem5_process->terminatedEvent() : non_event; + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "terminated_event()"); + static sc_event non_event; + return non_event; + } + return _gem5_process->terminatedEvent(); } void sc_process_handle::suspend(sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "suspend()"); return; + } _gem5_process->suspend(include_descendants == SC_INCLUDE_DESCENDANTS); } void sc_process_handle::resume(sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "resume()"); return; + } _gem5_process->resume(include_descendants == SC_INCLUDE_DESCENDANTS); } void sc_process_handle::disable(sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "disable()"); return; + } _gem5_process->disable(include_descendants == SC_INCLUDE_DESCENDANTS); } void sc_process_handle::enable(sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "enable()"); return; + } _gem5_process->enable(include_descendants == SC_INCLUDE_DESCENDANTS); } void sc_process_handle::kill(sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "kill()"); return; + } _gem5_process->kill(include_descendants == SC_INCLUDE_DESCENDANTS); } void sc_process_handle::reset(sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "reset()"); return; + } _gem5_process->reset(include_descendants == SC_INCLUDE_DESCENDANTS); } @@ -253,19 +277,23 @@ bool sc_process_handle::is_unwinding() { if (!_gem5_process) { - //TODO This should generate a systemc style warning if the handle is - //invalid. + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "is_unwinding()"); return false; - } else { - return _gem5_process->isUnwinding(); } + return _gem5_process->isUnwinding(); } const sc_event & sc_process_handle::reset_event() const { - static sc_event non_event; - return _gem5_process ? _gem5_process->resetEvent() : non_event; + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "reset()"); + static sc_event non_event; + return non_event; + } + return _gem5_process->resetEvent(); } @@ -273,8 +301,11 @@ void sc_process_handle::sync_reset_on( sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "sync_reset_on()"); return; + } _gem5_process->syncResetOn(include_descendants == SC_INCLUDE_DESCENDANTS); } @@ -282,8 +313,11 @@ void sc_process_handle::sync_reset_off( sc_descendent_inclusion_info include_descendants) { - if (!_gem5_process) + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "sync_reset_off()"); return; + } _gem5_process->syncResetOff(include_descendants == SC_INCLUDE_DESCENDANTS); } diff --git a/src/systemc/ext/core/sc_process_handle.hh b/src/systemc/ext/core/sc_process_handle.hh index 04df4728f..b9bb9a0c4 100644 --- a/src/systemc/ext/core/sc_process_handle.hh +++ b/src/systemc/ext/core/sc_process_handle.hh @@ -33,7 +33,8 @@ #include #include -#include "systemc/ext/core/sc_object.hh" +#include "../utils/sc_report_handler.hh" +#include "sc_object.hh" namespace sc_gem5 { @@ -212,6 +213,11 @@ class sc_process_handle sc_descendent_inclusion_info include_descendants= SC_NO_DESCENDANTS) { + if (!_gem5_process) { + SC_REPORT_WARNING("(W570) attempt to use an empty " + "process handle ignored", "throw_it()"); + return; + } ::sc_gem5::ExceptionWrapper exc(user_defined_exception); ::sc_gem5::throw_it_wrapper(_gem5_process, exc, include_descendants == SC_INCLUDE_DESCENDANTS); diff --git a/src/systemc/ext/utils/sc_report.hh b/src/systemc/ext/utils/sc_report.hh index 6f652ce2c..19029ec55 100644 --- a/src/systemc/ext/utils/sc_report.hh +++ b/src/systemc/ext/utils/sc_report.hh @@ -33,7 +33,7 @@ #include #include -#include "systemc/ext/core/sc_time.hh" +#include "../core/sc_time.hh" namespace sc_core {