diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.cpp b/rpcs3/Emu/ARMv7/PSVFuncList.cpp index 5f644a6d10..d9901d8aca 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.cpp +++ b/rpcs3/Emu/ARMv7/PSVFuncList.cpp @@ -2,42 +2,36 @@ #include "Emu/System.h" #include "PSVFuncList.h" -std::vector g_psv_func_list = []() -> std::vector -{ - std::vector v; +std::vector g_psv_func_list; - psv_func unimplemented = +void add_psv_func(psv_func& data) +{ + if (!g_psv_func_list.size()) { - 0x00000000, // must not be a valid id - "INVALID FUNCTION", - new psv_func_detail::func_binder([]() -> u32 + psv_func unimplemented; + unimplemented.nid = 0x00000000; // must not be a valid id + unimplemented.name = "INVALID FUNCTION (0x0)"; + unimplemented.func.reset(new psv_func_detail::func_binder([]() -> u32 { LOG_ERROR(HLE, "Unimplemented function executed"); Emu.Pause(); return 0xffffffffu; - }), - nullptr, - }; - v.push_back(unimplemented); + })); + g_psv_func_list.push_back(unimplemented); - psv_func hle_return = - { - 0x00000001, // must not be a valid id - "INVALID FUNCTION", - new psv_func_detail::func_binder([](ARMv7Thread& CPU) + psv_func hle_return; + hle_return.nid = 0x00000001; // must not be a valid id + hle_return.name = "INVALID FUNCTION (0x1)"; + hle_return.func.reset(new psv_func_detail::func_binder([](ARMv7Thread& CPU) { CPU.FastStop(); - }), - nullptr, - }; - v.push_back(hle_return); - return v; -}(); + return; + })); + g_psv_func_list.push_back(hle_return); + } -void add_psv_func(psv_func& data) -{ g_psv_func_list.push_back(data); } diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.h b/rpcs3/Emu/ARMv7/PSVFuncList.h index 8ae8282104..998225799d 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.h +++ b/rpcs3/Emu/ARMv7/PSVFuncList.h @@ -643,10 +643,10 @@ namespace psv_func_detail struct psv_func { - const u32 nid; - const char* const name; - psv_func_caller* const func; - psv_log_base* const module; + u32 nid; + const char* name; + std::shared_ptr func; + psv_log_base* module; }; void add_psv_func(psv_func& data); @@ -654,13 +654,11 @@ void add_psv_func(psv_func& data); template void reg_psv_func(u32 nid, psv_log_base* module, const char* name, RT(*func)(T...)) { - psv_func f = - { - nid, - name, - new psv_func_detail::func_binder(func), - module - }; + psv_func f; + f.nid = nid; + f.name = name; + f.func.reset(new psv_func_detail::func_binder(func)); + f.module = module; add_psv_func(f); }