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:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user