From ab5dd3ae6f1e39ad82ed67f8a9c8390a02ed7c86 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 21 Jan 2015 02:41:56 +0300 Subject: [PATCH] Another attempt --- rpcs3/Emu/ARMv7/PSVFuncList.cpp | 54 ++++++++++++++++----------------- rpcs3/Emu/ARMv7/PSVFuncList.h | 8 ++++- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.cpp b/rpcs3/Emu/ARMv7/PSVFuncList.cpp index a40457aef3..271cdef08c 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.cpp +++ b/rpcs3/Emu/ARMv7/PSVFuncList.cpp @@ -9,29 +9,6 @@ std::vector g_psv_func_list; void add_psv_func(psv_func& data) { - // setup special functions (without NIDs) - if (!g_psv_func_list.size()) - { - psv_func unimplemented; - unimplemented.nid = 0; - unimplemented.name = "Special function (unimplemented stub)"; - unimplemented.func.reset(new psv_func_detail::func_binder([](ARMv7Context& context) - { - context.thread.m_last_syscall = vm::psv::read32(context.thread.PC + 4); - throw "Unimplemented function executed"; - })); - g_psv_func_list.push_back(unimplemented); - - psv_func hle_return; - hle_return.nid = 1; - hle_return.name = "Special function (return from HLE)"; - hle_return.func.reset(new psv_func_detail::func_binder([](ARMv7Context& context) - { - context.thread.FastStop(); - })); - g_psv_func_list.push_back(hle_return); - } - g_psv_func_list.push_back(data); } @@ -76,8 +53,31 @@ extern psv_log_base sceLibKernel; void list_known_psv_modules() { - sceLibc.Log(""); - sceLibm.Log(""); - sceLibstdcxx.Log(""); - sceLibKernel.Log(""); + if (!g_psv_func_list.size()) + { + // setup special functions (without NIDs) + psv_func unimplemented; + unimplemented.nid = 0; + unimplemented.name = "Special function (unimplemented stub)"; + unimplemented.func.reset(new psv_func_detail::func_binder([](ARMv7Context& context) + { + context.thread.m_last_syscall = vm::psv::read32(context.thread.PC + 4); + throw "Unimplemented function executed"; + })); + g_psv_func_list.push_back(unimplemented); + + psv_func hle_return; + hle_return.nid = 1; + hle_return.name = "Special function (return from HLE)"; + hle_return.func.reset(new psv_func_detail::func_binder([](ARMv7Context& context) + { + context.thread.FastStop(); + })); + g_psv_func_list.push_back(hle_return); + + sceLibc.Init(); + sceLibm.Init(); + sceLibstdcxx.Init(); + sceLibKernel.Init(); + } } diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.h b/rpcs3/Emu/ARMv7/PSVFuncList.h index 8a26743b6d..2562670c08 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.h +++ b/rpcs3/Emu/ARMv7/PSVFuncList.h @@ -5,12 +5,18 @@ class psv_log_base : public LogBase { std::string m_name; + void(*m_init_func)(); public: psv_log_base(const std::string& name, void(*init_func)()) : m_name(name) + , m_init_func(init_func) { - init_func(); + } + + void Init() + { + m_init_func(); } virtual const std::string& GetName() const override