systemc: Track the module in the end_of_elaboration callback.
sc_objects constructed during that callback are considered children of the module the callback belongs to. Change-Id: I164863a10beef6d0e2c6d9c5e8f2642d80769dca Reviewed-on: https://gem5-review.googlesource.com/12076 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
@@ -64,8 +64,11 @@ void
|
||||
Kernel::init()
|
||||
{
|
||||
status(::sc_core::SC_BEFORE_END_OF_ELABORATION);
|
||||
for (auto m: sc_gem5::allModules)
|
||||
for (auto m: sc_gem5::allModules) {
|
||||
callbackModule(m);
|
||||
m->sc_mod()->before_end_of_elaboration();
|
||||
}
|
||||
callbackModule(nullptr);
|
||||
|
||||
if (stopAfterCallbacks)
|
||||
stopWork();
|
||||
|
||||
@@ -43,6 +43,8 @@ namespace
|
||||
std::list<Module *> _modules;
|
||||
Module *_new_module;
|
||||
|
||||
Module *_callbackModule = nullptr;
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
Module::Module(const char *name) : _name(name), _sc_mod(nullptr), _obj(nullptr)
|
||||
@@ -90,6 +92,9 @@ newModule()
|
||||
return _new_module;
|
||||
}
|
||||
|
||||
void callbackModule(Module *m) { _callbackModule = m; }
|
||||
Module *callbackModule() { return _callbackModule; }
|
||||
|
||||
std::set<Module *> allModules;
|
||||
|
||||
} // namespace sc_gem5
|
||||
|
||||
@@ -106,6 +106,9 @@ class Module
|
||||
Module *currentModule();
|
||||
Module *newModule();
|
||||
|
||||
void callbackModule(Module *m);
|
||||
Module *callbackModule();
|
||||
|
||||
extern std::set<Module *> allModules;
|
||||
|
||||
} // namespace sc_gem5
|
||||
|
||||
@@ -78,6 +78,8 @@ Object::Object(sc_core::sc_object *_sc_obj, const char *obj_name) :
|
||||
_basename = "object";
|
||||
|
||||
Module *p = currentModule();
|
||||
if (!p)
|
||||
p = callbackModule();
|
||||
|
||||
Module *n = newModule();
|
||||
if (n) {
|
||||
@@ -87,7 +89,7 @@ Object::Object(sc_core::sc_object *_sc_obj, const char *obj_name) :
|
||||
|
||||
if (p) {
|
||||
// We're "within" a parent module, ie we're being created while its
|
||||
// constructor is running.
|
||||
// constructor or end_of_elaboration callback is running.
|
||||
parent = p->obj()->_sc_obj;
|
||||
addObject(&parent->_gem5_object->children, _sc_obj);
|
||||
} else if (scheduler.current()) {
|
||||
|
||||
Reference in New Issue
Block a user