From 3b5a960871dd5e6906366ec7b32fc057de4b163c Mon Sep 17 00:00:00 2001 From: Yu-hsin Wang Date: Wed, 17 Nov 2021 16:56:02 +0800 Subject: [PATCH] systemc: move tracefile registration into constructor The TraceFile object needs to be registered into the scheduler for triggering its trace function. For now only the TraceFile created by sc_create_vcd_trace_file is registered automatically. This design is not good for users to implement their own TraceFile class. In addition, some libraries, ex Verilator, implement thier own trace file. To bridge them into gem5, we also need the ability to create customized TraceFile class. Change-Id: I38fe510048655c6a2cd848a0a1263a66a1778eee Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/52923 Reviewed-by: Earl Ou Reviewed-by: Gabe Black Maintainer: Gabe Black Tested-by: kokoro --- src/systemc/utils/sc_trace_file.cc | 7 +------ src/systemc/utils/tracefile.cc | 6 +++++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/systemc/utils/sc_trace_file.cc b/src/systemc/utils/sc_trace_file.cc index 38161badd0..dddd8eb3ae 100644 --- a/src/systemc/utils/sc_trace_file.cc +++ b/src/systemc/utils/sc_trace_file.cc @@ -27,7 +27,6 @@ #include -#include "systemc/core/scheduler.hh" #include "systemc/ext/channel/sc_signal_in_if.hh" #include "systemc/ext/core/sc_event.hh" #include "systemc/ext/core/sc_time.hh" @@ -52,16 +51,12 @@ sc_trace_file::~sc_trace_file() {} sc_trace_file * sc_create_vcd_trace_file(const char *name) { - auto tf = new ::sc_gem5::VcdTraceFile(name); - ::sc_gem5::scheduler.registerTraceFile(tf); - return tf; + return new ::sc_gem5::VcdTraceFile(name); } void sc_close_vcd_trace_file(sc_trace_file *tf) { - ::sc_gem5::scheduler.unregisterTraceFile( - static_cast<::sc_gem5::TraceFile *>(tf)); delete tf; } diff --git a/src/systemc/utils/tracefile.cc b/src/systemc/utils/tracefile.cc index a6cf9523a5..0c54052ac9 100644 --- a/src/systemc/utils/tracefile.cc +++ b/src/systemc/utils/tracefile.cc @@ -30,6 +30,7 @@ #include #include +#include "systemc/core/scheduler.hh" #include "systemc/core/time.hh" #include "systemc/ext/core/sc_main.hh" #include "systemc/ext/core/sc_time.hh" @@ -41,10 +42,13 @@ namespace sc_gem5 TraceFile::TraceFile(const std::string &name) : _os(gem5::simout.create(name, true, true)), timeUnitTicks(0), timeUnitValue(0.0), timeUnitUnit(::sc_core::SC_PS), _traceDeltas(false) -{} +{ + ::sc_gem5::scheduler.registerTraceFile(this); +} TraceFile::~TraceFile() { + ::sc_gem5::scheduler.unregisterTraceFile(this); gem5::simout.close(_os); }