systemc: Refactor reporting to prep for int based messages.

There's a deprecated reporting mechanism based on integer message ids,
and the reporting mechanism needs to be refactored a bit to make it
easier to support.

Some bookkeeping data structures were moved out to somewhere they
can be accessed by other code, obviating the non-standard get_handler
function.

Change-Id: Id427cd79be9ef0f3275fbac39ff047ab672fb3e0
Reviewed-on: https://gem5-review.googlesource.com/c/13318
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
Gabe Black
2018-10-06 19:00:56 -07:00
parent 7a2ace7c5d
commit 7eb6ad4aaa
7 changed files with 218 additions and 111 deletions

View File

@@ -41,6 +41,7 @@
#include "systemc/core/scheduler.hh"
#include "systemc/ext/core/sc_main.hh"
#include "systemc/ext/utils/sc_report_handler.hh"
#include "systemc/utils/report.hh"
// A weak symbol to detect if sc_main has been defined, and if so where it is.
[[gnu::weak]] int sc_main(int argc, char *argv[]);
@@ -79,12 +80,12 @@ class ScMainFiber : public Fiber
} catch (const sc_report &r) {
// There was an exception nobody caught.
resultStr = "uncaught sc_report";
sc_report_handler::get_handler()(
sc_gem5::reportHandlerProc(
r, sc_report_handler::get_catch_actions());
} catch (...) {
// There was some other type of exception we need to wrap.
resultStr = "uncaught exception";
sc_report_handler::get_handler()(
sc_gem5::reportHandlerProc(
::sc_gem5::reportifyException(),
sc_report_handler::get_catch_actions());
}

View File

@@ -36,6 +36,7 @@
#include "systemc/ext/core/sc_main.hh"
#include "systemc/ext/utils/sc_report.hh"
#include "systemc/ext/utils/sc_report_handler.hh"
#include "systemc/utils/report.hh"
#include "systemc/utils/tracefile.hh"
namespace sc_gem5
@@ -469,8 +470,7 @@ throwingReportHandler(const ::sc_core::sc_report &r,
const ::sc_core::sc_report
reportifyException()
{
::sc_core::sc_report_handler_proc old_handler =
::sc_core::sc_report_handler::get_handler();
::sc_core::sc_report_handler_proc old_handler = reportHandlerProc;
::sc_core::sc_report_handler::set_handler(&throwingReportHandler);
try {