fix order of static initialization

This commit is contained in:
oltolm 2023-02-11 16:17:43 +01:00 committed by Ivan
parent de592267fe
commit b5b8f7c35a
2 changed files with 12 additions and 12 deletions

View File

@ -37,6 +37,12 @@ extern void ppu_register_function_at(u32 addr, u32 size, ppu_intrp_func_t ptr);
extern void sys_initialize_tls(ppu_thread&, u64, u32, u32, u32); extern void sys_initialize_tls(ppu_thread&, u64, u32, u32, u32);
std::unordered_map<std::string, ppu_static_module*>& ppu_module_manager::get()
{
static std::unordered_map<std::string, ppu_static_module*> s_module_map;
return s_module_map;
}
// HLE function name cache // HLE function name cache
std::vector<std::string> g_ppu_function_names; std::vector<std::string> g_ppu_function_names;
@ -82,12 +88,12 @@ void ppu_static_module::initialize()
void ppu_module_manager::register_module(ppu_static_module* _module) void ppu_module_manager::register_module(ppu_static_module* _module)
{ {
ppu_module_manager::s_module_map.emplace(_module->name, _module); ppu_module_manager::get().emplace(_module->name, _module);
} }
ppu_static_function& ppu_module_manager::access_static_function(const char* _module, u32 fnid) ppu_static_function& ppu_module_manager::access_static_function(const char* _module, u32 fnid)
{ {
auto& res = ::at32(ppu_module_manager::s_module_map, _module)->functions[fnid]; auto& res = ::at32(ppu_module_manager::get(), _module)->functions[fnid];
if (res.name) if (res.name)
{ {
@ -99,7 +105,7 @@ ppu_static_function& ppu_module_manager::access_static_function(const char* _mod
ppu_static_variable& ppu_module_manager::access_static_variable(const char* _module, u32 vnid) ppu_static_variable& ppu_module_manager::access_static_variable(const char* _module, u32 vnid)
{ {
auto& res = ::at32(ppu_module_manager::s_module_map, _module)->variables[vnid]; auto& res = ::at32(ppu_module_manager::get(), _module)->variables[vnid];
if (res.name) if (res.name)
{ {
@ -111,14 +117,14 @@ ppu_static_variable& ppu_module_manager::access_static_variable(const char* _mod
const ppu_static_module* ppu_module_manager::get_module(const std::string& name) const ppu_static_module* ppu_module_manager::get_module(const std::string& name)
{ {
const auto& map = ppu_module_manager::s_module_map; const auto& map = ppu_module_manager::get();
const auto found = map.find(name); const auto found = map.find(name);
return found != map.end() ? found->second : nullptr; return found != map.end() ? found->second : nullptr;
} }
void ppu_module_manager::initialize_modules() void ppu_module_manager::initialize_modules()
{ {
for (auto& _module : s_module_map) for (auto& _module : ppu_module_manager::get())
{ {
_module.second->initialize(); _module.second->initialize();
} }

View File

@ -163,10 +163,7 @@ public:
} }
// We need this to deal with the enumeration over all ppu_static_modules that happens in ppu_initialize_modules // We need this to deal with the enumeration over all ppu_static_modules that happens in ppu_initialize_modules
static const std::unordered_map<std::string, ppu_static_module*>& get() static std::unordered_map<std::string, ppu_static_module*>& get();
{
return s_module_map;
}
static const ppu_static_module cellAdec; static const ppu_static_module cellAdec;
static const ppu_static_module cellAtrac; static const ppu_static_module cellAtrac;
@ -279,9 +276,6 @@ public:
static const ppu_static_module sys_lv2dbg; static const ppu_static_module sys_lv2dbg;
static const ppu_static_module static_hle; static const ppu_static_module static_hle;
static const ppu_static_module hle_patches; static const ppu_static_module hle_patches;
private:
inline static std::unordered_map<std::string, ppu_static_module*> s_module_map;
}; };
template <auto* Func> template <auto* Func>