Merge pull request #981 from Nekotekina/master

ARMv7 progress, some changes in vm_ptr
This commit is contained in:
B1ackDaemon 2015-01-29 01:57:42 +02:00
commit 1fa301b719
59 changed files with 3750 additions and 368 deletions

View File

@ -708,7 +708,7 @@ class to_be_t
public:
//true if need swap endianes for be
static const bool value = (sizeof(T2) > 1) && (std::is_arithmetic<T>::value || std::is_enum<T>::value);
static const bool value = std::is_arithmetic<T>::value || std::is_enum<T>::value;
//be_t<T, size> if need swap endianes, T otherwise
typedef typename _be_type_selector< T, T2, value >::type type;
@ -716,26 +716,58 @@ public:
typedef typename _be_type_selector< T, T2, !is_be_t<T, T2>::value >::type forced_type;
};
template<typename T, typename T2>
class to_be_t<T, const T2>
{
public:
static const bool value = to_be_t<T, T2>::value;
typedef const typename to_be_t<T, T2>::type type;
typedef const typename to_be_t<T, T2>::forced_type forced_type;
};
template<typename T>
class to_be_t<T, void>
{
public:
//true if need swap endianes for be
static const bool value = false;
//be_t<T, size> if need swap endianes, T otherwise
typedef void type;
typedef void forced_type;
};
template<typename T>
class to_be_t<T, const void>
class to_be_t<T, u8>
{
public:
//true if need swap endianes for be
static const bool value = false;
typedef u8 type;
typedef u8 forced_type;
};
//be_t<T, size> if need swap endianes, T otherwise
typedef const void type;
template<typename T>
class to_be_t<T, s8>
{
public:
static const bool value = false;
typedef s8 type;
typedef s8 forced_type;
};
template<typename T>
class to_be_t<T, char>
{
public:
static const bool value = false;
typedef char type;
typedef char forced_type;
};
template<typename T>
class to_be_t<T, bool>
{
public:
static const bool value = false;
typedef bool type;
typedef bool forced_type;
};
template<typename T, typename T2 = T>

View File

@ -5,7 +5,7 @@
namespace vm
{
template<typename AT, typename RT, typename... T>
__forceinline RT _ptr_base<RT(*)(T...), 1, AT>::operator()(ARMv7Context& context, T... args) const
__forceinline RT _ptr_base<RT(T...), 1, AT>::operator()(ARMv7Context& context, T... args) const
{
return psv_func_detail::func_caller<RT, T...>::call(context, vm::cast(this->addr()), args...);
}
@ -15,4 +15,4 @@ template<typename RT, typename... T>
__forceinline RT cb_call(ARMv7Context& context, u32 addr, T... args)
{
return psv_func_detail::func_caller<RT, T...>::call(context, addr, args...);
}
}

View File

@ -79,20 +79,26 @@ struct ARMv7Context
{
struct
{
u8 cond : 3;
u8 state : 5;
u8 shift_state : 5;
u8 cond_base : 3;
};
struct
{
u8 check_state : 4;
u8 condition : 4;
};
u8 IT;
u32 advance()
{
const u32 res = (state & 0xf) ? (cond << 1 | state >> 4) : 0xe /* true */;
const u32 res = check_state ? condition : 0xe /* always true */;
state <<= 1;
if ((state & 0xf) == 0) // if no d
shift_state <<= 1;
if (!check_state)
{
IT = 0; // clear ITSTATE
IT = 0; // clear
}
return res;
@ -100,7 +106,7 @@ struct ARMv7Context
operator bool() const
{
return (state & 0xf) != 0;
return check_state;
}
} ITSTATE;
@ -260,7 +266,7 @@ struct cast_armv7_gpr<bool, false>
return value;
}
__forceinline static bool from_gpr(const u32 reg)
__forceinline static bool from_gpr(const u32& reg)
{
return reinterpret_cast<const bool&>(reg);
}

View File

@ -44,20 +44,20 @@ const ARMv7_opcode_t ARMv7_opcode_table[] =
ARMv7_OP2(0xfe00, 0x1c00, T1, ADD_IMM),
ARMv7_OP2(0xf800, 0x3000, T2, ADD_IMM),
ARMv7_OP4(0xfbe0, 0x8000, 0xf100, 0x0000, T3, ADD_IMM, SKIP_IF( (BF(8, 11) == 15 && BT(20)) || BF(16, 19) == 13 )),
ARMv7_OP4(0xfbf0, 0x8000, 0xf200, 0x0000, T4, ADD_IMM),
ARMv7_OP4(0xfbf0, 0x8000, 0xf200, 0x0000, T4, ADD_IMM, SKIP_IF( (BF(16, 19) & 13) == 13 )),
ARMv7_OP4(0x0fe0, 0x0000, 0x0280, 0x0000, A1, ADD_IMM),
ARMv7_OP2(0xfe00, 0x1800, T1, ADD_REG),
ARMv7_OP2(0xff00, 0x4400, T2, ADD_REG, SKIP_IF( (c & 0x87) == 0x85 || BF(3, 6) == 13 )),
ARMv7_OP4(0xffe0, 0x8000, 0xeb00, 0x0000, T3, ADD_REG),
ARMv7_OP4(0xffe0, 0x8000, 0xeb00, 0x0000, T3, ADD_REG, SKIP_IF( (BF(8, 11) == 15 && BT(20)) || BF(16, 19) == 13 )),
ARMv7_OP4(0x0fe0, 0x0010, 0x0080, 0x0000, A1, ADD_REG),
ARMv7_OP4(0x0fe0, 0x0090, 0x0080, 0x0010, A1, ADD_RSR),
ARMv7_OP2(0xf800, 0xa800, T1, ADD_SPI),
ARMv7_OP2(0xff80, 0xb000, T2, ADD_SPI),
ARMv7_OP4(0xfbef, 0x8000, 0xf10d, 0x0000, T3, ADD_SPI),
ARMv7_OP4(0xfbef, 0x8000, 0xf10d, 0x0000, T3, ADD_SPI, SKIP_IF( BF(8, 11) == 15 && BT(20) )),
ARMv7_OP4(0xfbff, 0x8000, 0xf20d, 0x0000, T4, ADD_SPI),
ARMv7_OP4(0x0fef, 0x0000, 0x028d, 0x0000, A1, ADD_SPI),
ARMv7_OP2(0xff78, 0x4468, T1, ADD_SPR),
ARMv7_OP2(0xff87, 0x4485, T2, ADD_SPR),
ARMv7_OP2(0xff87, 0x4485, T2, ADD_SPR, SKIP_IF( BF(3, 6) == 13 )),
ARMv7_OP4(0xffef, 0x8000, 0xeb0d, 0x0000, T3, ADD_SPR),
ARMv7_OP4(0x0fef, 0x0010, 0x008d, 0x0000, A1, ADD_SPR),
@ -140,7 +140,7 @@ const ARMv7_opcode_t ARMv7_opcode_table[] =
ARMv7_OP4(0x0fe0, 0x0010, 0x0020, 0x0000, A1, EOR_REG),
ARMv7_OP4(0x0fe0, 0x0090, 0x0020, 0x0010, A1, EOR_RSR),
ARMv7_OP2(0xff00, 0xbf00, T1, IT),
ARMv7_OP2(0xff00, 0xbf00, T1, IT, SKIP_IF( BF(0, 3) == 0 )),
ARMv7_OP2(0xf800, 0xc800, T1, LDM),
ARMv7_OP4(0xffd0, 0x2000, 0xe890, 0x0000, T2, LDM),
@ -1208,10 +1208,14 @@ void armv7_decoder_initialize(u32 addr, u32 end_addr, bool dump)
{
LOG_ERROR(ARMv7, "Unknown instruction found at address 0x%08x: %04x %04x", addr, code.code1, code.code0);
addr += 4;
continue;
}
else
// Proceed with found:
if (dump)
{
if (dump) if (found->length == 2)
if (found->length == 2)
{
LOG_NOTICE(ARMv7, "0x%08x: %04x %s", addr, code.code0, found->name);
}
@ -1219,34 +1223,39 @@ void armv7_decoder_initialize(u32 addr, u32 end_addr, bool dump)
{
LOG_NOTICE(ARMv7, "0x%08x: %04x %04x %s", addr, code.code1, code.code0, found->name);
}
}
if (found->func == ARMv7_instrs::BLX && found->type == T2)
if (found->func == ARMv7_instrs::BLX && found->type == T2)
{
const u32 s = (code.data >> 26) & 0x1;
const u32 i1 = (code.data >> 13) & 0x1 ^ s ^ 1;
const u32 i2 = (code.data >> 11) & 0x1 ^ s ^ 1;
const u32 target = (addr + 4 & ~3) + sign<25, u32>(s << 24 | i2 << 23 | i1 << 22 | (code.data & 0x3ff0000) >> 4 | (code.data & 0x7ff) << 1);
// possibly a call to imported function:
if (target >= end_addr && ((target - end_addr) % 16) == 0 && vm::psv::read16(target) == 0xf870)
{
const u32 s = (code.data >> 26) & 0x1;
const u32 i1 = (code.data >> 13) & 0x1 ^ s ^ 1;
const u32 i2 = (code.data >> 11) & 0x1 ^ s ^ 1;
const u32 target = (addr + 4 & ~3) + sign<25, u32>(s << 24 | i2 << 23 | i1 << 22 | (code.data & 0x3ff0000) >> 4 | (code.data & 0x7ff) << 1);
const u32 instr = vm::psv::read32(target);
// possibly a call to imported function:
if (target >= end_addr && ((target - end_addr) % 16) == 0 && vm::psv::read16(target) == 0xf870)
// check if not "unimplemented"
if (instr >> 16)
{
const u32 instr = vm::psv::read32(target);
// check if not "unimplemented"
if (instr >> 16)
{
// replace BLX with "hack" instruction directly, it can help to see where it was called from
vm::psv::write32(addr, instr);
}
}
else
{
LOG_ERROR(ARMv7, "Unrecognized BLX call found at adddress 0x%08x (target=0x%08x)", addr, target);
// replace BLX with "hack" instruction directly, it can help to see where it was called from
vm::psv::write32(addr, instr);
}
}
addr += found->length;
else
{
LOG_ERROR(ARMv7, "Unrecognized BLX call found at adddress 0x%08x (target=0x%08x)", addr, target);
}
}
//if (found->func == ARMv7_instrs::IT)
//{
// LOG_ERROR(ARMv7, "IT instruction found at address 0x%08x", addr);
//}
addr += found->length;
}
while (vm::psv::read16(addr) == 0xf870)

View File

@ -965,7 +965,7 @@ void ARMv7_instrs::BLX(ARMv7Context& context, const ARMv7Code code, const ARMv7_
}
case A2:
{
cond = 15;
cond = 0xe; // always true
newLR = (context.thread.PC + 4) - 4;
target = (context.thread.PC + 4 | 1) + sign<25, u32>((code.data & 0xffffff) << 2 | (code.data & 0x1000000) >> 23);
break;
@ -1355,6 +1355,7 @@ void ARMv7_instrs::LDR_IMM(ARMv7Context& context, const ARMv7Code code, const AR
reject((wback && n == t) || (t == 15 && context.ITSTATE), "UNPREDICTABLE");
break;
}
case A1: throw __FUNCTION__;
default: throw __FUNCTION__;
}
@ -1441,11 +1442,70 @@ void ARMv7_instrs::LDR_REG(ARMv7Context& context, const ARMv7Code code, const AR
void ARMv7_instrs::LDRB_IMM(ARMv7Context& context, const ARMv7Code code, const ARMv7_encoding type)
{
u32 cond, t, n, imm32;
bool index, add, wback;
switch (type)
{
case T1:
{
cond = context.ITSTATE.advance();
t = (code.data & 0x7);
n = (code.data & 0x38) >> 3;
imm32 = (code.data & 0x7c0) >> 4;
index = true;
add = true;
wback = false;
break;
}
case T2:
{
cond = context.ITSTATE.advance();
t = (code.data & 0xf000) >> 12;
n = (code.data & 0xf0000) >> 16;
imm32 = (code.data & 0xfff);
index = true;
add = true;
wback = false;
reject(t == 15, "PLD");
reject(n == 15, "LDRB (literal)");
reject(t == 13, "UNPREDICTABLE");
break;
}
case T3:
{
cond = context.ITSTATE.advance();
t = (code.data & 0xf000) >> 12;
n = (code.data & 0xf0000) >> 16;
imm32 = (code.data & 0xff);
index = (code.data & 0x400);
add = (code.data & 0x200);
wback = (code.data & 0x100);
reject(t == 15 && index && !add && !wback, "PLD");
reject(n == 15, "LDRB (literal)");
reject(index && add && !wback, "LDRBT");
reject(!index && !wback, "UNDEFINED");
reject(t == 13 || t == 15 || (wback && n == t), "UNPREDICTABLE");
break;
}
case A1: throw __FUNCTION__;
default: throw __FUNCTION__;
}
if (ConditionPassed(context, cond))
{
const u32 offset_addr = add ? context.read_gpr(n) + imm32 : context.read_gpr(n) - imm32;
const u32 addr = index ? offset_addr : context.read_gpr(n);
context.write_gpr(t, vm::psv::read8(addr));
if (wback)
{
context.write_gpr(n, offset_addr);
}
}
}
void ARMv7_instrs::LDRB_LIT(ARMv7Context& context, const ARMv7Code code, const ARMv7_encoding type)
@ -1871,7 +1931,7 @@ void ARMv7_instrs::MOV_REG(ARMv7Context& context, const ARMv7Code code, const AR
}
case T2:
{
cond = 15;
cond = 0xe; // always true
d = (code.data & 0x7);
m = (code.data & 0x38) >> 3;
set_flags = true;
@ -2999,11 +3059,67 @@ void ARMv7_instrs::STR_REG(ARMv7Context& context, const ARMv7Code code, const AR
void ARMv7_instrs::STRB_IMM(ARMv7Context& context, const ARMv7Code code, const ARMv7_encoding type)
{
u32 cond, t, n, imm32;
bool index, add, wback;
switch (type)
{
case T1:
{
cond = context.ITSTATE.advance();
t = (code.data & 0x7);
n = (code.data & 0x38) >> 3;
imm32 = (code.data & 0x7c0) >> 4;
index = true;
add = true;
wback = false;
break;
}
case T2:
{
cond = context.ITSTATE.advance();
t = (code.data & 0xf000) >> 12;
n = (code.data & 0xf0000) >> 16;
imm32 = (code.data & 0xfff);
index = true;
add = true;
wback = false;
reject(n == 15, "UNDEFINED");
reject(t == 13 || t == 15, "UNPREDICTABLE");
break;
}
case T3:
{
cond = context.ITSTATE.advance();
t = (code.data & 0xf000) >> 12;
n = (code.data & 0xf0000) >> 16;
imm32 = (code.data & 0xff);
index = (code.data & 0x400);
add = (code.data & 0x200);
wback = (code.data & 0x100);
reject(index && add && !wback, "STRBT");
reject(n == 15 || (!index && !wback), "UNDEFINED");
reject(t == 13 || t == 15 || (wback && n == t), "UNPREDICTABLE");
break;
}
case A1: throw __FUNCTION__;
default: throw __FUNCTION__;
}
if (ConditionPassed(context, cond))
{
const u32 offset_addr = add ? context.read_gpr(n) + imm32 : context.read_gpr(n) - imm32;
const u32 addr = index ? offset_addr : context.read_gpr(n);
vm::psv::write8(addr, (u8)context.read_gpr(t));
if (wback)
{
context.write_gpr(n, offset_addr);
}
}
}
void ARMv7_instrs::STRB_REG(ARMv7Context& context, const ARMv7Code code, const ARMv7_encoding type)

View File

@ -0,0 +1,13 @@
#include "stdafx.h"
#include "Emu/Memory/Memory.h"
#include "Emu/ARMv7/PSVFuncList.h"
#include "Emu/ARMv7/PSVObjectList.h"
#include "sceLibKernel.h"
#include "psv_event_flag.h"
psv_event_flag_t::psv_event_flag_t(const char* name, u32 attr, u32 pattern)
: attr(attr)
, pattern(pattern)
{
strcpy_trunc(this->name, name);
}

View File

@ -0,0 +1,21 @@
#pragma once
struct psv_event_flag_t
{
char name[32];
u32 attr;
u32 pattern;
private:
psv_event_flag_t() = delete;
psv_event_flag_t(const psv_event_flag_t&) = delete;
psv_event_flag_t(psv_event_flag_t&&) = delete;
psv_event_flag_t& operator =(const psv_event_flag_t&) = delete;
psv_event_flag_t& operator =(psv_event_flag_t&&) = delete;
public:
psv_event_flag_t(const char* name, u32 attr, u32 pattern);
};
extern psv_object_list_t<psv_event_flag_t, SCE_KERNEL_THREADMGR_UID_CLASS_EVENT_FLAG> g_psv_ef_list;

View File

@ -0,0 +1,14 @@
#include "stdafx.h"
#include "Emu/Memory/Memory.h"
#include "Emu/ARMv7/PSVFuncList.h"
#include "Emu/ARMv7/PSVObjectList.h"
#include "sceLibKernel.h"
#include "psv_sema.h"
psv_sema_t::psv_sema_t(const char* name, u32 attr, s32 init_value, s32 max_value)
: attr(attr)
, value(init_value)
, max(max_value)
{
strcpy_trunc(this->name, name);
}

View File

@ -0,0 +1,23 @@
#pragma once
struct psv_sema_t
{
char name[32];
u32 attr;
s32 value;
s32 max;
private:
psv_sema_t() = delete;
psv_sema_t(const psv_sema_t&) = delete;
psv_sema_t(psv_sema_t&&) = delete;
psv_sema_t& operator =(const psv_sema_t&) = delete;
psv_sema_t& operator =(psv_sema_t&&) = delete;
public:
psv_sema_t(const char* name, u32 attr, s32 init_value, s32 max_value);
};
extern psv_object_list_t<psv_sema_t, SCE_KERNEL_THREADMGR_UID_CLASS_SEMA> g_psv_sema_list;

View File

@ -0,0 +1,85 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/ARMv7/PSVFuncList.h"
extern psv_log_base sceCtrl;
struct SceCtrlData
{
u64 timeStamp;
u32 buttons;
u8 lx;
u8 ly;
u8 rx;
u8 ry;
u8 rsrv[16];
};
struct SceCtrlRapidFireRule
{
u32 uiMask;
u32 uiTrigger;
u32 uiTarget;
u32 uiDelay;
u32 uiMake;
u32 uiBreak;
};
s32 sceCtrlSetSamplingMode(u32 uiMode)
{
throw __FUNCTION__;
}
s32 sceCtrlGetSamplingMode(vm::psv::ptr<u32> puiMode)
{
throw __FUNCTION__;
}
s32 sceCtrlPeekBufferPositive(s32 port, vm::psv::ptr<SceCtrlData> pData, s32 nBufs)
{
throw __FUNCTION__;
}
s32 sceCtrlPeekBufferNegative(s32 port, vm::psv::ptr<SceCtrlData> pData, s32 nBufs)
{
throw __FUNCTION__;
}
s32 sceCtrlReadBufferPositive(s32 port, vm::psv::ptr<SceCtrlData> pData, s32 nBufs)
{
throw __FUNCTION__;
}
s32 sceCtrlReadBufferNegative(s32 port, vm::psv::ptr<SceCtrlData> pData, s32 nBufs)
{
throw __FUNCTION__;
}
s32 sceCtrlSetRapidFire(s32 port, s32 idx, vm::psv::ptr<const SceCtrlRapidFireRule> pRule)
{
throw __FUNCTION__;
}
s32 sceCtrlClearRapidFire(s32 port, s32 idx)
{
throw __FUNCTION__;
}
#define REG_FUNC(nid, name) reg_psv_func(nid, &sceCtrl, #name, name)
psv_log_base sceCtrl("SceCtrl", []()
{
sceCtrl.on_load = nullptr;
sceCtrl.on_unload = nullptr;
sceCtrl.on_stop = nullptr;
REG_FUNC(0xA497B150, sceCtrlSetSamplingMode);
REG_FUNC(0xEC752AAF, sceCtrlGetSamplingMode);
REG_FUNC(0xA9C3CED6, sceCtrlPeekBufferPositive);
REG_FUNC(0x104ED1A7, sceCtrlPeekBufferNegative);
REG_FUNC(0x67E7AB83, sceCtrlReadBufferPositive);
REG_FUNC(0x15F96FB0, sceCtrlReadBufferNegative);
REG_FUNC(0xE9CB69C8, sceCtrlSetRapidFire);
REG_FUNC(0xD8294C9C, sceCtrlClearRapidFire);
});

View File

@ -0,0 +1,48 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/ARMv7/PSVFuncList.h"
extern psv_log_base sceDeci4p;
typedef s32(*SceKernelDeci4pCallback)(s32 notifyId, s32 notifyCount, s32 notifyArg, vm::psv::ptr<void> pCommon);
s32 sceKernelDeci4pOpen(vm::psv::ptr<const char> protoname, u32 protonum, u32 bufsize)
{
throw __FUNCTION__;
}
s32 sceKernelDeci4pClose(s32 socketid)
{
throw __FUNCTION__;
}
s32 sceKernelDeci4pRead(s32 socketid, vm::psv::ptr<void> buffer, u32 size, u32 reserved)
{
throw __FUNCTION__;
}
s32 sceKernelDeci4pWrite(s32 socketid, vm::psv::ptr<const void> buffer, u32 size, u32 reserved)
{
throw __FUNCTION__;
}
s32 sceKernelDeci4pRegisterCallback(s32 socketid, s32 cbid)
{
throw __FUNCTION__;
}
#define REG_FUNC(nid, name) reg_psv_func(nid, &sceDeci4p, #name, name)
psv_log_base sceDeci4p("SceDeci4pUserp", []()
{
sceDeci4p.on_load = nullptr;
sceDeci4p.on_unload = nullptr;
sceDeci4p.on_stop = nullptr;
REG_FUNC(0x28578FE8, sceKernelDeci4pOpen);
REG_FUNC(0x63B0C50F, sceKernelDeci4pClose);
REG_FUNC(0x971E1C66, sceKernelDeci4pRead);
REG_FUNC(0xCDA3AAAC, sceKernelDeci4pWrite);
REG_FUNC(0x73371F35, sceKernelDeci4pRegisterCallback);
});

View File

@ -0,0 +1,113 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/ARMv7/PSVFuncList.h"
extern psv_log_base sceDisplay;
struct SceDisplayFrameBuf
{
u32 size;
vm::psv::ptr<void> base;
u32 pitch;
u32 pixelformat;
u32 width;
u32 height;
};
s32 sceDisplayGetRefreshRate(vm::psv::ptr<float> pFps)
{
throw __FUNCTION__;
}
s32 sceDisplaySetFrameBuf(vm::psv::ptr<const SceDisplayFrameBuf> pFrameBuf, s32 iUpdateTimingMode)
{
throw __FUNCTION__;
}
s32 sceDisplayGetFrameBuf(vm::psv::ptr<SceDisplayFrameBuf> pFrameBuf, s32 iUpdateTimingMode)
{
throw __FUNCTION__;
}
s32 sceDisplayGetVcount()
{
throw __FUNCTION__;
}
s32 sceDisplayWaitVblankStart()
{
throw __FUNCTION__;
}
s32 sceDisplayWaitVblankStartCB()
{
throw __FUNCTION__;
}
s32 sceDisplayWaitVblankStartMulti(u32 vcount)
{
throw __FUNCTION__;
}
s32 sceDisplayWaitVblankStartMultiCB(u32 vcount)
{
throw __FUNCTION__;
}
s32 sceDisplayWaitSetFrameBuf()
{
throw __FUNCTION__;
}
s32 sceDisplayWaitSetFrameBufCB()
{
throw __FUNCTION__;
}
s32 sceDisplayWaitSetFrameBufMulti(u32 vcount)
{
throw __FUNCTION__;
}
s32 sceDisplayWaitSetFrameBufMultiCB(u32 vcount)
{
throw __FUNCTION__;
}
s32 sceDisplayRegisterVblankStartCallback(s32 uid)
{
throw __FUNCTION__;
}
s32 sceDisplayUnregisterVblankStartCallback(s32 uid)
{
throw __FUNCTION__;
}
#define REG_FUNC(nid, name) reg_psv_func(nid, &sceDisplay, #name, name)
psv_log_base sceDisplay("SceDisplay", []()
{
sceDisplay.on_load = nullptr;
sceDisplay.on_unload = nullptr;
sceDisplay.on_stop = nullptr;
// SceDisplayUser
REG_FUNC(0x7A410B64, sceDisplaySetFrameBuf);
REG_FUNC(0x42AE6BBC, sceDisplayGetFrameBuf);
// SceDisplay
REG_FUNC(0xA08CA60D, sceDisplayGetRefreshRate);
REG_FUNC(0xB6FDE0BA, sceDisplayGetVcount);
REG_FUNC(0x5795E898, sceDisplayWaitVblankStart);
REG_FUNC(0x78B41B92, sceDisplayWaitVblankStartCB);
REG_FUNC(0xDD0A13B8, sceDisplayWaitVblankStartMulti);
REG_FUNC(0x05F27764, sceDisplayWaitVblankStartMultiCB);
REG_FUNC(0x9423560C, sceDisplayWaitSetFrameBuf);
REG_FUNC(0x814C90AF, sceDisplayWaitSetFrameBufCB);
REG_FUNC(0x7D9864A8, sceDisplayWaitSetFrameBufMulti);
REG_FUNC(0x3E796EF5, sceDisplayWaitSetFrameBufMultiCB);
REG_FUNC(0x6BDF4C4D, sceDisplayRegisterVblankStartCallback);
REG_FUNC(0x98436A80, sceDisplayUnregisterVblankStartCallback);
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,15 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/ARMv7/PSVFuncList.h"
#include "Emu/ARMv7/PSVObjectList.h"
#include "Emu/CPU/CPUThreadManager.h"
#include "Emu/SysCalls/Callback.h"
#include "Emu/ARMv7/ARMv7Thread.h"
#include "sceLibKernel.h"
#include "psv_sema.h"
#include "psv_event_flag.h"
#define RETURN_ERROR(code) { Emu.Pause(); sceLibKernel.Error("%s() failed: %s", __FUNCTION__, #code); return code; }
@ -391,7 +394,13 @@ s32 sceKernelWaitMultipleEventsCB(vm::psv::ptr<SceKernelWaitEvent> pWaitEventLis
s32 sceKernelCreateEventFlag(vm::psv::ptr<const char> pName, u32 attr, u32 initPattern, vm::psv::ptr<const SceKernelEventFlagOptParam> pOptParam)
{
throw __FUNCTION__;
sceLibKernel.Error("sceKernelCreateEventFlag(pName=0x%x, attr=0x%x, initPattern=0x%x, pOptParam=0x%x)", pName, attr, initPattern, pOptParam);
std::shared_ptr<psv_event_flag_t> ef(new psv_event_flag_t(pName.get_ptr(), attr, initPattern));
const s32 id = g_psv_ef_list.add(ef);
return id;
}
s32 sceKernelDeleteEventFlag(s32 evfId)
@ -450,12 +459,23 @@ s32 sceKernelCreateSema(vm::psv::ptr<const char> pName, u32 attr, s32 initCount,
{
sceLibKernel.Error("sceKernelCreateSema(pName=0x%x, attr=0x%x, initCount=%d, maxCount=%d, pOptParam=0x%x)", pName, attr, initCount, maxCount, pOptParam);
throw __FUNCTION__;
std::shared_ptr<psv_sema_t> sema(new psv_sema_t(pName.get_ptr(), attr, initCount, maxCount));
const s32 id = g_psv_sema_list.add(sema);
return id;
}
s32 sceKernelDeleteSema(s32 semaId)
{
throw __FUNCTION__;
sceLibKernel.Error("sceKernelDeleteSema(semaId=0x%x)", semaId);
if (!g_psv_sema_list.remove(semaId))
{
RETURN_ERROR(SCE_KERNEL_ERROR_INVALID_UID);
}
throw SCE_OK;
}
s32 sceKernelOpenSema(vm::psv::ptr<const char> pName)
@ -970,7 +990,7 @@ psv_log_base sceLibKernel("sceLibKernel", []()
// REG_FUNC(???, sceKernelGetEventInfo);
//REG_FUNC(0x23EAA62, sceKernelPuts);
//REG_FUNC(0x023EAA62, sceKernelPuts);
//REG_FUNC(0xB0335388, sceClibToupper);
//REG_FUNC(0x4C5471BC, sceClibTolower);
//REG_FUNC(0xD8EBBB7E, sceClibLookCtypeTable);
@ -1027,11 +1047,11 @@ psv_log_base sceLibKernel("sceLibKernel", []()
//REG_FUNC(0x4AE9C8E6, sceKernelAtomicGetAndSub64);
//REG_FUNC(0x99E1796E, sceKernelAtomicSubAndGet8);
//REG_FUNC(0xC26BBBB1, sceKernelAtomicSubAndGet16);
//REG_FUNC(0x1C9CD92, sceKernelAtomicSubAndGet32);
//REG_FUNC(0x01C9CD92, sceKernelAtomicSubAndGet32);
//REG_FUNC(0x9BB4A94B, sceKernelAtomicSubAndGet64);
//REG_FUNC(0x53DCA02B, sceKernelAtomicGetAndAnd8);
//REG_FUNC(0x7A0CB056, sceKernelAtomicGetAndAnd16);
//REG_FUNC(0x8266595, sceKernelAtomicGetAndAnd32);
//REG_FUNC(0x08266595, sceKernelAtomicGetAndAnd32);
//REG_FUNC(0x4828BC43, sceKernelAtomicGetAndAnd64);
//REG_FUNC(0x86B9170F, sceKernelAtomicAndAndGet8);
//REG_FUNC(0xF9890F7E, sceKernelAtomicAndAndGet16);
@ -1083,9 +1103,9 @@ psv_log_base sceLibKernel("sceLibKernel", []()
//REG_FUNC(0x4C7AD128, sceKernelPowerLock);
//REG_FUNC(0xAF8E9C11, sceKernelPowerUnlock);
//REG_FUNC(0xB295EB61, sceKernelGetTLSAddr);
REG_FUNC(0xFB972F9, sceKernelGetThreadId);
REG_FUNC(0x0FB972F9, sceKernelGetThreadId);
REG_FUNC(0xA37A6057, sceKernelGetCurrentThreadVfpException);
//REG_FUNC(0xCA71EA2, sceKernelSendMsgPipe);
//REG_FUNC(0x0CA71EA2, sceKernelSendMsgPipe);
//REG_FUNC(0xA5CA74AC, sceKernelSendMsgPipeCB);
//REG_FUNC(0xDFC670E0, sceKernelTrySendMsgPipe);
//REG_FUNC(0x4E81DD5C, sceKernelReceiveMsgPipe);
@ -1143,7 +1163,7 @@ psv_log_base sceLibKernel("sceLibKernel", []()
REG_FUNC(0xC08F5BC5, sceKernelDeleteSema);
REG_FUNC(0xB028AB78, sceKernelOpenSema);
REG_FUNC(0x817707AB, sceKernelCloseSema);
REG_FUNC(0xC7B834B, sceKernelWaitSema);
REG_FUNC(0x0C7B834B, sceKernelWaitSema);
REG_FUNC(0x174692B4, sceKernelWaitSemaCB);
REG_FUNC(0x66D6BF05, sceKernelCancelSema);
REG_FUNC(0x595D3FA6, sceKernelGetSemaInfo);
@ -1168,8 +1188,8 @@ psv_log_base sceLibKernel("sceLibKernel", []()
REG_FUNC(0x6864DCE2, sceKernelGetCondInfo);
REG_FUNC(0x10A4976F, sceKernelSignalCond);
REG_FUNC(0x2EB86929, sceKernelSignalCondAll);
REG_FUNC(0x87629E6, sceKernelSignalCondTo);
//REG_FUNC(0xA10C1C8, sceKernelCreateMsgPipe);
REG_FUNC(0x087629E6, sceKernelSignalCondTo);
//REG_FUNC(0x0A10C1C8, sceKernelCreateMsgPipe);
//REG_FUNC(0x69F6575D, sceKernelDeleteMsgPipe);
//REG_FUNC(0x230691DA, sceKernelOpenMsgPipe);
//REG_FUNC(0x7E5C0C16, sceKernelCloseMsgPipe);
@ -1198,7 +1218,7 @@ psv_log_base sceLibKernel("sceLibKernel", []()
REG_FUNC(0x2F3D35A3, sceKernelOpenTimer);
REG_FUNC(0x17283DE6, sceKernelCloseTimer);
REG_FUNC(0x1478249B, sceKernelStartTimer);
REG_FUNC(0x75B1329, sceKernelStopTimer);
REG_FUNC(0x075B1329, sceKernelStopTimer);
REG_FUNC(0x1F59E04D, sceKernelGetTimerBase);
REG_FUNC(0x3223CCD1, sceKernelGetTimerBaseWide);
REG_FUNC(0x381DC300, sceKernelGetTimerTime);
@ -1221,7 +1241,7 @@ psv_log_base sceLibKernel("sceLibKernel", []()
REG_FUNC(0x597D4607, sceKernelTryLockWriteRWLock);
REG_FUNC(0xD9369DF2, sceKernelUnlockWriteRWLock);
REG_FUNC(0x190CA94B, sceKernelCancelRWLock);
REG_FUNC(0x79A573B, sceKernelGetRWLockInfo);
REG_FUNC(0x079A573B, sceKernelGetRWLockInfo);
REG_FUNC(0x8AF15B5F, sceKernelGetSystemTime);
//REG_FUNC(0x99B2BF15, sceKernelPMonThreadGetCounter);
//REG_FUNC(0x7C21C961, sceKernelPMonCpuGetCounter);
@ -1245,14 +1265,14 @@ psv_log_base sceLibKernel("sceLibKernel", []()
REG_FUNC(0xBCA5B623, sceIoGetstat);
REG_FUNC(0x29482F7F, sceIoChstat);
REG_FUNC(0x98ACED6D, sceIoSync);
REG_FUNC(0x4B30CB2, sceIoDevctl);
REG_FUNC(0x04B30CB2, sceIoDevctl);
REG_FUNC(0x54ABACFA, sceIoIoctl);
//REG_FUNC(0x6A7EA9FD, sceIoOpenAsync);
//REG_FUNC(0x84201C9B, sceIoCloseAsync);
//REG_FUNC(0x7B3BE857, sceIoReadAsync);
//REG_FUNC(0x21329B20, sceIoWriteAsync);
//REG_FUNC(0xCAC5D672, sceIoLseekAsync);
//REG_FUNC(0x99C54B9, sceIoIoctlAsync);
//REG_FUNC(0x099C54B9, sceIoIoctlAsync);
//REG_FUNC(0x446A60AC, sceIoRemoveAsync);
//REG_FUNC(0x73FC184B, sceIoDopenAsync);
//REG_FUNC(0x4D0597D7, sceIoDcloseAsync);
@ -1285,7 +1305,7 @@ psv_log_base sceLibKernel("sceLibKernel", []()
//REG_FUNC(0xCD248267, sceKernelGetCurrentProcess);
//REG_FUNC(0x2252890C, sceKernelPowerTick);
//REG_FUNC(0x9E45DA09, sceKernelLibcClock);
//REG_FUNC(0x39BE45, sceKernelLibcTime);
//REG_FUNC(0x0039BE45, sceKernelLibcTime);
//REG_FUNC(0x4B879059, sceKernelLibcGettimeofday);
//REG_FUNC(0xC1727F59, sceKernelGetStdin);
//REG_FUNC(0xE5AA625C, sceKernelGetStdout);
@ -1318,12 +1338,12 @@ psv_log_base sceLibKernel("sceLibKernel", []()
//REG_FUNC(0x800EDCC1, sceKernelClearDipsw);
/* SceThreadmgr */
REG_FUNC(0xC8A38E1, sceKernelExitThread);
REG_FUNC(0x0C8A38E1, sceKernelExitThread);
REG_FUNC(0x1D17DECF, sceKernelExitDeleteThread);
REG_FUNC(0x4B675D05, sceKernelDelayThread);
REG_FUNC(0x9C0180E1, sceKernelDelayThreadCB);
//REG_FUNC(0x1173F8, sceKernelChangeActiveCpuMask);
REG_FUNC(0x1414F0B, sceKernelGetThreadCurrentPriority);
//REG_FUNC(0x001173F8, sceKernelChangeActiveCpuMask);
REG_FUNC(0x01414F0B, sceKernelGetThreadCurrentPriority);
REG_FUNC(0x751C9B7A, sceKernelChangeCurrentThreadAttr);
REG_FUNC(0xD9BD74EB, sceKernelCheckWaitableStatus);
REG_FUNC(0x9DCB4B7A, sceKernelGetProcessId);

View File

@ -251,6 +251,20 @@ enum
SCE_KERNEL_ERROR_NO_AUTH = 0x8002F001,
};
enum psv_object_class_t : u32
{
SCE_KERNEL_UID_CLASS_PROCESS = 0,
SCE_KERNEL_THREADMGR_UID_CLASS_THREAD = 1,
SCE_KERNEL_THREADMGR_UID_CLASS_SEMA = 2,
SCE_KERNEL_THREADMGR_UID_CLASS_EVENT_FLAG = 3,
SCE_KERNEL_THREADMGR_UID_CLASS_MUTEX = 4,
SCE_KERNEL_THREADMGR_UID_CLASS_COND = 5,
SCE_KERNEL_THREADMGR_UID_CLASS_TIMER = 6,
SCE_KERNEL_THREADMGR_UID_CLASS_MSG_PIPE = 7,
SCE_KERNEL_THREADMGR_UID_CLASS_CALLBACK = 8,
SCE_KERNEL_THREADMGR_UID_CLASS_THREAD_EVENT = 9,
};
union SceKernelSysClock
{
struct
@ -292,7 +306,7 @@ struct SceKernelAllocMemBlockOpt
// Thread Manager definitions (threads)
typedef s32(*SceKernelThreadEntry)(u32 argSize, vm::psv::ptr<void> pArgBlock);
typedef s32(SceKernelThreadEntry)(u32 argSize, vm::psv::ptr<void> pArgBlock);
struct SceKernelThreadOptParam
{
@ -357,7 +371,7 @@ struct SceKernelSystemInfo
// Thread Manager definitions (callbacks)
typedef s32(*SceKernelCallbackFunction)(s32 notifyId, s32 notifyCount, s32 notifyArg, vm::psv::ptr<void> pCommon);
typedef s32(SceKernelCallbackFunction)(s32 notifyId, s32 notifyCount, s32 notifyArg, vm::psv::ptr<void> pCommon);
struct SceKernelCallbackInfo
{
@ -375,7 +389,7 @@ struct SceKernelCallbackInfo
// Thread Manager definitions (events)
typedef s32(*SceKernelThreadEventHandler)(s32 type, s32 threadId, s32 arg, vm::psv::ptr<void> pCommon);
typedef s32(SceKernelThreadEventHandler)(s32 type, s32 threadId, s32 arg, vm::psv::ptr<void> pCommon);
struct SceKernelEventInfo
{

View File

@ -8,7 +8,7 @@ extern psv_log_base sceLibc;
vm::psv::ptr<void> g_dso;
typedef void(*atexit_func_t)(vm::psv::ptr<void>);
typedef void(atexit_func_t)(vm::psv::ptr<void>);
std::vector<std::function<void(ARMv7Context&)>> g_atexit;

View File

@ -47,10 +47,10 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0x63F05BD6, ceil);
//REG_FUNC(0x6BBFEC89, ceilf);
//REG_FUNC(0x48082D81, ceill);
//REG_FUNC(0xB918D13, copysign);
//REG_FUNC(0x0B918D13, copysign);
//REG_FUNC(0x16EB9E63, copysignf);
//REG_FUNC(0x19DFC0AA, copysignl);
//REG_FUNC(0x61D0244, cos);
//REG_FUNC(0x061D0244, cos);
//REG_FUNC(0x127F8302, cosf);
//REG_FUNC(0x89B9BE1F, cosl);
//REG_FUNC(0x110195E7, cosh);
@ -59,7 +59,7 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0x4B84C012, _Cosh);
//REG_FUNC(0x15993458, erf);
//REG_FUNC(0x524AEBFE, erfc);
//REG_FUNC(0x301F113, erfcf);
//REG_FUNC(0x0301F113, erfcf);
//REG_FUNC(0xD4C92471, erfcl);
//REG_FUNC(0x41DD1AB8, erff);
//REG_FUNC(0xFD431619, erfl);
@ -74,7 +74,7 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0x8BF1866C, expm1l);
//REG_FUNC(0x3E672BE3, fabs);
//REG_FUNC(0x75348906, fabsf);
//REG_FUNC(0x3ECA514, fabsl);
//REG_FUNC(0x03ECA514, fabsl);
//REG_FUNC(0xA278B20D, _FCosh);
//REG_FUNC(0xD6FD5A2E, fdim);
//REG_FUNC(0x8B6CC137, fdimf);
@ -96,19 +96,19 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0x1CD8F88E, fmodf);
//REG_FUNC(0x986011B4, fmodl);
//REG_FUNC(0x59197427, frexp);
//REG_FUNC(0xA6879AC, frexpf);
//REG_FUNC(0x0A6879AC, frexpf);
//REG_FUNC(0x6DC8D877, frexpl);
//REG_FUNC(0x4A496BC0, _FSin);
//REG_FUNC(0x7FBB4C55, _FSinh);
//REG_FUNC(0x2D2CD795, hypot);
//REG_FUNC(0xA397B929, hypotf);
//REG_FUNC(0x5BFBEE8, hypotl);
//REG_FUNC(0x05BFBEE8, hypotl);
//REG_FUNC(0x667EE864, ilogb);
//REG_FUNC(0x80050A43, ilogbf);
//REG_FUNC(0x91298DCA, ilogbl);
//REG_FUNC(0x197C9D5, _LCosh);
//REG_FUNC(0x56061B, ldexp);
//REG_FUNC(0xE61E016, ldexpf);
//REG_FUNC(0x0197C9D5, _LCosh);
//REG_FUNC(0x0056061B, ldexp);
//REG_FUNC(0x0E61E016, ldexpf);
//REG_FUNC(0x8280A7B1, ldexpl);
//REG_FUNC(0x2480AA54, lgamma);
//REG_FUNC(0x2D9556D5, lgammaf);
@ -118,7 +118,7 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0xC1F6135B, llrintf);
//REG_FUNC(0x80558247, llrintl);
//REG_FUNC(0xD1251A18, llround);
//REG_FUNC(0x4595A04, llroundf);
//REG_FUNC(0x04595A04, llroundf);
//REG_FUNC(0x9AB5C7AF, llroundl);
//REG_FUNC(0x6037C48F, log);
//REG_FUNC(0x811ED68B, logf);
@ -134,7 +134,7 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0x4095DBDB, log2f);
//REG_FUNC(0x720021A9, log2l);
//REG_FUNC(0x5EAE8AD4, logb);
//REG_FUNC(0x25F51CE, logbf);
//REG_FUNC(0x025F51CE, logbf);
//REG_FUNC(0x86C4B75F, logbl);
//REG_FUNC(0x207307D0, lrint);
//REG_FUNC(0xDA903135, lrintf);
@ -200,8 +200,8 @@ psv_log_base sceLibm("SceLibm", []()
//REG_FUNC(0x3A7FE686, tgamma);
//REG_FUNC(0xE6067AC0, tgammaf);
//REG_FUNC(0x2949109F, tgammal);
//REG_FUNC(0x212323E, trunc);
//REG_FUNC(0x90B899F, truncf);
//REG_FUNC(0x0212323E, trunc);
//REG_FUNC(0x090B899F, truncf);
//REG_FUNC(0xBC0F1B1A, truncl);
//REG_FUNC(0x98BBDAE0, _Dclass);
//REG_FUNC(0xBD8EF217, _FDclass);

View File

@ -25,7 +25,8 @@ namespace sce_libstdcxx_func
}
}
#define REG_FUNC(nid, name) reg_psv_func(nid, &sceLibstdcxx, #name, &sce_libstdcxx_func::name)
// Attention: find and set correct original mangled name in third parameter, for example: REG_FUNC(0xAE71DC3, operator_new_nothrow, "_ZnwjRKSt9nothrow_t");
#define REG_FUNC(nid, name, orig_name) reg_psv_func(nid, &sceLibstdcxx, orig_name, &sce_libstdcxx_func::name)
psv_log_base sceLibstdcxx("SceLibstdcxx", []()
{
@ -55,14 +56,14 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x16F56E8D, std::invalid_argument::_Doraise() const);
//REG_FUNC(0x6C568D20, std::_ctype<char>::do_tolower(char*, char const*) const);
//REG_FUNC(0xC334DE66, std::_ctype<char>::do_tolower(char) const);
//REG_FUNC(0x2DD808E, std::_ctype<char>::do_toupper(char*, char const*) const);
//REG_FUNC(0x02DD808E, std::_ctype<char>::do_toupper(char*, char const*) const);
//REG_FUNC(0xF6AF33EA, std::_ctype<char>::do_toupper(char) const);
//REG_FUNC(0x1B81D726, std::_ctype<char>::do_widen(char const*, char const*, char*) const);
//REG_FUNC(0x6471CC01, std::_ctype<char>::do_widen(char) const);
//REG_FUNC(0x9CFA56E5, std::_ctype<char>::do_narrow(char const*, char const*, char, char*) const);
//REG_FUNC(0x718669AB, std::_ctype<char>::do_narrow(char, char) const);
//REG_FUNC(0x759F105D, std::_ctype<wchar_t>::do_scan_is(short, wchar_t const*, wchar_t const*) const);
//REG_FUNC(0x56443F, std::_ctype<wchar_t>::do_tolower(wchar_t*, wchar_t const*) const);
//REG_FUNC(0x0056443F, std::_ctype<wchar_t>::do_tolower(wchar_t*, wchar_t const*) const);
//REG_FUNC(0x33E9ECDD, std::_ctype<wchar_t>::do_tolower(wchar_t) const);
//REG_FUNC(0x1256E6A5, std::_ctype<wchar_t>::do_toupper(wchar_t*, wchar_t const*) const);
//REG_FUNC(0x64072C2E, std::_ctype<wchar_t>::do_toupper(wchar_t) const);
@ -90,7 +91,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x664750EE, std::bad_alloc::what() const);
//REG_FUNC(0xBA89FBE7, std::bad_alloc::_Doraise() const);
//REG_FUNC(0xC133E331, std::exception::what() const);
//REG_FUNC(0x656BE32, std::exception::_Raise() const);
//REG_FUNC(0x0656BE32, std::exception::_Raise() const);
//REG_FUNC(0x47A5CDA2, std::exception::_Doraise() const);
//REG_FUNC(0xBAE38DF9, std::type_info::name() const);
//REG_FUNC(0x1F260F10, std::type_info::before(std::type_info const&) const);
@ -118,10 +119,10 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x9CF31703, std::istrstream::~istrstream());
//REG_FUNC(0x71D13A36, std::istrstream::~istrstream());
//REG_FUNC(0xAF5DF8C3, std::istrstream::~istrstream());
//REG_FUNC(0xC1E7C7A, std::ostrstream::ostrstream(char*, int, std::_Iosb<int>::_Openmode));
//REG_FUNC(0xC09B290, std::ostrstream::ostrstream(char*, int, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x0C1E7C7A, std::ostrstream::ostrstream(char*, int, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x0C09B290, std::ostrstream::ostrstream(char*, int, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x4B8BA644, std::ostrstream::~ostrstream());
//REG_FUNC(0xE463FB3, std::ostrstream::~ostrstream());
//REG_FUNC(0x0E463FB3, std::ostrstream::~ostrstream());
//REG_FUNC(0xA0A34FEF, std::ostrstream::~ostrstream());
//REG_FUNC(0xC9F632FF, std::logic_error::logic_error(std::logic_error const&));
//REG_FUNC(0xE6356C5C, std::logic_error::logic_error(std::string const&));
@ -135,12 +136,12 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x7D5412EF, std::domain_error::domain_error(std::domain_error const&));
//REG_FUNC(0x803A7D3E, std::domain_error::~domain_error());
//REG_FUNC(0xA6BCA2AD, std::domain_error::~domain_error());
//REG_FUNC(0x36F9D2A, std::domain_error::~domain_error());
//REG_FUNC(0x036F9D2A, std::domain_error::~domain_error());
//REG_FUNC(0x5F3428AD, std::length_error::length_error(std::length_error const&));
//REG_FUNC(0xF6FB801D, std::length_error::length_error(std::string const&));
//REG_FUNC(0xF83AA7DA, std::length_error::~length_error());
//REG_FUNC(0xA873D7F9, std::length_error::~length_error());
//REG_FUNC(0xBB12C75, std::length_error::~length_error());
//REG_FUNC(0x0BB12C75, std::length_error::~length_error());
//REG_FUNC(0x299AA587, std::out_of_range::out_of_range(std::out_of_range const&));
//REG_FUNC(0xC8BA5522, std::out_of_range::out_of_range(std::string const&));
//REG_FUNC(0xA8C470A4, std::out_of_range::~out_of_range());
@ -156,7 +157,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xA9F4FABF, std::strstreambuf::underflow());
//REG_FUNC(0x1C887DDE, std::strstreambuf::~strstreambuf());
//REG_FUNC(0x29E1E930, std::strstreambuf::~strstreambuf());
//REG_FUNC(0xA140889, std::strstreambuf::~strstreambuf());
//REG_FUNC(0x0A140889, std::strstreambuf::~strstreambuf());
//REG_FUNC(0xA8FE6FC4, std::_codecvt_base::~_codecvt_base());
//REG_FUNC(0xB0E47AE4, std::_codecvt_base::~_codecvt_base());
//REG_FUNC(0xB7EE9CC2, std::bad_exception::bad_exception(std::bad_exception const&));
@ -173,7 +174,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x413E813E, std::basic_filebuf<char, std::char_traits<char> >::setbuf(char*, int));
//REG_FUNC(0x9D193B65, std::basic_filebuf<char, std::char_traits<char> >::_Unlock());
//REG_FUNC(0x52E47FB5, std::basic_filebuf<char, std::char_traits<char> >::seekoff(long, std::_Iosb<int>::_Seekdir, std::_Iosb<int>::_Openmode));
//REG_FUNC(0xE119B37, std::basic_filebuf<char, std::char_traits<char> >::seekpos(std::fpos<std::_Mbstatet>, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x0E119B37, std::basic_filebuf<char, std::char_traits<char> >::seekpos(std::fpos<std::_Mbstatet>, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x616754BC, std::basic_filebuf<char, std::char_traits<char> >::overflow(int));
//REG_FUNC(0xCD5BD2E1, std::basic_filebuf<char, std::char_traits<char> >::_Endwrite());
//REG_FUNC(0xFC1C7F3A, std::basic_filebuf<char, std::char_traits<char> >::pbackfail(int));
@ -196,7 +197,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xFFFA683E, std::basic_istream<wchar_t, std::char_traits<wchar_t> >::~basic_istream());
//REG_FUNC(0xB58839C5, std::basic_istream<wchar_t, std::char_traits<wchar_t> >::~basic_istream());
//REG_FUNC(0x9BF8855B, std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::basic_ostream(std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >*, bool));
//REG_FUNC(0xD74F56E, std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::~basic_ostream());
//REG_FUNC(0x0D74F56E, std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::~basic_ostream());
//REG_FUNC(0x9B831B60, std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::~basic_ostream());
//REG_FUNC(0x396337CE, std::runtime_error::runtime_error(std::runtime_error const&));
//REG_FUNC(0xDAD26367, std::runtime_error::~runtime_error());
@ -208,20 +209,20 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x4E45F680, std::overflow_error::~overflow_error());
//REG_FUNC(0x626515E3, std::basic_streambuf<char, std::char_traits<char> >::sync());
//REG_FUNC(0x2E55F15A, std::basic_streambuf<char, std::char_traits<char> >::_Lock());
//REG_FUNC(0xF8535AB, std::basic_streambuf<char, std::char_traits<char> >::uflow());
//REG_FUNC(0x0F8535AB, std::basic_streambuf<char, std::char_traits<char> >::uflow());
//REG_FUNC(0xD7933D06, std::basic_streambuf<char, std::char_traits<char> >::setbuf(char*, int));
//REG_FUNC(0xB8BCCC8D, std::basic_streambuf<char, std::char_traits<char> >::xsgetn(char*, int));
//REG_FUNC(0x43E5D0F1, std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int));
//REG_FUNC(0x149B193A, std::basic_streambuf<char, std::char_traits<char> >::_Unlock());
//REG_FUNC(0x600998EC, std::basic_streambuf<char, std::char_traits<char> >::seekoff(long, std::_Iosb<int>::_Seekdir, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x1DEFFD6, std::basic_streambuf<char, std::char_traits<char> >::seekpos(std::fpos<std::_Mbstatet>, std::_Iosb<int>::_Openmode));
//REG_FUNC(0x01DEFFD6, std::basic_streambuf<char, std::char_traits<char> >::seekpos(std::fpos<std::_Mbstatet>, std::_Iosb<int>::_Openmode));
//REG_FUNC(0xF5F44352, std::basic_streambuf<char, std::char_traits<char> >::overflow(int));
//REG_FUNC(0xCA79344F, std::basic_streambuf<char, std::char_traits<char> >::pbackfail(int));
//REG_FUNC(0x441788B1, std::basic_streambuf<char, std::char_traits<char> >::showmanyc());
//REG_FUNC(0x797DAE94, std::basic_streambuf<char, std::char_traits<char> >::underflow());
//REG_FUNC(0x74AD52E, std::basic_streambuf<char, std::char_traits<char> >::~basic_streambuf());
//REG_FUNC(0x074AD52E, std::basic_streambuf<char, std::char_traits<char> >::~basic_streambuf());
//REG_FUNC(0xE449E2BF, std::basic_streambuf<char, std::char_traits<char> >::~basic_streambuf());
//REG_FUNC(0x9FAA0AA, std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::sync());
//REG_FUNC(0x09FAA0AA, std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::sync());
//REG_FUNC(0xA596C88C, std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::_Lock());
//REG_FUNC(0x373C2CD8, std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::uflow());
//REG_FUNC(0x3F363796, std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >::setbuf(wchar_t*, int));
@ -245,7 +246,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x9982A4FC, std::invalid_argument::~invalid_argument());
//REG_FUNC(0x1AB2B1AC, std::invalid_argument::~invalid_argument());
//REG_FUNC(0xF9FAB558, std::_Mutex::_Lock());
//REG_FUNC(0x402C9F8, std::_Mutex::_Unlock());
//REG_FUNC(0x0402C9F8, std::_Mutex::_Unlock());
//REG_FUNC(0x9DA92617, std::_Mutex::_Mutex(std::_Uninitialized));
//REG_FUNC(0xA4F99AE7, std::_Mutex::_Mutex());
//REG_FUNC(0x7B5A6B7F, std::_Mutex::_Mutex(std::_Uninitialized));
@ -278,12 +279,12 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x65D88619, std::ios_base::Init::~Init());
//REG_FUNC(0x3483E01D, std::ios_base::Init::~Init());
//REG_FUNC(0x78CB190E, std::ios_base::_Init());
//REG_FUNC(0x23B8BEE, std::ios_base::_Tidy());
//REG_FUNC(0x023B8BEE, std::ios_base::_Tidy());
//REG_FUNC(0xC9DE8208, std::ios_base::clear(std::_Iosb<int>::_Iostate, bool));
//REG_FUNC(0xAA9171FB, std::ios_base::_Addstd());
//REG_FUNC(0xFC58778, std::ios_base::copyfmt(std::ios_base const&));
//REG_FUNC(0x0FC58778, std::ios_base::copyfmt(std::ios_base const&));
//REG_FUNC(0x2DF76755, std::ios_base::failure::failure(std::ios_base::failure const&));
//REG_FUNC(0x94048F7, std::ios_base::failure::failure(std::string const&));
//REG_FUNC(0x094048F7, std::ios_base::failure::failure(std::string const&));
//REG_FUNC(0x20AAAB95, std::ios_base::failure::~failure());
//REG_FUNC(0x31D0197A, std::ios_base::failure::~failure());
//REG_FUNC(0x7736E940, std::ios_base::_Callfns(std::ios_base::event));
@ -296,18 +297,18 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x6AF75467, std::bad_alloc::bad_alloc(std::bad_alloc const&));
//REG_FUNC(0x57096162, std::bad_alloc::bad_alloc());
//REG_FUNC(0xB2DAA408, std::bad_alloc::~bad_alloc());
//REG_FUNC(0x7AEE736, std::bad_alloc::~bad_alloc());
//REG_FUNC(0x07AEE736, std::bad_alloc::~bad_alloc());
//REG_FUNC(0xA9E9B7B7, std::bad_alloc::~bad_alloc());
//REG_FUNC(0x7853E8E5, std::bad_alloc::operator=(std::bad_alloc const&));
//REG_FUNC(0xF78468EB, std::basic_ios<char, std::char_traits<char> >::~basic_ios());
//REG_FUNC(0x3150182, std::basic_ios<char, std::char_traits<char> >::~basic_ios());
//REG_FUNC(0x03150182, std::basic_ios<char, std::char_traits<char> >::~basic_ios());
//REG_FUNC(0x9654168A, std::basic_ios<wchar_t, std::char_traits<wchar_t> >::~basic_ios());
//REG_FUNC(0x8FFB8524, std::basic_ios<wchar_t, std::char_traits<wchar_t> >::~basic_ios());
//REG_FUNC(0x7AF1BB16, std::exception::_Set_raise_handler(void (*)(std::exception const&)));
//REG_FUNC(0x8C5A4417, std::exception::exception(std::exception const&));
//REG_FUNC(0xFC169D71, std::exception::exception());
//REG_FUNC(0x59758E74, std::exception::exception(std::exception const&));
//REG_FUNC(0xE08376, std::exception::exception());
//REG_FUNC(0x00E08376, std::exception::exception());
//REG_FUNC(0x82EEA67E, std::exception::~exception());
//REG_FUNC(0x30405D88, std::exception::~exception());
//REG_FUNC(0xAF7A7081, std::exception::~exception());
@ -319,7 +320,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x7D8DFE43, std::strstream::~strstream());
//REG_FUNC(0x8D4B1A13, std::type_info::~type_info());
//REG_FUNC(0xBD786240, std::type_info::~type_info());
//REG_FUNC(0xC04303, std::type_info::~type_info());
//REG_FUNC(0x00C04303, std::type_info::~type_info());
//REG_FUNC(0x9983D8B9, std::unexpected());
//REG_FUNC(0x385D19B2, std::setiosflags(std::_Iosb<int>::_Fmtflags));
//REG_FUNC(0xD8A78A61, std::setprecision(int));
@ -328,7 +329,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x644CBAA2, std::_Debug_message(char const*, char const*));
//REG_FUNC(0x9B2F0CA6, std::set_unexpected(void (*)()));
//REG_FUNC(0xC107B555, std::set_new_handler(void (*)()));
//REG_FUNC(0x11CEB00, std::uncaught_exception());
//REG_FUNC(0x011CEB00, std::uncaught_exception());
//REG_FUNC(0x36282336, std::__gen_dummy_typeinfos());
//REG_FUNC(0x3622003F, std::setw(int));
//REG_FUNC(0x6CAFA8EF, std::_Throw(std::exception const&));
@ -365,7 +366,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xE7FB2BF4, operator new[](unsigned int));
//REG_FUNC(0x31C62481, operator new[](unsigned int, std::nothrow_t const&));
//REG_FUNC(0xF99ED5AC, operator new(unsigned int));
//REG_FUNC(0xAE71DC3, operator new(unsigned int, std::nothrow_t const&));
//REG_FUNC(0x0AE71DC3, operator new(unsigned int, std::nothrow_t const&));
//REG_FUNC(0x1818C323, _SNC_get_global_vars);
//REG_FUNC(0x2CFA1F15, _SNC_get_tlocal_vars);
//REG_FUNC(0x7742D916, _Unwind_Backtrace);
@ -376,9 +377,9 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xE7889A5B, _Unwind_VRS_Get);
//REG_FUNC(0xF106D050, _Unwind_VRS_Pop);
//REG_FUNC(0x91CDA2F9, _Unwind_VRS_Set);
REG_FUNC(0x173E7421, __aeabi_unwind_cpp_pr0);
REG_FUNC(0x3C78DDE3, __aeabi_unwind_cpp_pr1);
REG_FUNC(0xF95BDD36, __aeabi_unwind_cpp_pr2);
REG_FUNC(0x173E7421, __aeabi_unwind_cpp_pr0, "__aeabi_unwind_cpp_pr0");
REG_FUNC(0x3C78DDE3, __aeabi_unwind_cpp_pr1, "__aeabi_unwind_cpp_pr1");
REG_FUNC(0xF95BDD36, __aeabi_unwind_cpp_pr2, "__aeabi_unwind_cpp_pr2");
//REG_FUNC(0x8C93EFDA, __cxa_allocate_exception);
//REG_FUNC(0x6165EE89, __cxa_begin_catch);
//REG_FUNC(0x5D74285C, __cxa_begin_cleanup);
@ -427,12 +428,12 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xBF90A45A, _PJP_CPP_Copyright);
//REG_FUNC(0x3B6D9752, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::npos);
//REG_FUNC(0xA3498140, std::string::npos);
//REG_FUNC(0x5273EA3, std::_Num_int_base::is_bounded);
//REG_FUNC(0x05273EA3, std::_Num_int_base::is_bounded);
//REG_FUNC(0x8A0994F8, std::_Num_int_base::is_integer);
//REG_FUNC(0x401F1224, std::_Num_int_base::is_specialized);
//REG_FUNC(0xA65FE916, std::_Num_int_base::radix);
//REG_FUNC(0xF2AA872E, std::_Num_int_base::is_exact);
//REG_FUNC(0x8FE5A4F, std::_Num_int_base::is_modulo);
//REG_FUNC(0x08FE5A4F, std::_Num_int_base::is_modulo);
//REG_FUNC(0x7D4C55EC, std::numeric_limits<signed char>::digits);
//REG_FUNC(0xA4E5BF5E, std::numeric_limits<signed char>::digits10);
//REG_FUNC(0xD9938B84, std::numeric_limits<signed char>::is_signed);
@ -441,7 +442,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x81B82E0E, std::numeric_limits<bool>::is_modulo);
//REG_FUNC(0x9E6D2025, std::numeric_limits<bool>::is_signed);
//REG_FUNC(0x810ED593, std::numeric_limits<char>::digits);
//REG_FUNC(0xAC1A819, std::numeric_limits<char>::digits10);
//REG_FUNC(0x0AC1A819, std::numeric_limits<char>::digits10);
//REG_FUNC(0x660E14E1, std::numeric_limits<char>::is_signed);
//REG_FUNC(0x3EEB3B23, std::numeric_limits<double>::max_exponent);
//REG_FUNC(0x13B634BE, std::numeric_limits<double>::min_exponent);
@ -469,10 +470,10 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x3AB38CDA, std::numeric_limits<int>::is_signed);
//REG_FUNC(0xEEB7B642, std::numeric_limits<unsigned int>::digits);
//REG_FUNC(0xBCDE68B3, std::numeric_limits<unsigned int>::digits10);
//REG_FUNC(0xDA8EFB0, std::numeric_limits<unsigned int>::is_signed);
//REG_FUNC(0x0DA8EFB0, std::numeric_limits<unsigned int>::is_signed);
//REG_FUNC(0x65DAD8D6, std::numeric_limits<long>::digits);
//REG_FUNC(0xFB52BC0A, std::numeric_limits<long>::digits10);
//REG_FUNC(0x63544FC, std::numeric_limits<long>::is_signed);
//REG_FUNC(0x063544FC, std::numeric_limits<long>::is_signed);
//REG_FUNC(0x441D097A, std::numeric_limits<unsigned long>::digits);
//REG_FUNC(0xB56F1B07, std::numeric_limits<unsigned long>::digits10);
//REG_FUNC(0xA9799886, std::numeric_limits<unsigned long>::is_signed);
@ -513,13 +514,13 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x759FD02E, std::_Iosb<int>::app);
//REG_FUNC(0x6F410A00, std::_Iosb<int>::ate);
//REG_FUNC(0xD2A42D0C, std::_Iosb<int>::beg);
//REG_FUNC(0x9B45C3B, std::_Iosb<int>::cur);
//REG_FUNC(0x09B45C3B, std::_Iosb<int>::cur);
//REG_FUNC(0x121A8952, std::_Iosb<int>::dec);
//REG_FUNC(0x7CC027CD, std::_Iosb<int>::end);
//REG_FUNC(0x6E2FF90B, std::_Iosb<int>::hex);
//REG_FUNC(0xB4A55C29, std::_Iosb<int>::oct);
//REG_FUNC(0x2CB2DC70, std::_Iosb<int>::out);
//REG_FUNC(0x78E34A9, std::_Iosb<int>::trunc);
//REG_FUNC(0x078E34A9, std::_Iosb<int>::trunc);
//REG_FUNC(0xB5EFA1B3, std::_Iosb<int>::badbit);
//REG_FUNC(0x5312A538, std::_Iosb<int>::binary);
//REG_FUNC(0xD9D32526, std::_Iosb<int>::skipws);
@ -539,10 +540,10 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xB11D20E2, std::_Num_base::has_infinity);
//REG_FUNC(0x3E169F74, std::_Num_base::max_exponent);
//REG_FUNC(0xD7C041E0, std::_Num_base::min_exponent);
//REG_FUNC(0x2DA0D59, std::_Num_base::has_quiet_NaN);
//REG_FUNC(0x02DA0D59, std::_Num_base::has_quiet_NaN);
//REG_FUNC(0xBE06BD79, std::_Num_base::is_specialized);
//REG_FUNC(0xEBBC4DDD, std::_Num_base::max_exponent10);
//REG_FUNC(0xFFCF7FC, std::_Num_base::min_exponent10);
//REG_FUNC(0x0FFCF7FC, std::_Num_base::min_exponent10);
//REG_FUNC(0xB317DDDF, std::_Num_base::has_denorm_loss);
//REG_FUNC(0x245D399E, std::_Num_base::tinyness_before);
//REG_FUNC(0xBD5F0B8A, std::_Num_base::has_signaling_NaN);
@ -589,7 +590,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xA4018B84, typeinfo for __simd128_float32_t);
//REG_FUNC(0xA1FE4058, typeinfo for half);
//REG_FUNC(0x5351829B, typeinfo for std::ios_base::failure);
//REG_FUNC(0xAC6C8F, typeinfo for __simd64_int8_t*);
//REG_FUNC(0x00AC6C8F, typeinfo for __simd64_int8_t*);
//REG_FUNC(0xD5B056B8, typeinfo for __simd128_int8_t*);
//REG_FUNC(0x13975DAE, typeinfo for __simd64_int16_t*);
//REG_FUNC(0x963C04E3, typeinfo for __simd64_int32_t*);
@ -604,7 +605,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xEE862280, typeinfo for __simd64_uint32_t*);
//REG_FUNC(0xB5CEC4FF, typeinfo for __simd128_poly16_t*);
//REG_FUNC(0x46124E82, typeinfo for __simd128_uint16_t*);
//REG_FUNC(0x7E6CC17, typeinfo for __simd128_uint32_t*);
//REG_FUNC(0x07E6CC17, typeinfo for __simd128_uint32_t*);
//REG_FUNC(0x588EBCAD, typeinfo for __simd64_float16_t*);
//REG_FUNC(0xDFCB2417, typeinfo for __simd64_float32_t*);
//REG_FUNC(0x9502D3C0, typeinfo for __simd128_float16_t*);
@ -615,8 +616,8 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x52A04C47, typeinfo for __simd64_int16_t const*);
//REG_FUNC(0xBB64CCF1, typeinfo for __simd64_int32_t const*);
//REG_FUNC(0x7C9D0C33, typeinfo for __simd64_poly8_t const*);
//REG_FUNC(0x21A57A1, typeinfo for __simd64_uint8_t const*);
//REG_FUNC(0x21E3DD1, typeinfo for __simd128_int16_t const*);
//REG_FUNC(0x021A57A1, typeinfo for __simd64_uint8_t const*);
//REG_FUNC(0x021E3DD1, typeinfo for __simd128_int16_t const*);
//REG_FUNC(0xFF8DDBE7, typeinfo for __simd128_int32_t const*);
//REG_FUNC(0xB30AB3B5, typeinfo for __simd128_poly8_t const*);
//REG_FUNC(0xC8721E86, typeinfo for __simd128_uint8_t const*);
@ -653,12 +654,12 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xA6C2A25C, typeinfo for long long __vector*);
//REG_FUNC(0x81B51915, typeinfo for unsigned long long __vector*);
//REG_FUNC(0xA7CB4EAA, typeinfo for signed char*);
//REG_FUNC(0x87B0FB6, typeinfo for bool*);
//REG_FUNC(0x087B0FB6, typeinfo for bool*);
//REG_FUNC(0xE4D24E14, typeinfo for char*);
//REG_FUNC(0x6825FFE6, typeinfo for double*);
//REG_FUNC(0x926B9A3A, typeinfo for long double*);
//REG_FUNC(0x24072F3E, typeinfo for float*);
//REG_FUNC(0x8B5247B, typeinfo for unsigned char*);
//REG_FUNC(0x08B5247B, typeinfo for unsigned char*);
//REG_FUNC(0x15C21CC8, typeinfo for int*);
//REG_FUNC(0xD234CF18, typeinfo for unsigned int*);
//REG_FUNC(0x50E25810, typeinfo for long*);
@ -703,7 +704,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xB93721C7, typeinfo for std::ios_base);
//REG_FUNC(0x35E135A0, typeinfo for std::bad_alloc);
//REG_FUNC(0x7BA61382, typeinfo for std::basic_ios<char, std::char_traits<char> >);
//REG_FUNC(0x905B8B0, typeinfo for std::basic_ios<wchar_t, std::char_traits<wchar_t> >);
//REG_FUNC(0x0905B8B0, typeinfo for std::basic_ios<wchar_t, std::char_traits<wchar_t> >);
//REG_FUNC(0x1E8C6100, typeinfo for std::exception);
//REG_FUNC(0x1CC15F54, typeinfo for std::strstream);
//REG_FUNC(0x8A026EAD, typeinfo for std::type_info);
@ -735,16 +736,16 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xC3FA8530, typeinfo name for __simd128_int16_t);
//REG_FUNC(0x67A63A08, typeinfo name for __simd128_int32_t);
//REG_FUNC(0x6B26EFF8, typeinfo name for __simd128_poly8_t);
//REG_FUNC(0x8C4C69F, typeinfo name for __simd128_uint8_t);
//REG_FUNC(0x08C4C69F, typeinfo name for __simd128_uint8_t);
//REG_FUNC(0x40BC2E0E, typeinfo name for __simd64_poly16_t);
//REG_FUNC(0x8D1AE4A7, typeinfo name for __simd64_uint16_t);
//REG_FUNC(0xC4096952, typeinfo name for __simd64_uint32_t);
//REG_FUNC(0x16D366F1, typeinfo name for __simd128_poly16_t);
//REG_FUNC(0x45552A1, typeinfo name for __simd128_uint16_t);
//REG_FUNC(0x045552A1, typeinfo name for __simd128_uint16_t);
//REG_FUNC(0x7DBF4FFF, typeinfo name for __simd128_uint32_t);
//REG_FUNC(0xED26DE1, typeinfo name for __simd64_float16_t);
//REG_FUNC(0x0ED26DE1, typeinfo name for __simd64_float16_t);
//REG_FUNC(0xAB0D789A, typeinfo name for __simd64_float32_t);
//REG_FUNC(0x3200DDB, typeinfo name for __simd128_float16_t);
//REG_FUNC(0x03200DDB, typeinfo name for __simd128_float16_t);
//REG_FUNC(0xD54CBD7C, typeinfo name for __simd128_float32_t);
//REG_FUNC(0xA8E6842E, typeinfo name for half);
//REG_FUNC(0x5246E71E, typeinfo name for std::ios_base::failure);
@ -776,7 +777,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xC356ACF6, typeinfo name for __simd64_poly8_t const*);
//REG_FUNC(0x878C75F4, typeinfo name for __simd64_uint8_t const*);
//REG_FUNC(0x68B777E3, typeinfo name for __simd128_int16_t const*);
//REG_FUNC(0x61188BD, typeinfo name for __simd128_int32_t const*);
//REG_FUNC(0x061188BD, typeinfo name for __simd128_int32_t const*);
//REG_FUNC(0xC7733F13, typeinfo name for __simd128_poly8_t const*);
//REG_FUNC(0x3D8A69EC, typeinfo name for __simd128_uint8_t const*);
//REG_FUNC(0xCC081D58, typeinfo name for __simd64_poly16_t const*);
@ -826,12 +827,12 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xE2A0B0A8, typeinfo name for unsigned short*);
//REG_FUNC(0xF7B6B02A, typeinfo name for void*);
//REG_FUNC(0xF1C9A755, typeinfo name for wchar_t*);
//REG_FUNC(0x968B212, typeinfo name for long long*);
//REG_FUNC(0x9787CAD, typeinfo name for unsigned long long*);
//REG_FUNC(0x0968B212, typeinfo name for long long*);
//REG_FUNC(0x09787CAD, typeinfo name for unsigned long long*);
//REG_FUNC(0xF86F5756, typeinfo name for std::iostream);
//REG_FUNC(0x999300E0, typeinfo name for std::istream);
//REG_FUNC(0x591C25A3, typeinfo name for std::ostream);
//REG_FUNC(0xFC9D21B, typeinfo name for std::bad_typeid);
//REG_FUNC(0x0FC9D21B, typeinfo name for std::bad_typeid);
//REG_FUNC(0x867D109E, typeinfo name for std::istrstream);
//REG_FUNC(0x88BFC745, typeinfo name for std::ostrstream);
//REG_FUNC(0xB315CE7A, typeinfo name for std::_ctype_base);
@ -841,7 +842,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x9E317CE1, typeinfo name for std::length_error);
//REG_FUNC(0xD8DAD98D, typeinfo name for std::out_of_range);
//REG_FUNC(0x1C929309, typeinfo name for std::strstreambuf);
//REG_FUNC(0xE17E4D6, typeinfo name for std::_codecvt_base);
//REG_FUNC(0x0E17E4D6, typeinfo name for std::_codecvt_base);
//REG_FUNC(0x918FE198, typeinfo name for std::bad_exception);
//REG_FUNC(0x227B4568, typeinfo name for std::basic_filebuf<char, std::char_traits<char> >);
//REG_FUNC(0xD34BAF59, typeinfo name for std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >);
@ -870,7 +871,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x2856DCD6, typeinfo name for std::type_info);
//REG_FUNC(0x75A1CED4, typeinfo name for long long __vector);
//REG_FUNC(0x508FF61E, typeinfo name for unsigned long long __vector);
//REG_FUNC(0x8E6A51A, typeinfo name for signed char);
//REG_FUNC(0x08E6A51A, typeinfo name for signed char);
//REG_FUNC(0x491DB7D3, typeinfo name for bool);
//REG_FUNC(0xD657B5A0, typeinfo name for char);
//REG_FUNC(0x322C7CB5, typeinfo name for double);
@ -890,7 +891,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x51B29810, VTT for std::iostream);
//REG_FUNC(0x52128B13, VTT for std::istream);
//REG_FUNC(0x3C508708, VTT for std::ostream);
//REG_FUNC(0x87753F6, VTT for std::istrstream);
//REG_FUNC(0x087753F6, VTT for std::istrstream);
//REG_FUNC(0xE3D7CB30, VTT for std::ostrstream);
//REG_FUNC(0xBC326B50, VTT for std::basic_istream<wchar_t, std::char_traits<wchar_t> >);
//REG_FUNC(0x16E32018, VTT for std::basic_ostream<wchar_t, std::char_traits<wchar_t> >);
@ -913,7 +914,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x82A84E5E, vtable for std::logic_error);
//REG_FUNC(0x1D583475, vtable for std::range_error);
//REG_FUNC(0x80C77E16, vtable for std::domain_error);
//REG_FUNC(0x64ADA35, vtable for std::length_error);
//REG_FUNC(0x064ADA35, vtable for std::length_error);
//REG_FUNC(0xDDAE7CBE, vtable for std::out_of_range);
//REG_FUNC(0x11B2781A, vtable for std::strstreambuf);
//REG_FUNC(0x75D16BD0, vtable for std::_codecvt_base);
@ -924,7 +925,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x48F3405B, vtable for std::basic_ostream<wchar_t, std::char_traits<wchar_t> >);
//REG_FUNC(0x53F02A18, vtable for std::runtime_error);
//REG_FUNC(0x177FCCDC, vtable for std::overflow_error);
//REG_FUNC(0x5548FF7, vtable for std::basic_streambuf<char, std::char_traits<char> >);
//REG_FUNC(0x05548FF7, vtable for std::basic_streambuf<char, std::char_traits<char> >);
//REG_FUNC(0xE8A9F32E, vtable for std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >);
//REG_FUNC(0x515AE097, vtable for std::underflow_error);
//REG_FUNC(0x23EEDAF0, vtable for std::invalid_argument);
@ -936,7 +937,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0xD58C5F52, vtable for std::ios_base);
//REG_FUNC(0xA27EFBA3, vtable for std::bad_alloc);
//REG_FUNC(0x147996ED, vtable for std::basic_ios<char, std::char_traits<char> >);
//REG_FUNC(0xDE4AFE9, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Sd__St9strstream);
//REG_FUNC(0x0DE4AFE9, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Sd__St9strstream);
//REG_FUNC(0x87D18300, _ZTVSt9basic_iosIcSt11char_traitsIcEE__SiSd__St9strstream);
//REG_FUNC(0x3D6A38D3, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Si__Sd);
//REG_FUNC(0xA8E795AF, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Si__St10istrstream);
@ -949,7 +950,7 @@ psv_log_base sceLibstdcxx("SceLibstdcxx", []()
//REG_FUNC(0x8E9879A7, vtable for std::type_info);
//REG_FUNC(0xE63750C1, std::basic_filebuf<char, std::char_traits<char> >::_Init(std::_Dnk_filet*, std::basic_filebuf<char, std::char_traits<char> >::_Initfl)::_Stinit);
//REG_FUNC(0x1D4E29BC, std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_Init(std::_Dnk_filet*, std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_Initfl)::_Stinit);
//REG_FUNC(0x8A37475, typeinfo for __cxxabiv1::__enum_type_info);
//REG_FUNC(0x08A37475, typeinfo for __cxxabiv1::__enum_type_info);
//REG_FUNC(0x66CC7DBB, typeinfo for __cxxabiv1::__array_type_info);
//REG_FUNC(0x81C44513, typeinfo for __cxxabiv1::__class_type_info);
//REG_FUNC(0xC35024DA, typeinfo for __cxxabiv1::__pbase_type_info);
@ -1007,14 +1008,14 @@ REG_FUNC(0xB1AE6F9E, _ZNKSt15underflow_error8_DoraiseEv);
REG_FUNC(0x16F56E8D, _ZNKSt16invalid_argument8_DoraiseEv);
REG_FUNC(0x6C568D20, _ZNKSt6_ctypeIcE10do_tolowerEPcPKc);
REG_FUNC(0xC334DE66, _ZNKSt6_ctypeIcE10do_tolowerEc);
REG_FUNC(0x2DD808E, _ZNKSt6_ctypeIcE10do_toupperEPcPKc);
REG_FUNC(0x02DD808E, _ZNKSt6_ctypeIcE10do_toupperEPcPKc);
REG_FUNC(0xF6AF33EA, _ZNKSt6_ctypeIcE10do_toupperEc);
REG_FUNC(0x1B81D726, _ZNKSt6_ctypeIcE8do_widenEPKcS2_Pc);
REG_FUNC(0x6471CC01, _ZNKSt6_ctypeIcE8do_widenEc);
REG_FUNC(0x9CFA56E5, _ZNKSt6_ctypeIcE9do_narrowEPKcS2_cPc);
REG_FUNC(0x718669AB, _ZNKSt6_ctypeIcE9do_narrowEcc);
REG_FUNC(0x759F105D, _ZNKSt6_ctypeIwE10do_scan_isEsPKwS2_);
REG_FUNC(0x56443F, _ZNKSt6_ctypeIwE10do_tolowerEPwPKw);
REG_FUNC(0x0056443F, _ZNKSt6_ctypeIwE10do_tolowerEPwPKw);
REG_FUNC(0x33E9ECDD, _ZNKSt6_ctypeIwE10do_tolowerEw);
REG_FUNC(0x1256E6A5, _ZNKSt6_ctypeIwE10do_toupperEPwPKw);
REG_FUNC(0x64072C2E, _ZNKSt6_ctypeIwE10do_toupperEw);
@ -1042,7 +1043,7 @@ REG_FUNC(0xF877F51E, _ZNKSt8ios_base7failure8_DoraiseEv);
REG_FUNC(0x664750EE, _ZNKSt9bad_alloc4whatEv);
REG_FUNC(0xBA89FBE7, _ZNKSt9bad_alloc8_DoraiseEv);
REG_FUNC(0xC133E331, _ZNKSt9exception4whatEv);
REG_FUNC(0x656BE32, _ZNKSt9exception6_RaiseEv);
REG_FUNC(0x0656BE32, _ZNKSt9exception6_RaiseEv);
REG_FUNC(0x47A5CDA2, _ZNKSt9exception8_DoraiseEv);
REG_FUNC(0xBAE38DF9, _ZNKSt9type_info4nameEv);
REG_FUNC(0x1F260F10, _ZNKSt9type_info6beforeERKS_);
@ -1070,10 +1071,10 @@ REG_FUNC(0x55AAD6A6, _ZNSt10bad_typeidaSERKS_);
REG_FUNC(0x9CF31703, _ZNSt10istrstreamD0Ev);
REG_FUNC(0x71D13A36, _ZNSt10istrstreamD1Ev);
REG_FUNC(0xAF5DF8C3, _ZNSt10istrstreamD2Ev);
REG_FUNC(0xC1E7C7A, _ZNSt10ostrstreamC1EPciNSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0xC09B290, _ZNSt10ostrstreamC2EPciNSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0x0C1E7C7A, _ZNSt10ostrstreamC1EPciNSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0x0C09B290, _ZNSt10ostrstreamC2EPciNSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0x4B8BA644, _ZNSt10ostrstreamD0Ev);
REG_FUNC(0xE463FB3, _ZNSt10ostrstreamD1Ev);
REG_FUNC(0x0E463FB3, _ZNSt10ostrstreamD1Ev);
REG_FUNC(0xA0A34FEF, _ZNSt10ostrstreamD2Ev);
REG_FUNC(0xC9F632FF, _ZNSt11logic_errorC1ERKS_);
REG_FUNC(0xE6356C5C, _ZNSt11logic_errorC2ERKSs);
@ -1087,12 +1088,12 @@ REG_FUNC(0xEF754EBD, _ZNSt11range_errorD2Ev);
REG_FUNC(0x7D5412EF, _ZNSt12domain_errorC1ERKS_);
REG_FUNC(0x803A7D3E, _ZNSt12domain_errorD0Ev);
REG_FUNC(0xA6BCA2AD, _ZNSt12domain_errorD1Ev);
REG_FUNC(0x36F9D2A, _ZNSt12domain_errorD2Ev);
REG_FUNC(0x036F9D2A, _ZNSt12domain_errorD2Ev);
REG_FUNC(0x5F3428AD, _ZNSt12length_errorC1ERKS_);
REG_FUNC(0xF6FB801D, _ZNSt12length_errorC1ERKSs);
REG_FUNC(0xF83AA7DA, _ZNSt12length_errorD0Ev);
REG_FUNC(0xA873D7F9, _ZNSt12length_errorD1Ev);
REG_FUNC(0xBB12C75, _ZNSt12length_errorD2Ev);
REG_FUNC(0x0BB12C75, _ZNSt12length_errorD2Ev);
REG_FUNC(0x299AA587, _ZNSt12out_of_rangeC1ERKS_);
REG_FUNC(0xC8BA5522, _ZNSt12out_of_rangeC1ERKSs);
REG_FUNC(0xA8C470A4, _ZNSt12out_of_rangeD0Ev);
@ -1108,7 +1109,7 @@ REG_FUNC(0xC725F896, _ZNSt12strstreambuf9pbackfailEi);
REG_FUNC(0xA9F4FABF, _ZNSt12strstreambuf9underflowEv);
REG_FUNC(0x1C887DDE, _ZNSt12strstreambufD0Ev);
REG_FUNC(0x29E1E930, _ZNSt12strstreambufD1Ev);
REG_FUNC(0xA140889, _ZNSt12strstreambufD2Ev);
REG_FUNC(0x0A140889, _ZNSt12strstreambufD2Ev);
REG_FUNC(0xA8FE6FC4, _ZNSt13_codecvt_baseD0Ev);
REG_FUNC(0xB0E47AE4, _ZNSt13_codecvt_baseD1Ev);
REG_FUNC(0xB7EE9CC2, _ZNSt13bad_exceptionC1ERKS_);
@ -1125,7 +1126,7 @@ REG_FUNC(0xD5F03A74, _ZNSt13basic_filebufIcSt11char_traitsIcEE5uflowEv);
REG_FUNC(0x413E813E, _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci);
REG_FUNC(0x9D193B65, _ZNSt13basic_filebufIcSt11char_traitsIcEE7_UnlockEv);
REG_FUNC(0x52E47FB5, _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffElNSt5_IosbIiE8_SeekdirENS4_9_OpenmodeE);
REG_FUNC(0xE119B37, _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekposESt4fposISt9_MbstatetENSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0x0E119B37, _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekposESt4fposISt9_MbstatetENSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0x616754BC, _ZNSt13basic_filebufIcSt11char_traitsIcEE8overflowEi);
REG_FUNC(0xCD5BD2E1, _ZNSt13basic_filebufIcSt11char_traitsIcEE9_EndwriteEv);
REG_FUNC(0xFC1C7F3A, _ZNSt13basic_filebufIcSt11char_traitsIcEE9pbackfailEi);
@ -1148,7 +1149,7 @@ REG_FUNC(0xD434F085, _ZNSt13basic_filebufIwSt11char_traitsIwEED1Ev);
REG_FUNC(0xFFFA683E, _ZNSt13basic_istreamIwSt11char_traitsIwEED0Ev);
REG_FUNC(0xB58839C5, _ZNSt13basic_istreamIwSt11char_traitsIwEED1Ev);
REG_FUNC(0x9BF8855B, _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_Eb);
REG_FUNC(0xD74F56E, _ZNSt13basic_ostreamIwSt11char_traitsIwEED0Ev);
REG_FUNC(0x0D74F56E, _ZNSt13basic_ostreamIwSt11char_traitsIwEED0Ev);
REG_FUNC(0x9B831B60, _ZNSt13basic_ostreamIwSt11char_traitsIwEED1Ev);
REG_FUNC(0x396337CE, _ZNSt13runtime_errorC1ERKS_);
REG_FUNC(0xDAD26367, _ZNSt13runtime_errorD0Ev);
@ -1160,20 +1161,20 @@ REG_FUNC(0x5C666F7E, _ZNSt14overflow_errorD1Ev);
REG_FUNC(0x4E45F680, _ZNSt14overflow_errorD2Ev);
REG_FUNC(0x626515E3, _ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv);
REG_FUNC(0x2E55F15A, _ZNSt15basic_streambufIcSt11char_traitsIcEE5_LockEv);
REG_FUNC(0xF8535AB, _ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv);
REG_FUNC(0x0F8535AB, _ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv);
REG_FUNC(0xD7933D06, _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci);
REG_FUNC(0xB8BCCC8D, _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci);
REG_FUNC(0x43E5D0F1, _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci);
REG_FUNC(0x149B193A, _ZNSt15basic_streambufIcSt11char_traitsIcEE7_UnlockEv);
REG_FUNC(0x600998EC, _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElNSt5_IosbIiE8_SeekdirENS4_9_OpenmodeE);
REG_FUNC(0x1DEFFD6, _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekposESt4fposISt9_MbstatetENSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0x01DEFFD6, _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekposESt4fposISt9_MbstatetENSt5_IosbIiE9_OpenmodeE);
REG_FUNC(0xF5F44352, _ZNSt15basic_streambufIcSt11char_traitsIcEE8overflowEi);
REG_FUNC(0xCA79344F, _ZNSt15basic_streambufIcSt11char_traitsIcEE9pbackfailEi);
REG_FUNC(0x441788B1, _ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv);
REG_FUNC(0x797DAE94, _ZNSt15basic_streambufIcSt11char_traitsIcEE9underflowEv);
REG_FUNC(0x74AD52E, _ZNSt15basic_streambufIcSt11char_traitsIcEED0Ev);
REG_FUNC(0x074AD52E, _ZNSt15basic_streambufIcSt11char_traitsIcEED0Ev);
REG_FUNC(0xE449E2BF, _ZNSt15basic_streambufIcSt11char_traitsIcEED1Ev);
REG_FUNC(0x9FAA0AA, _ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv);
REG_FUNC(0x09FAA0AA, _ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv);
REG_FUNC(0xA596C88C, _ZNSt15basic_streambufIwSt11char_traitsIwEE5_LockEv);
REG_FUNC(0x373C2CD8, _ZNSt15basic_streambufIwSt11char_traitsIwEE5uflowEv);
REG_FUNC(0x3F363796, _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi);
@ -1197,7 +1198,7 @@ REG_FUNC(0x188D86CF, _ZNSt16invalid_argumentD0Ev);
REG_FUNC(0x9982A4FC, _ZNSt16invalid_argumentD1Ev);
REG_FUNC(0x1AB2B1AC, _ZNSt16invalid_argumentD2Ev);
REG_FUNC(0xF9FAB558, _ZNSt6_Mutex5_LockEv);
REG_FUNC(0x402C9F8, _ZNSt6_Mutex7_UnlockEv);
REG_FUNC(0x0402C9F8, _ZNSt6_Mutex7_UnlockEv);
REG_FUNC(0x9DA92617, _ZNSt6_MutexC1ESt14_Uninitialized);
REG_FUNC(0xA4F99AE7, _ZNSt6_MutexC1Ev);
REG_FUNC(0x7B5A6B7F, _ZNSt6_MutexC2ESt14_Uninitialized);
@ -1230,12 +1231,12 @@ REG_FUNC(0x5ED60DEE, _ZNSt8ios_base4InitC2Ev);
REG_FUNC(0x65D88619, _ZNSt8ios_base4InitD1Ev);
REG_FUNC(0x3483E01D, _ZNSt8ios_base4InitD2Ev);
REG_FUNC(0x78CB190E, _ZNSt8ios_base5_InitEv);
REG_FUNC(0x23B8BEE, _ZNSt8ios_base5_TidyEv);
REG_FUNC(0x023B8BEE, _ZNSt8ios_base5_TidyEv);
REG_FUNC(0xC9DE8208, _ZNSt8ios_base5clearENSt5_IosbIiE8_IostateEb);
REG_FUNC(0xAA9171FB, _ZNSt8ios_base7_AddstdEv);
REG_FUNC(0xFC58778, _ZNSt8ios_base7copyfmtERKS_);
REG_FUNC(0x0FC58778, _ZNSt8ios_base7copyfmtERKS_);
REG_FUNC(0x2DF76755, _ZNSt8ios_base7failureC1ERKS0_);
REG_FUNC(0x94048F7, _ZNSt8ios_base7failureC1ERKSs);
REG_FUNC(0x094048F7, _ZNSt8ios_base7failureC1ERKSs);
REG_FUNC(0x20AAAB95, _ZNSt8ios_base7failureD0Ev);
REG_FUNC(0x31D0197A, _ZNSt8ios_base7failureD1Ev);
REG_FUNC(0x7736E940, _ZNSt8ios_base8_CallfnsENS_5eventE);
@ -1248,18 +1249,18 @@ REG_FUNC(0xEC3804D2, _ZNSt9bad_allocC1Ev);
REG_FUNC(0x6AF75467, _ZNSt9bad_allocC2ERKS_);
REG_FUNC(0x57096162, _ZNSt9bad_allocC2Ev);
REG_FUNC(0xB2DAA408, _ZNSt9bad_allocD0Ev);
REG_FUNC(0x7AEE736, _ZNSt9bad_allocD1Ev);
REG_FUNC(0x07AEE736, _ZNSt9bad_allocD1Ev);
REG_FUNC(0xA9E9B7B7, _ZNSt9bad_allocD2Ev);
REG_FUNC(0x7853E8E5, _ZNSt9bad_allocaSERKS_);
REG_FUNC(0xF78468EB, _ZNSt9basic_iosIcSt11char_traitsIcEED0Ev);
REG_FUNC(0x3150182, _ZNSt9basic_iosIcSt11char_traitsIcEED1Ev);
REG_FUNC(0x03150182, _ZNSt9basic_iosIcSt11char_traitsIcEED1Ev);
REG_FUNC(0x9654168A, _ZNSt9basic_iosIwSt11char_traitsIwEED0Ev);
REG_FUNC(0x8FFB8524, _ZNSt9basic_iosIwSt11char_traitsIwEED1Ev);
REG_FUNC(0x7AF1BB16, _ZNSt9exception18_Set_raise_handlerEPFvRKS_E);
REG_FUNC(0x8C5A4417, _ZNSt9exceptionC1ERKS_);
REG_FUNC(0xFC169D71, _ZNSt9exceptionC1Ev);
REG_FUNC(0x59758E74, _ZNSt9exceptionC2ERKS_);
REG_FUNC(0xE08376, _ZNSt9exceptionC2Ev);
REG_FUNC(0x00E08376, _ZNSt9exceptionC2Ev);
REG_FUNC(0x82EEA67E, _ZNSt9exceptionD0Ev);
REG_FUNC(0x30405D88, _ZNSt9exceptionD1Ev);
REG_FUNC(0xAF7A7081, _ZNSt9exceptionD2Ev);
@ -1271,7 +1272,7 @@ REG_FUNC(0x98BD8AE1, _ZNSt9strstreamD1Ev);
REG_FUNC(0x7D8DFE43, _ZNSt9strstreamD2Ev);
REG_FUNC(0x8D4B1A13, _ZNSt9type_infoD0Ev);
REG_FUNC(0xBD786240, _ZNSt9type_infoD1Ev);
REG_FUNC(0xC04303, _ZNSt9type_infoD2Ev);
REG_FUNC(0x00C04303, _ZNSt9type_infoD2Ev);
REG_FUNC(0x9983D8B9, _ZSt10unexpectedv);
REG_FUNC(0x385D19B2, _ZSt11setiosflagsNSt5_IosbIiE9_FmtflagsE);
REG_FUNC(0xD8A78A61, _ZSt12setprecisioni);
@ -1280,7 +1281,7 @@ REG_FUNC(0x13BAEE11, _ZSt13set_terminatePFvvE);
REG_FUNC(0x644CBAA2, _ZSt14_Debug_messagePKcS0_);
REG_FUNC(0x9B2F0CA6, _ZSt14set_unexpectedPFvvE);
REG_FUNC(0xC107B555, _ZSt15set_new_handlerPFvvE);
REG_FUNC(0x11CEB00, _ZSt18uncaught_exceptionv);
REG_FUNC(0x011CEB00, _ZSt18uncaught_exceptionv);
REG_FUNC(0x36282336, _ZSt21__gen_dummy_typeinfosv);
REG_FUNC(0x3622003F, _ZSt4setwi);
REG_FUNC(0x6CAFA8EF, _ZSt6_ThrowRKSt9exception);
@ -1317,7 +1318,7 @@ REG_FUNC(0x1EB89099, _ZdlPvS_);
REG_FUNC(0xE7FB2BF4, _Znaj);
REG_FUNC(0x31C62481, _ZnajRKSt9nothrow_t);
REG_FUNC(0xF99ED5AC, _Znwj);
REG_FUNC(0xAE71DC3, _ZnwjRKSt9nothrow_t);
REG_FUNC(0x0AE71DC3, _ZnwjRKSt9nothrow_t);
REG_FUNC(0x1818C323, _SNC_get_global_vars);
REG_FUNC(0x2CFA1F15, _SNC_get_tlocal_vars);
REG_FUNC(0x7742D916, _Unwind_Backtrace);
@ -1379,12 +1380,12 @@ REG_FUNC(0xD4C11B17, _ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev);
REG_FUNC(0xBF90A45A, _PJP_CPP_Copyright);
REG_FUNC(0x3B6D9752, _ZNSbIwSt11char_traitsIwESaIwEE4nposE);
REG_FUNC(0xA3498140, _ZNSs4nposE);
REG_FUNC(0x5273EA3, _ZNSt13_Num_int_base10is_boundedE);
REG_FUNC(0x05273EA3, _ZNSt13_Num_int_base10is_boundedE);
REG_FUNC(0x8A0994F8, _ZNSt13_Num_int_base10is_integerE);
REG_FUNC(0x401F1224, _ZNSt13_Num_int_base14is_specializedE);
REG_FUNC(0xA65FE916, _ZNSt13_Num_int_base5radixE);
REG_FUNC(0xF2AA872E, _ZNSt13_Num_int_base8is_exactE);
REG_FUNC(0x8FE5A4F, _ZNSt13_Num_int_base9is_moduloE);
REG_FUNC(0x08FE5A4F, _ZNSt13_Num_int_base9is_moduloE);
REG_FUNC(0x7D4C55EC, _ZNSt14numeric_limitsIaE6digitsE);
REG_FUNC(0xA4E5BF5E, _ZNSt14numeric_limitsIaE8digits10E);
REG_FUNC(0xD9938B84, _ZNSt14numeric_limitsIaE9is_signedE);
@ -1393,7 +1394,7 @@ REG_FUNC(0xF52E5F76, _ZNSt14numeric_limitsIbE8digits10E);
REG_FUNC(0x81B82E0E, _ZNSt14numeric_limitsIbE9is_moduloE);
REG_FUNC(0x9E6D2025, _ZNSt14numeric_limitsIbE9is_signedE);
REG_FUNC(0x810ED593, _ZNSt14numeric_limitsIcE6digitsE);
REG_FUNC(0xAC1A819, _ZNSt14numeric_limitsIcE8digits10E);
REG_FUNC(0x0AC1A819, _ZNSt14numeric_limitsIcE8digits10E);
REG_FUNC(0x660E14E1, _ZNSt14numeric_limitsIcE9is_signedE);
REG_FUNC(0x3EEB3B23, _ZNSt14numeric_limitsIdE12max_exponentE);
REG_FUNC(0x13B634BE, _ZNSt14numeric_limitsIdE12min_exponentE);
@ -1421,10 +1422,10 @@ REG_FUNC(0xE8EB3133, _ZNSt14numeric_limitsIiE8digits10E);
REG_FUNC(0x3AB38CDA, _ZNSt14numeric_limitsIiE9is_signedE);
REG_FUNC(0xEEB7B642, _ZNSt14numeric_limitsIjE6digitsE);
REG_FUNC(0xBCDE68B3, _ZNSt14numeric_limitsIjE8digits10E);
REG_FUNC(0xDA8EFB0, _ZNSt14numeric_limitsIjE9is_signedE);
REG_FUNC(0x0DA8EFB0, _ZNSt14numeric_limitsIjE9is_signedE);
REG_FUNC(0x65DAD8D6, _ZNSt14numeric_limitsIlE6digitsE);
REG_FUNC(0xFB52BC0A, _ZNSt14numeric_limitsIlE8digits10E);
REG_FUNC(0x63544FC, _ZNSt14numeric_limitsIlE9is_signedE);
REG_FUNC(0x063544FC, _ZNSt14numeric_limitsIlE9is_signedE);
REG_FUNC(0x441D097A, _ZNSt14numeric_limitsImE6digitsE);
REG_FUNC(0xB56F1B07, _ZNSt14numeric_limitsImE8digits10E);
REG_FUNC(0xA9799886, _ZNSt14numeric_limitsImE9is_signedE);
@ -1465,13 +1466,13 @@ REG_FUNC(0xE615A657, _ZNSt5_IosbIiE2inE);
REG_FUNC(0x759FD02E, _ZNSt5_IosbIiE3appE);
REG_FUNC(0x6F410A00, _ZNSt5_IosbIiE3ateE);
REG_FUNC(0xD2A42D0C, _ZNSt5_IosbIiE3begE);
REG_FUNC(0x9B45C3B, _ZNSt5_IosbIiE3curE);
REG_FUNC(0x09B45C3B, _ZNSt5_IosbIiE3curE);
REG_FUNC(0x121A8952, _ZNSt5_IosbIiE3decE);
REG_FUNC(0x7CC027CD, _ZNSt5_IosbIiE3endE);
REG_FUNC(0x6E2FF90B, _ZNSt5_IosbIiE3hexE);
REG_FUNC(0xB4A55C29, _ZNSt5_IosbIiE3octE);
REG_FUNC(0x2CB2DC70, _ZNSt5_IosbIiE3outE);
REG_FUNC(0x78E34A9, _ZNSt5_IosbIiE5truncE);
REG_FUNC(0x078E34A9, _ZNSt5_IosbIiE5truncE);
REG_FUNC(0xB5EFA1B3, _ZNSt5_IosbIiE6badbitE);
REG_FUNC(0x5312A538, _ZNSt5_IosbIiE6binaryE);
REG_FUNC(0xD9D32526, _ZNSt5_IosbIiE6skipwsE);
@ -1491,10 +1492,10 @@ REG_FUNC(0x13B38354, _ZNSt9_Num_base11round_styleE);
REG_FUNC(0xB11D20E2, _ZNSt9_Num_base12has_infinityE);
REG_FUNC(0x3E169F74, _ZNSt9_Num_base12max_exponentE);
REG_FUNC(0xD7C041E0, _ZNSt9_Num_base12min_exponentE);
REG_FUNC(0x2DA0D59, _ZNSt9_Num_base13has_quiet_NaNE);
REG_FUNC(0x02DA0D59, _ZNSt9_Num_base13has_quiet_NaNE);
REG_FUNC(0xBE06BD79, _ZNSt9_Num_base14is_specializedE);
REG_FUNC(0xEBBC4DDD, _ZNSt9_Num_base14max_exponent10E);
REG_FUNC(0xFFCF7FC, _ZNSt9_Num_base14min_exponent10E);
REG_FUNC(0x0FFCF7FC, _ZNSt9_Num_base14min_exponent10E);
REG_FUNC(0xB317DDDF, _ZNSt9_Num_base15has_denorm_lossE);
REG_FUNC(0x245D399E, _ZNSt9_Num_base15tinyness_beforeE);
REG_FUNC(0xBD5F0B8A, _ZNSt9_Num_base17has_signaling_NaNE);
@ -1541,7 +1542,7 @@ REG_FUNC(0x525557F3, _ZTI19__simd128_float16_t);
REG_FUNC(0xA4018B84, _ZTI19__simd128_float32_t);
REG_FUNC(0xA1FE4058, _ZTIDh);
REG_FUNC(0x5351829B, _ZTINSt8ios_base7failureE);
REG_FUNC(0xAC6C8F, _ZTIP15__simd64_int8_t);
REG_FUNC(0x00AC6C8F, _ZTIP15__simd64_int8_t);
REG_FUNC(0xD5B056B8, _ZTIP16__simd128_int8_t);
REG_FUNC(0x13975DAE, _ZTIP16__simd64_int16_t);
REG_FUNC(0x963C04E3, _ZTIP16__simd64_int32_t);
@ -1556,7 +1557,7 @@ REG_FUNC(0xA96D02B1, _ZTIP17__simd64_uint16_t);
REG_FUNC(0xEE862280, _ZTIP17__simd64_uint32_t);
REG_FUNC(0xB5CEC4FF, _ZTIP18__simd128_poly16_t);
REG_FUNC(0x46124E82, _ZTIP18__simd128_uint16_t);
REG_FUNC(0x7E6CC17, _ZTIP18__simd128_uint32_t);
REG_FUNC(0x07E6CC17, _ZTIP18__simd128_uint32_t);
REG_FUNC(0x588EBCAD, _ZTIP18__simd64_float16_t);
REG_FUNC(0xDFCB2417, _ZTIP18__simd64_float32_t);
REG_FUNC(0x9502D3C0, _ZTIP19__simd128_float16_t);
@ -1567,8 +1568,8 @@ REG_FUNC(0x60D7D920, _ZTIPK16__simd128_int8_t);
REG_FUNC(0x52A04C47, _ZTIPK16__simd64_int16_t);
REG_FUNC(0xBB64CCF1, _ZTIPK16__simd64_int32_t);
REG_FUNC(0x7C9D0C33, _ZTIPK16__simd64_poly8_t);
REG_FUNC(0x21A57A1, _ZTIPK16__simd64_uint8_t);
REG_FUNC(0x21E3DD1, _ZTIPK17__simd128_int16_t);
REG_FUNC(0x021A57A1, _ZTIPK16__simd64_uint8_t);
REG_FUNC(0x021E3DD1, _ZTIPK17__simd128_int16_t);
REG_FUNC(0xFF8DDBE7, _ZTIPK17__simd128_int32_t);
REG_FUNC(0xB30AB3B5, _ZTIPK17__simd128_poly8_t);
REG_FUNC(0xC8721E86, _ZTIPK17__simd128_uint8_t);
@ -1605,12 +1606,12 @@ REG_FUNC(0xA0F5E8F5, _ZTIPKy);
REG_FUNC(0xA6C2A25C, _ZTIPU8__vectorx);
REG_FUNC(0x81B51915, _ZTIPU8__vectory);
REG_FUNC(0xA7CB4EAA, _ZTIPa);
REG_FUNC(0x87B0FB6, _ZTIPb);
REG_FUNC(0x087B0FB6, _ZTIPb);
REG_FUNC(0xE4D24E14, _ZTIPc);
REG_FUNC(0x6825FFE6, _ZTIPd);
REG_FUNC(0x926B9A3A, _ZTIPe);
REG_FUNC(0x24072F3E, _ZTIPf);
REG_FUNC(0x8B5247B, _ZTIPh);
REG_FUNC(0x08B5247B, _ZTIPh);
REG_FUNC(0x15C21CC8, _ZTIPi);
REG_FUNC(0xD234CF18, _ZTIPj);
REG_FUNC(0x50E25810, _ZTIPl);
@ -1655,7 +1656,7 @@ REG_FUNC(0xA7CA7C93, _ZTISt8bad_cast);
REG_FUNC(0xB93721C7, _ZTISt8ios_base);
REG_FUNC(0x35E135A0, _ZTISt9bad_alloc);
REG_FUNC(0x7BA61382, _ZTISt9basic_iosIcSt11char_traitsIcEE);
REG_FUNC(0x905B8B0, _ZTISt9basic_iosIwSt11char_traitsIwEE);
REG_FUNC(0x0905B8B0, _ZTISt9basic_iosIwSt11char_traitsIwEE);
REG_FUNC(0x1E8C6100, _ZTISt9exception);
REG_FUNC(0x1CC15F54, _ZTISt9strstream);
REG_FUNC(0x8A026EAD, _ZTISt9type_info);
@ -1687,16 +1688,16 @@ REG_FUNC(0xCD2802B5, _ZTS16__simd64_uint8_t);
REG_FUNC(0xC3FA8530, _ZTS17__simd128_int16_t);
REG_FUNC(0x67A63A08, _ZTS17__simd128_int32_t);
REG_FUNC(0x6B26EFF8, _ZTS17__simd128_poly8_t);
REG_FUNC(0x8C4C69F, _ZTS17__simd128_uint8_t);
REG_FUNC(0x08C4C69F, _ZTS17__simd128_uint8_t);
REG_FUNC(0x40BC2E0E, _ZTS17__simd64_poly16_t);
REG_FUNC(0x8D1AE4A7, _ZTS17__simd64_uint16_t);
REG_FUNC(0xC4096952, _ZTS17__simd64_uint32_t);
REG_FUNC(0x16D366F1, _ZTS18__simd128_poly16_t);
REG_FUNC(0x45552A1, _ZTS18__simd128_uint16_t);
REG_FUNC(0x045552A1, _ZTS18__simd128_uint16_t);
REG_FUNC(0x7DBF4FFF, _ZTS18__simd128_uint32_t);
REG_FUNC(0xED26DE1, _ZTS18__simd64_float16_t);
REG_FUNC(0x0ED26DE1, _ZTS18__simd64_float16_t);
REG_FUNC(0xAB0D789A, _ZTS18__simd64_float32_t);
REG_FUNC(0x3200DDB, _ZTS19__simd128_float16_t);
REG_FUNC(0x03200DDB, _ZTS19__simd128_float16_t);
REG_FUNC(0xD54CBD7C, _ZTS19__simd128_float32_t);
REG_FUNC(0xA8E6842E, _ZTSDh);
REG_FUNC(0x5246E71E, _ZTSNSt8ios_base7failureE);
@ -1728,7 +1729,7 @@ REG_FUNC(0x6A472A63, _ZTSPK16__simd64_int32_t);
REG_FUNC(0xC356ACF6, _ZTSPK16__simd64_poly8_t);
REG_FUNC(0x878C75F4, _ZTSPK16__simd64_uint8_t);
REG_FUNC(0x68B777E3, _ZTSPK17__simd128_int16_t);
REG_FUNC(0x61188BD, _ZTSPK17__simd128_int32_t);
REG_FUNC(0x061188BD, _ZTSPK17__simd128_int32_t);
REG_FUNC(0xC7733F13, _ZTSPK17__simd128_poly8_t);
REG_FUNC(0x3D8A69EC, _ZTSPK17__simd128_uint8_t);
REG_FUNC(0xCC081D58, _ZTSPK17__simd64_poly16_t);
@ -1778,12 +1779,12 @@ REG_FUNC(0x982D9703, _ZTSPs);
REG_FUNC(0xE2A0B0A8, _ZTSPt);
REG_FUNC(0xF7B6B02A, _ZTSPv);
REG_FUNC(0xF1C9A755, _ZTSPw);
REG_FUNC(0x968B212, _ZTSPx);
REG_FUNC(0x9787CAD, _ZTSPy);
REG_FUNC(0x0968B212, _ZTSPx);
REG_FUNC(0x09787CAD, _ZTSPy);
REG_FUNC(0xF86F5756, _ZTSSd);
REG_FUNC(0x999300E0, _ZTSSi);
REG_FUNC(0x591C25A3, _ZTSSo);
REG_FUNC(0xFC9D21B, _ZTSSt10bad_typeid);
REG_FUNC(0x0FC9D21B, _ZTSSt10bad_typeid);
REG_FUNC(0x867D109E, _ZTSSt10istrstream);
REG_FUNC(0x88BFC745, _ZTSSt10ostrstream);
REG_FUNC(0xB315CE7A, _ZTSSt11_ctype_base);
@ -1793,7 +1794,7 @@ REG_FUNC(0xBE23707A, _ZTSSt12domain_error);
REG_FUNC(0x9E317CE1, _ZTSSt12length_error);
REG_FUNC(0xD8DAD98D, _ZTSSt12out_of_range);
REG_FUNC(0x1C929309, _ZTSSt12strstreambuf);
REG_FUNC(0xE17E4D6, _ZTSSt13_codecvt_base);
REG_FUNC(0x0E17E4D6, _ZTSSt13_codecvt_base);
REG_FUNC(0x918FE198, _ZTSSt13bad_exception);
REG_FUNC(0x227B4568, _ZTSSt13basic_filebufIcSt11char_traitsIcEE);
REG_FUNC(0xD34BAF59, _ZTSSt13basic_filebufIwSt11char_traitsIwEE);
@ -1822,7 +1823,7 @@ REG_FUNC(0xE5C789D4, _ZTSSt9strstream);
REG_FUNC(0x2856DCD6, _ZTSSt9type_info);
REG_FUNC(0x75A1CED4, _ZTSU8__vectorx);
REG_FUNC(0x508FF61E, _ZTSU8__vectory);
REG_FUNC(0x8E6A51A, _ZTSa);
REG_FUNC(0x08E6A51A, _ZTSa);
REG_FUNC(0x491DB7D3, _ZTSb);
REG_FUNC(0xD657B5A0, _ZTSc);
REG_FUNC(0x322C7CB5, _ZTSd);
@ -1842,7 +1843,7 @@ REG_FUNC(0x402717E4, _ZTSy);
REG_FUNC(0x51B29810, _ZTTSd);
REG_FUNC(0x52128B13, _ZTTSi);
REG_FUNC(0x3C508708, _ZTTSo);
REG_FUNC(0x87753F6, _ZTTSt10istrstream);
REG_FUNC(0x087753F6, _ZTTSt10istrstream);
REG_FUNC(0xE3D7CB30, _ZTTSt10ostrstream);
REG_FUNC(0xBC326B50, _ZTTSt13basic_istreamIwSt11char_traitsIwEE);
REG_FUNC(0x16E32018, _ZTTSt13basic_ostreamIwSt11char_traitsIwEE);
@ -1865,7 +1866,7 @@ REG_FUNC(0xA81AD21D, _ZTVSt10ostrstream);
REG_FUNC(0x82A84E5E, _ZTVSt11logic_error);
REG_FUNC(0x1D583475, _ZTVSt11range_error);
REG_FUNC(0x80C77E16, _ZTVSt12domain_error);
REG_FUNC(0x64ADA35, _ZTVSt12length_error);
REG_FUNC(0x064ADA35, _ZTVSt12length_error);
REG_FUNC(0xDDAE7CBE, _ZTVSt12out_of_range);
REG_FUNC(0x11B2781A, _ZTVSt12strstreambuf);
REG_FUNC(0x75D16BD0, _ZTVSt13_codecvt_base);
@ -1876,7 +1877,7 @@ REG_FUNC(0xB952752B, _ZTVSt13basic_istreamIwSt11char_traitsIwEE);
REG_FUNC(0x48F3405B, _ZTVSt13basic_ostreamIwSt11char_traitsIwEE);
REG_FUNC(0x53F02A18, _ZTVSt13runtime_error);
REG_FUNC(0x177FCCDC, _ZTVSt14overflow_error);
REG_FUNC(0x5548FF7, _ZTVSt15basic_streambufIcSt11char_traitsIcEE);
REG_FUNC(0x05548FF7, _ZTVSt15basic_streambufIcSt11char_traitsIcEE);
REG_FUNC(0xE8A9F32E, _ZTVSt15basic_streambufIwSt11char_traitsIwEE);
REG_FUNC(0x515AE097, _ZTVSt15underflow_error);
REG_FUNC(0x23EEDAF0, _ZTVSt16invalid_argument);
@ -1888,7 +1889,7 @@ REG_FUNC(0xAA09FD32, _ZTVSt8bad_cast);
REG_FUNC(0xD58C5F52, _ZTVSt8ios_base);
REG_FUNC(0xA27EFBA3, _ZTVSt9bad_alloc);
REG_FUNC(0x147996ED, _ZTVSt9basic_iosIcSt11char_traitsIcEE);
REG_FUNC(0xDE4AFE9, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Sd__St9strstream);
REG_FUNC(0x0DE4AFE9, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Sd__St9strstream);
REG_FUNC(0x87D18300, _ZTVSt9basic_iosIcSt11char_traitsIcEE__SiSd__St9strstream);
REG_FUNC(0x3D6A38D3, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Si__Sd);
REG_FUNC(0xA8E795AF, _ZTVSt9basic_iosIcSt11char_traitsIcEE__Si__St10istrstream);
@ -1901,7 +1902,7 @@ REG_FUNC(0xFD21E1F1, _ZTVSt9strstream);
REG_FUNC(0x8E9879A7, _ZTVSt9type_info);
REG_FUNC(0xE63750C1, _ZZNSt13basic_filebufIcSt11char_traitsIcEE5_InitEPSt10_Dnk_filetNS2_7_InitflEE7_Stinit);
REG_FUNC(0x1D4E29BC, _ZZNSt13basic_filebufIwSt11char_traitsIwEE5_InitEPSt10_Dnk_filetNS2_7_InitflEE7_Stinit);
REG_FUNC(0x8A37475, _ZTIN10__cxxabiv116__enum_type_infoE);
REG_FUNC(0x08A37475, _ZTIN10__cxxabiv116__enum_type_infoE);
REG_FUNC(0x66CC7DBB, _ZTIN10__cxxabiv117__array_type_infoE);
REG_FUNC(0x81C44513, _ZTIN10__cxxabiv117__class_type_infoE);
REG_FUNC(0xC35024DA, _ZTIN10__cxxabiv117__pbase_type_infoE);

View File

@ -0,0 +1,90 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/ARMv7/PSVFuncList.h"
extern psv_log_base scePerf;
s32 scePerfArmPmonReset(s32 threadId)
{
scePerf.Todo("scePerfArmPmonReset(threadId=0x%x)", threadId);
return SCE_OK;
}
s32 scePerfArmPmonSelectEvent(s32 threadId, u32 counter, u8 eventCode)
{
throw __FUNCTION__;
}
s32 scePerfArmPmonStart(s32 threadId)
{
throw __FUNCTION__;
}
s32 scePerfArmPmonStop(s32 threadId)
{
throw __FUNCTION__;
}
s32 scePerfArmPmonGetCounterValue(s32 threadId, u32 counter, vm::psv::ptr<u32> pValue)
{
throw __FUNCTION__;
}
s32 scePerfArmPmonSoftwareIncrement(u32 mask)
{
throw __FUNCTION__;
}
u64 scePerfGetTimebaseValue()
{
throw __FUNCTION__;
}
u32 scePerfGetTimebaseFrequency()
{
throw __FUNCTION__;
}
s32 _sceRazorCpuInit(vm::psv::ptr<const void> pBufferBase, u32 bufferSize, u32 numPerfCounters, vm::psv::ptr<vm::psv::ptr<u32>> psceRazorVars)
{
throw __FUNCTION__;
}
s32 sceRazorCpuPushMarker(vm::psv::ptr<const char> szLabel)
{
throw __FUNCTION__;
}
s32 sceRazorCpuPopMarker()
{
throw __FUNCTION__;
}
s32 sceRazorCpuSync()
{
throw __FUNCTION__;
}
#define REG_FUNC(nid, name) reg_psv_func(nid, &scePerf, #name, name)
psv_log_base scePerf("ScePerf", []()
{
scePerf.on_load = nullptr;
scePerf.on_unload = nullptr;
scePerf.on_stop = nullptr;
REG_FUNC(0x35151735, scePerfArmPmonReset);
REG_FUNC(0x63CBEA8B, scePerfArmPmonSelectEvent);
REG_FUNC(0xC9D969D5, scePerfArmPmonStart);
REG_FUNC(0xD1A40F54, scePerfArmPmonStop);
REG_FUNC(0x6132A497, scePerfArmPmonGetCounterValue);
//REG_FUNC(0x12F6C708, scePerfArmPmonSetCounterValue);
REG_FUNC(0x4264B4E7, scePerfArmPmonSoftwareIncrement);
REG_FUNC(0xBD9615E5, scePerfGetTimebaseValue);
REG_FUNC(0x78EA4FFB, scePerfGetTimebaseFrequency);
REG_FUNC(0x7AD6AC30, _sceRazorCpuInit);
REG_FUNC(0xC3DE4C0A, sceRazorCpuPushMarker);
REG_FUNC(0xDC3224C3, sceRazorCpuPopMarker);
REG_FUNC(0x4F1385E3, sceRazorCpuSync);
});

View File

@ -0,0 +1,39 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "Emu/ARMv7/PSVFuncList.h"
extern psv_log_base sceSysmodule;
s32 sceSysmoduleLoadModule(u16 id)
{
sceSysmodule.Error("sceSysmoduleLoadModule(id=0x%04x) -> SCE_OK", id);
return SCE_OK; // loading succeeded
}
s32 sceSysmoduleUnloadModule(u16 id)
{
sceSysmodule.Error("sceSysmoduleUnloadModule(id=0x%04x) -> SCE_OK", id);
return SCE_OK; // unloading succeeded
}
s32 sceSysmoduleIsLoaded(u16 id)
{
sceSysmodule.Error("sceSysmoduleIsLoaded(id=0x%04x) -> SCE_OK", id);
return SCE_OK; // module is loaded
}
#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSysmodule, #name, name)
psv_log_base sceSysmodule("SceSysmodule", []()
{
sceSysmodule.on_load = nullptr;
sceSysmodule.on_unload = nullptr;
sceSysmodule.on_stop = nullptr;
REG_FUNC(0x79A0160A, sceSysmoduleLoadModule);
REG_FUNC(0x31D87805, sceSysmoduleUnloadModule);
REG_FUNC(0x53099B7A, sceSysmoduleIsLoaded);
});

View File

@ -48,6 +48,12 @@ extern psv_log_base sceLibc;
extern psv_log_base sceLibm;
extern psv_log_base sceLibstdcxx;
extern psv_log_base sceLibKernel;
extern psv_log_base sceSysmodule;
extern psv_log_base scePerf;
extern psv_log_base sceCtrl;
extern psv_log_base sceDeci4p;
extern psv_log_base sceDisplay;
extern psv_log_base sceGxm;
void initialize_psv_modules()
{
@ -58,6 +64,12 @@ void initialize_psv_modules()
g_psv_modules.push_back(&sceLibm);
g_psv_modules.push_back(&sceLibstdcxx);
g_psv_modules.push_back(&sceLibKernel);
g_psv_modules.push_back(&sceSysmodule);
g_psv_modules.push_back(&scePerf);
g_psv_modules.push_back(&sceCtrl);
g_psv_modules.push_back(&sceDeci4p);
g_psv_modules.push_back(&sceDisplay);
g_psv_modules.push_back(&sceGxm);
// setup special functions (without NIDs)
psv_func unimplemented;
@ -66,7 +78,7 @@ void initialize_psv_modules()
unimplemented.func.reset(new psv_func_detail::func_binder<void, ARMv7Context&>([](ARMv7Context& context)
{
context.thread.m_last_syscall = vm::psv::read32(context.thread.PC + 4);
throw "Unimplemented function executed";
throw "Unimplemented function";
}));
g_psv_func_list.push_back(unimplemented);

View File

@ -0,0 +1,16 @@
#include "stdafx.h"
#include "Emu/Memory/Memory.h"
#include "Emu/ARMv7/PSVFuncList.h"
#include "Emu/ARMv7/PSVObjectList.h"
#include "Modules/sceLibKernel.h"
#include "Modules/psv_sema.h"
#include "Modules/psv_event_flag.h"
psv_object_list_t<psv_sema_t, SCE_KERNEL_THREADMGR_UID_CLASS_SEMA> g_psv_sema_list;
psv_object_list_t<psv_event_flag_t, SCE_KERNEL_THREADMGR_UID_CLASS_EVENT_FLAG> g_psv_ef_list;
void clear_all_psv_objects()
{
g_psv_sema_list.clear();
g_psv_ef_list.clear();
}

View File

@ -0,0 +1,109 @@
#pragma once
union psv_uid_t
{
// true UID format is partially unknown
s32 uid;
struct
{
u32 oddness : 1; // always 1 for UIDs (to not mess it up with addresses)
u32 number : 15; // ID from 0 to 2^15-1
u32 type : 15; // UID class (psv_object_class_t)
u32 sign : 1; // UIDs are positive, error codes are negative
};
static psv_uid_t make(s32 uid)
{
psv_uid_t result;
result.uid = uid;
return result;
}
};
template<typename T, u32 type>
class psv_object_list_t // Class for managing object data
{
std::array<std::shared_ptr<T>, 0x8000> m_data;
std::mutex m_mutex; // TODO: remove it when shared_ptr atomic ops are fully available
public:
static const u32 uid_class = type;
// check if UID is potentially valid (will return true if the object doesn't exist)
bool check(s32 uid)
{
const psv_uid_t id = psv_uid_t::make(uid);
// check sign bit, uid class and ensure that value is odd
return !id.sign && id.type == uid_class && id.oddness == 1;
}
// share object with UID specified (will return empty pointer if the object doesn't exist or the UID is invalid)
std::shared_ptr<T> find(s32 uid)
{
if (!check(uid))
{
return nullptr;
}
return m_data[psv_uid_t::make(uid).number];
}
std::shared_ptr<T> operator [](s32 uid)
{
return find(uid);
}
// generate UID for newly created object (will return zero if the limit exceeded)
s32 add(std::shared_ptr<T>& data)
{
std::lock_guard<std::mutex> lock(m_mutex);
for (auto& value : m_data)
{
// find an empty position and move the pointer
//std::shared_ptr<T> old_ptr = nullptr;
//if (std::atomic_compare_exchange_strong(&value, &old_ptr, data))
if (!value)
{
value = data;
psv_uid_t id = psv_uid_t::make(1); // odd number
id.type = uid_class; // set type
id.number = &value - m_data.data(); // set position
return id.uid;
}
}
return 0;
}
// remove object with UID specified and share it for the last time (will return empty pointer if the object doesn't exists or the UID is invalid)
std::shared_ptr<T> remove(s32 uid)
{
if (!check(uid))
{
return nullptr;
}
std::lock_guard<std::mutex> lock(m_mutex);
std::shared_ptr<T> old_ptr = nullptr;
m_data[psv_uid_t::make(uid).number].swap(old_ptr);
return old_ptr;
//return std::atomic_exchange<std::shared_ptr<T>>(&m_data[psv_uid_t::make(uid).number], nullptr);
}
// remove all objects
void clear()
{
std::lock_guard<std::mutex> lock(m_mutex);
for (auto& value : m_data)
{
value = nullptr;
}
}
};
void clear_all_psv_objects();

View File

@ -968,7 +968,7 @@ struct cast_ppu_gpr<bool, false>
return value;
}
__forceinline static bool from_gpr(const u64 reg)
__forceinline static bool from_gpr(const u64& reg)
{
return reinterpret_cast<const bool&>(reg);
}

View File

@ -109,7 +109,11 @@ namespace vm
public:
typedef typename std::remove_cv<T>::type type;
static const u32 data_size = sizeof(T);
__forceinline static const u32 data_size()
{
return sizeof(T);
}
__forceinline T* const operator -> () const
{
@ -119,45 +123,45 @@ namespace vm
_ptr_base operator++ (int)
{
AT result = m_addr;
m_addr += data_size;
m_addr += data_size();
return make(result);
}
_ptr_base& operator++ ()
{
m_addr += data_size;
m_addr += data_size();
return *this;
}
_ptr_base operator-- (int)
{
AT result = m_addr;
m_addr -= data_size;
m_addr -= data_size();
return make(result);
}
_ptr_base& operator-- ()
{
m_addr -= data_size;
m_addr -= data_size();
return *this;
}
_ptr_base& operator += (AT count)
{
m_addr += count * data_size;
m_addr += count * data_size();
return *this;
}
_ptr_base& operator -= (AT count)
{
m_addr -= count * data_size;
m_addr -= count * data_size();
return *this;
}
_ptr_base operator + (typename remove_be_t<AT>::type count) const { return make(m_addr + count * data_size); }
_ptr_base operator + (typename to_be_t<AT>::type count) const { return make(m_addr + count * data_size); }
_ptr_base operator - (typename remove_be_t<AT>::type count) const { return make(m_addr - count * data_size); }
_ptr_base operator - (typename to_be_t<AT>::type count) const { return make(m_addr - count * data_size); }
_ptr_base operator + (typename remove_be_t<AT>::type count) const { return make(m_addr + count * data_size()); }
_ptr_base operator + (typename to_be_t<AT>::type count) const { return make(m_addr + count * data_size()); }
_ptr_base operator - (typename remove_be_t<AT>::type count) const { return make(m_addr - count * data_size()); }
_ptr_base operator - (typename to_be_t<AT>::type count) const { return make(m_addr - count * data_size()); }
__forceinline T& operator *() const
{
@ -166,12 +170,12 @@ namespace vm
__forceinline T& operator [](typename remove_be_t<AT>::type index) const
{
return vm::get_ref<T>(vm::cast(m_addr + data_size * index));
return vm::get_ref<T>(vm::cast(m_addr + data_size() * index));
}
__forceinline T& operator [](typename to_be_t<AT>::forced_type index) const
{
return vm::get_ref<T>(vm::cast(m_addr + data_size * index));
return vm::get_ref<T>(vm::cast(m_addr + data_size() * index));
}
__forceinline bool operator <(const _ptr_base& right) const { return m_addr < right.m_addr; }
@ -326,12 +330,12 @@ namespace vm
};
template<typename AT, typename RT, typename ...T>
class _ptr_base<RT(*)(T...), 1, AT>
class _ptr_base<RT(T...), 1, AT>
{
AT m_addr;
public:
typedef RT(*type)(T...);
typedef RT(type)(T...);
RT operator()(CPUThread& CPU, T... args) const; // defined in CB_FUNC.h, call using specified PPU thread context
@ -360,10 +364,10 @@ namespace vm
explicit operator bool() const { return m_addr != 0; }
template<typename AT2>
operator const _ptr_base<RT(*)(T...), 1, AT2>() const
operator const _ptr_base<type, 1, AT2>() const
{
const AT2 addr = convert_le_be<AT2>(m_addr);
return reinterpret_cast<const _ptr_base<RT(*)(T...), 1, AT2>&>(addr);
return reinterpret_cast<const _ptr_base<type, 1, AT2>&>(addr);
}
static const _ptr_base make(const AT& addr)
@ -371,7 +375,7 @@ namespace vm
return reinterpret_cast<const _ptr_base&>(addr);
}
operator const std::function<RT(T...)>() const
operator const std::function<type>() const
{
const AT addr = convert_le_be<AT>(m_addr);
return [addr](T... args) -> RT { return make(addr)(args...); };
@ -380,6 +384,15 @@ namespace vm
_ptr_base& operator = (const _ptr_base& right) = default;
};
template<typename AT, typename RT, typename ...T>
class _ptr_base<RT(*)(T...), 1, AT>
{
AT m_addr;
public:
static_assert(!sizeof(AT), "vm::_ptr_base<> error: use RT(T...) format for functions instead of RT(*)(T...)");
};
//BE pointer to LE data
template<typename T, int lvl = 1, typename AT = u32> struct bptrl : public _ptr_base<T, lvl, typename to_be_t<AT>::type>
{

View File

@ -517,11 +517,12 @@ namespace vm
ptr = vm::get_ptr<T>(addr);
}
private:
stack_allocation() = delete;
stack_allocation(const stack_allocation& r) = delete;
stack_allocation(stack_allocation&& r) = delete;
stack_allocation& operator = (const stack_allocation& r) = delete;
stack_allocation& operator = (stack_allocation&& r) = delete;
stack_allocation(const stack_allocation&) = delete;
stack_allocation(stack_allocation&&) = delete;
stack_allocation& operator = (const stack_allocation&) = delete;
stack_allocation& operator = (stack_allocation&&) = delete;
} const m_data;

View File

@ -220,7 +220,7 @@ struct CellGcmConfig
struct CellGcmContextData;
typedef s32(*CellGcmContextCallback)(vm::ptr<CellGcmContextData>, u32);
typedef s32(CellGcmContextCallback)(vm::ptr<CellGcmContextData>, u32);
struct CellGcmContextData
{

View File

@ -154,10 +154,10 @@ public:
SSemaphore m_sem_flush;
SSemaphore m_sem_flip;
u64 m_last_flip_time;
vm::ptr<void(*)(const u32)> m_flip_handler;
vm::ptr<void(*)(const u32)> m_user_handler;
vm::ptr<void(u32)> m_flip_handler;
vm::ptr<void(u32)> m_user_handler;
u64 m_vblank_count;
vm::ptr<void(*)(const u32)> m_vblank_handler;
vm::ptr<void(u32)> m_vblank_handler;
public:
// Dither
@ -442,6 +442,7 @@ protected:
, m_flip_mode(CELL_GCM_DISPLAY_VSYNC)
, m_debug_level(CELL_GCM_DEBUG_LEVEL0)
, m_frequency_mode(CELL_GCM_DISPLAY_FREQUENCY_DISABLE)
, m_report_main_addr(0)
, m_main_mem_addr(0)
, m_local_mem_addr(0)
, m_draw_mode(0)

View File

@ -163,7 +163,7 @@ namespace cb_detail
namespace vm
{
template<typename AT, typename RT, typename... T>
__forceinline RT _ptr_base<RT(*)(T...), 1, AT>::operator()(CPUThread& CPU, T... args) const
__forceinline RT _ptr_base<RT(T...), 1, AT>::operator()(CPUThread& CPU, T... args) const
{
auto data = vm::get_ptr<be_t<u32>>(vm::cast(m_addr));
const u32 pc = data[0];
@ -174,7 +174,7 @@ namespace vm
}
template<typename AT, typename RT, typename... T>
__forceinline RT _ptr_base<RT(*)(T...), 1, AT>::operator()(T... args) const
__forceinline RT _ptr_base<RT(T...), 1, AT>::operator()(T... args) const
{
return operator()(GetCurrentPPUThread(), args...);
}
@ -186,6 +186,7 @@ __forceinline RT cb_call(PPUThread& CPU, u32 pc, u32 rtoc, T... args)
return cb_detail::_func_caller<RT, T...>::call(CPU, pc, rtoc, args...);
}
// Something is wrong with it (but cb_call<void, ...>() should work anyway)
//template<typename... T>
//void cb_call(PPUThread& CPU, u32 pc, u32 rtoc, T... args)
//{

View File

@ -42,6 +42,14 @@ class PauseCallbackRegisterer
CallbackManager& cb_manager;
u64 cb_tag;
private:
PauseCallbackRegisterer() = delete;
PauseCallbackRegisterer(const PauseCallbackRegisterer& right) = delete;
PauseCallbackRegisterer(PauseCallbackRegisterer&& right) = delete;
PauseCallbackRegisterer& operator =(const PauseCallbackRegisterer& right) = delete;
PauseCallbackRegisterer& operator =(PauseCallbackRegisterer&& right) = delete;
public:
PauseCallbackRegisterer(CallbackManager& cb_manager, const std::function<PauseResumeCB>& func)
: cb_manager(cb_manager)
@ -49,16 +57,8 @@ public:
{
}
PauseCallbackRegisterer() = delete;
PauseCallbackRegisterer(const PauseCallbackRegisterer& right) = delete;
PauseCallbackRegisterer(PauseCallbackRegisterer&& right) = delete;
~PauseCallbackRegisterer()
{
cb_manager.RemovePauseCallback(cb_tag);
}
PauseCallbackRegisterer& operator =(const PauseCallbackRegisterer& right) = delete;
PauseCallbackRegisterer& operator =(PauseCallbackRegisterer&& right) = delete;
};

View File

@ -9,9 +9,9 @@ struct ModuleFunc
{
u32 id;
func_caller* func;
vm::ptr<void(*)()> lle_func;
vm::ptr<void()> lle_func;
ModuleFunc(u32 id, func_caller* func, vm::ptr<void(*)()> lle_func = vm::ptr<void(*)()>::make(0))
ModuleFunc(u32 id, func_caller* func, vm::ptr<void()> lle_func = vm::ptr<void()>::make(0))
: id(id)
, func(func)
, lle_func(lle_func)
@ -129,7 +129,7 @@ public:
bool RemoveId(u32 id);
void RegisterLLEFunc(u32 id, vm::ptr<void(*)()> func)
void RegisterLLEFunc(u32 id, vm::ptr<void()> func)
{
if (auto f = GetFunc(id))
{

View File

@ -366,7 +366,7 @@ enum CellAdecMsgType
CELL_ADEC_MSG_TYPE_SEQDONE,
};
typedef s32(*CellAdecCbMsg)(u32 handle, CellAdecMsgType msgType, s32 msgData, u32 cbArg);
typedef s32(CellAdecCbMsg)(u32 handle, CellAdecMsgType msgType, s32 msgData, u32 cbArg);
struct CellAdecCb
{

View File

@ -217,7 +217,7 @@ struct CellDmuxResource2
be_t<u32> shit[4];
};
typedef u32(*CellDmuxCbMsg)(u32 demuxerHandle, vm::ptr<CellDmuxMsg> demuxerMsg, u32 cbArg);
typedef u32(CellDmuxCbMsg)(u32 demuxerHandle, vm::ptr<CellDmuxMsg> demuxerMsg, u32 cbArg);
struct CellDmuxCb
{
@ -225,7 +225,7 @@ struct CellDmuxCb
be_t<u32> cbArg;
};
typedef u32(*CellDmuxCbEsMsg)(u32 demuxerHandle, u32 esHandle, vm::ptr<CellDmuxEsMsg> esMsg, u32 cbArg);
typedef u32(CellDmuxCbEsMsg)(u32 demuxerHandle, u32 esHandle, vm::ptr<CellDmuxEsMsg> esMsg, u32 cbArg);
struct CellDmuxEsCb
{

View File

@ -202,7 +202,7 @@ int cellGameContentPermit(vm::ptr<char[CELL_GAME_PATH_MAX]> contentInfoPath, vm:
}
int cellGameDataCheckCreate2(PPUThread& CPU, u32 version, vm::ptr<const char> dirName, u32 errDialog,
vm::ptr<void(*)(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container)
vm::ptr<void(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container)
{
cellGame->Warning("cellGameDataCheckCreate(2)(version=0x%x, dirName_addr=0x%x, errDialog=0x%x, funcStat_addr=0x%x, container=%d)",
version, dirName.addr(), errDialog, funcStat.addr(), container);
@ -307,7 +307,7 @@ int cellGameDataCheckCreate2(PPUThread& CPU, u32 version, vm::ptr<const char> di
}
int cellGameDataCheckCreate(PPUThread& CPU, u32 version, vm::ptr<const char> dirName, u32 errDialog,
vm::ptr<void(*)(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container)
vm::ptr<void(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container)
{
// TODO: almost identical, the only difference is that this function will always calculate the size of game data
return cellGameDataCheckCreate2(CPU, version, dirName, errDialog, funcStat, container);

View File

@ -125,12 +125,8 @@ u32 cellGcmGetNotifyDataAddress(u32 index)
{
cellGcmSys->Warning("cellGcmGetNotifyDataAddress(index=%d)", index);
// Get address of 'IO table' and 'EA table'
vm::var<CellGcmOffsetTable> table;
cellGcmGetOffsetTable(table);
// If entry not in use, return NULL
u16 entry = table->eaAddress[241];
u16 entry = offsetTable.eaAddress[241];
if (entry == 0xFFFF) {
return 0;
}
@ -455,7 +451,7 @@ int cellGcmSetFlip(vm::ptr<CellGcmContextData> ctxt, u32 id)
return res < 0 ? CELL_GCM_ERROR_FAILURE : CELL_OK;
}
void cellGcmSetFlipHandler(vm::ptr<void(*)(const u32)> handler)
void cellGcmSetFlipHandler(vm::ptr<void(u32)> handler)
{
cellGcmSys->Warning("cellGcmSetFlipHandler(handler_addr=%d)", handler.addr());
@ -594,14 +590,14 @@ int cellGcmSetTileInfo(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u
return CELL_OK;
}
void cellGcmSetUserHandler(vm::ptr<void(*)(const u32)> handler)
void cellGcmSetUserHandler(vm::ptr<void(u32)> handler)
{
cellGcmSys->Warning("cellGcmSetUserHandler(handler_addr=0x%x)", handler.addr());
Emu.GetGSManager().GetRender().m_user_handler = handler;
}
void cellGcmSetVBlankHandler(vm::ptr<void(*)(const u32)> handler)
void cellGcmSetVBlankHandler(vm::ptr<void(u32)> handler)
{
cellGcmSys->Warning("cellGcmSetVBlankHandler(handler_addr=0x%x)", handler.addr());
@ -1189,7 +1185,7 @@ s32 cellGcmCallback(vm::ptr<CellGcmContextData> context, u32 count)
//auto& ctrl = vm::get_ref<CellGcmControl>(gcm_info.control_addr);
// preparations for changing the place (for optimized FIFO mode)
//auto cmd = vm::ptr<u32>::make(context->current.ToLE());
//auto cmd = vm::ptr<u32>::make(context->current);
//cmd[0] = 0x41D6C;
//cmd[1] = 0x20;
//cmd[2] = 0x41D74;
@ -1205,7 +1201,7 @@ s32 cellGcmCallback(vm::ptr<CellGcmContextData> context, u32 count)
vm::write32(context->current, CELL_GCM_METHOD_FLAG_JUMP | offset); // set JUMP cmd
auto& ctrl = vm::get_ref<CellGcmControl>(gcm_info.control_addr);
ctrl.put.write_relaxed(be_t<u32>::make(offset));
ctrl.put.exchange(be_t<u32>::make(offset));
}
else
{

View File

@ -79,7 +79,7 @@ enum
CELL_MSGDIALOG_BUTTON_ESCAPE = 3,
};
typedef void(*CellMsgDialogCallback)(s32 buttonType, u32 userData);
typedef void(CellMsgDialogCallback)(s32 buttonType, u32 userData);
s32 cellMsgDialogOpen2(u32 type, vm::ptr<const char> msgString, vm::ptr<CellMsgDialogCallback> callback, u32 userData, u32 extParam);
s32 cellMsgDialogOpenErrorCode(u32 errorCode, vm::ptr<CellMsgDialogCallback> callback, u32 userData, u32 extParam);

View File

@ -224,7 +224,7 @@ union CellNetCtlInfo
be_t<u32> ip_config;
s8 dhcp_hostname[256];
s8 pppoe_auth_name[128];
s8 ip_address[16];
char ip_address[16];
s8 netmask[16];
s8 default_route[16];
s8 primary_dns[16];
@ -257,4 +257,4 @@ struct CellNetCtlNatInfo
be_t<u32> mapped_addr;
};
typedef void(*cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, vm::ptr<u32> arg);
typedef void(cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, vm::ptr<u32> arg);

View File

@ -87,8 +87,8 @@ enum CellPngDecDecodeStatus : u32
};
// Callbacks
typedef vm::ptr<void>(*CellPngDecCbControlMalloc)(u32 size, vm::ptr<void> cbCtrlMallocArg);
typedef s32(*CellPngDecCbControlFree)(vm::ptr<void> ptr, vm::ptr<void> cbCtrlFreeArg);
typedef vm::ptr<void>(CellPngDecCbControlMalloc)(u32 size, vm::ptr<void> cbCtrlMallocArg);
typedef s32(CellPngDecCbControlFree)(vm::ptr<void> ptr, vm::ptr<void> cbCtrlFreeArg);
// Structs
struct CellPngDecThreadInParam
@ -283,11 +283,7 @@ struct CellPngDecStrmParam
be_t<u32> strmSize;
};
typedef s32(*CellPngDecCbControlStream)(
vm::ptr<CellPngDecStrmInfo> strmInfo,
vm::ptr<CellPngDecStrmParam> strmParam,
vm::ptr<void> cbCtrlStrmArg
);
typedef s32(CellPngDecCbControlStream)(vm::ptr<CellPngDecStrmInfo> strmInfo, vm::ptr<CellPngDecStrmParam> strmParam, vm::ptr<void> cbCtrlStrmArg);
struct CellPngDecDispInfo
{
@ -310,7 +306,7 @@ struct CellPngDecDispParam
};
// Callback
typedef s32(*CellPngDecCbControlDisp)(vm::ptr<CellPngDecDispInfo> dispInfo, vm::ptr<CellPngDecDispParam> dispParam, vm::ptr<void> cbCtrlDispArg);
typedef s32(CellPngDecCbControlDisp)(vm::ptr<CellPngDecDispInfo> dispInfo, vm::ptr<CellPngDecDispParam> dispParam, vm::ptr<void> cbCtrlDispArg);
// Structs
struct CellPngDecOpnParam

View File

@ -12,8 +12,8 @@ Module *cellResc = nullptr;
extern s32 cellVideoOutConfigure(u32 videoOut, vm::ptr<CellVideoOutConfiguration> config, vm::ptr<CellVideoOutOption> option, u32 waitForEvent);
extern int cellGcmSetFlipMode(u32 mode);
extern void cellGcmSetFlipHandler(vm::ptr<void(*)(const u32)> handler);
extern void cellGcmSetVBlankHandler(vm::ptr<void(*)(const u32)> handler);
extern void cellGcmSetFlipHandler(vm::ptr<void(u32)> handler);
extern void cellGcmSetVBlankHandler(vm::ptr<void(u32)> handler);
extern int cellGcmAddressToOffset(u64 address, vm::ptr<be_t<u32>> offset);
extern int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height);
extern int cellGcmSetPrepareFlip(vm::ptr<CellGcmContextData> ctx, u32 id);
@ -603,7 +603,7 @@ void cellRescExit()
if (IsPalTemporal())
{
cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_DISABLE);
cellGcmSetVBlankHandler(vm::ptr<void(*)(const u32)>::make(0));
cellGcmSetVBlankHandler(vm::ptr<void(u32)>::make(0));
//GcmSysTypePrefix::cellGcmSetSecondVHandler(NULL);
if (IsPalInterpolate())
@ -667,7 +667,7 @@ int cellRescSetDsts(u32 dstsMode, vm::ptr<CellRescDsts> dsts)
return CELL_OK;
}
void SetVBlankHandler(vm::ptr<void(*)(const u32)> handler)
void SetVBlankHandler(vm::ptr<void(u32)> handler)
{
if (!s_rescInternalInstance->m_bInitialized || s_rescInternalInstance->m_dstMode == 0)
{
@ -693,7 +693,7 @@ void SetVBlankHandler(vm::ptr<void(*)(const u32)> handler)
}
void SetFlipHandler(vm::ptr<void(*)(const u32)> handler)
void SetFlipHandler(vm::ptr<void(u32)> handler)
{
if (!s_rescInternalInstance->m_bInitialized || s_rescInternalInstance->m_dstMode == 0)
{
@ -780,20 +780,20 @@ int cellRescSetDisplayMode(u32 displayMode)
cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ);
//cellGcmSetVBlankHandler(IntrHandler50);
//cellGcmSetSecondVHandler(IntrHandler60);
cellGcmSetFlipHandler(vm::ptr<void(*)(const u32)>::make(0));
cellGcmSetFlipHandler(vm::ptr<void(u32)>::make(0));
}
else if (IsPalDrop())
{
//InitLabels();
cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ);
cellGcmSetVBlankHandler(vm::ptr<void(*)(const u32)>::make(0));
cellGcmSetVBlankHandler(vm::ptr<void(u32)>::make(0));
//cellGcmSetSecondVHandler(IntrHandler60Drop);
cellGcmSetFlipHandler(vm::ptr<void(*)(const u32)>::make(0));
cellGcmSetFlipHandler(vm::ptr<void(u32)>::make(0));
}
else if (IsPal60Hsync())
{
cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ);
cellGcmSetVBlankHandler(vm::ptr<void(*)(const u32)>::make(0));
cellGcmSetVBlankHandler(vm::ptr<void(u32)>::make(0));
}
if (s_rescInternalInstance->s_applicationVBlankHandler) SetVBlankHandler(s_rescInternalInstance->s_applicationVBlankHandler);
@ -1073,7 +1073,7 @@ int cellRescSetBufferAddress(vm::ptr<u32> colorBuffers, vm::ptr<u32> vertexArray
return CELL_OK;
}
void cellRescSetFlipHandler(vm::ptr<void(*)(const u32)> handler)
void cellRescSetFlipHandler(vm::ptr<void(u32)> handler)
{
cellResc->Warning("cellRescSetFlipHandler(handler_addr=0x%x)", handler.addr());
@ -1113,7 +1113,7 @@ int cellRescSetRegisterCount()
return CELL_OK;
}
void cellRescSetVBlankHandler(vm::ptr<void(*)(const u32)> handler)
void cellRescSetVBlankHandler(vm::ptr<void(u32)> handler)
{
cellResc->Warning("cellRescSetVBlankHandler(handler_addr=0x%x)", handler.addr());

View File

@ -137,8 +137,8 @@ struct CCellRescInternal
bool m_isDummyFlipped;
u8 m_cgParamIndex[RESC_PARAM_NUM];
u64 m_commandIdxCaF, m_rcvdCmdIdx;
vm::ptr<void(*)(const u32)> s_applicationFlipHandler;
vm::ptr<void(*)(const u32)> s_applicationVBlankHandler;
vm::ptr<void(u32)> s_applicationFlipHandler;
vm::ptr<void(u32)> s_applicationVBlankHandler;
CCellRescInternal()
: m_bInitialized(false)

View File

@ -618,64 +618,64 @@ union CellSailEvent
};
};
typedef u32(*CellSailMemAllocatorFuncAlloc)(u32 pArg, u32 boundary, u32 size);
typedef u32(*CellSailMemAllocatorFuncFree)(u32 pArg, u32 boundary, u32 pMemory);
typedef u32(CellSailMemAllocatorFuncAlloc)(u32 pArg, u32 boundary, u32 size);
typedef u32(CellSailMemAllocatorFuncFree)(u32 pArg, u32 boundary, u32 pMemory);
typedef int(*CellSailSoundAdapterFuncMakeup)(u32 pArg);
typedef int(*CellSailSoundAdapterFuncCleanup)(u32 pArg);
typedef void(*CellSailSoundAdapterFuncFormatChanged)(u32 pArg, vm::ptr<CellSailAudioFormat> pFormat, u32 sessionId);
typedef int(CellSailSoundAdapterFuncMakeup)(u32 pArg);
typedef int(CellSailSoundAdapterFuncCleanup)(u32 pArg);
typedef void(CellSailSoundAdapterFuncFormatChanged)(u32 pArg, vm::ptr<CellSailAudioFormat> pFormat, u32 sessionId);
typedef int(*CellSailGraphicsAdapterFuncMakeup)(u32 pArg);
typedef int(*CellSailGraphicsAdapterFuncCleanup)(u32 pArg);
typedef void(*CellSailGraphicsAdapterFuncFormatChanged)(u32 pArg, vm::ptr<CellSailVideoFormat> pFormat, u32 sessionId);
typedef int(*CellSailGraphicsAdapterFuncAllocFrame)(u32 pArg, u32 size, s32 num, u8 ppFrame);
typedef int(*CellSailGraphicsAdapterFuncFreeFrame)(u32 pArg, s32 num, u8 ppFrame);
typedef int(CellSailGraphicsAdapterFuncMakeup)(u32 pArg);
typedef int(CellSailGraphicsAdapterFuncCleanup)(u32 pArg);
typedef void(CellSailGraphicsAdapterFuncFormatChanged)(u32 pArg, vm::ptr<CellSailVideoFormat> pFormat, u32 sessionId);
typedef int(CellSailGraphicsAdapterFuncAllocFrame)(u32 pArg, u32 size, s32 num, u8 ppFrame);
typedef int(CellSailGraphicsAdapterFuncFreeFrame)(u32 pArg, s32 num, u8 ppFrame);
typedef int(*CellSailSourceFuncMakeup)(u32 pArg, s8 pProtocolNames);
typedef int(*CellSailSourceFuncCleanup)(u32 pArg);
typedef void(*CellSailSourceFuncOpen)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr<CellSailSourceStreamingProfile> pProfile);
typedef void(*CellSailSourceFuncClose)(u32 pArg);
typedef void(*CellSailSourceFuncStart)(u32 pArg, vm::ptr<CellSailSourceStartCommand> pCommand, u32 sessionId);
typedef void(*CellSailSourceFuncStop)(u32 pArg);
typedef void(*CellSailSourceFuncCancel)(u32 pArg);
typedef int(*CellSailSourceFuncCheckout)(u32 pArg, vm::ptr<CellSailSourceBufferItem> ppItem);
typedef int(*CellSailSourceFuncCheckin)(u32 pArg, vm::ptr<CellSailSourceBufferItem> pItem);
typedef int(*CellSailSourceFuncClear)(u32 pArg);
typedef int(*CellSailSourceFuncRead)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize);
typedef int(*CellSailSourceFuncReadSync)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize);
typedef int(*CellSailSourceFuncGetCapabilities)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 pCapabilities);
typedef int(*CellSailSourceFuncInquireCapability)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr<CellSailSourceStartCommand> pCommand);
typedef void(*CellSailSourceCheckFuncError)(u32 pArg, s8 pMsg, s32 line);
typedef int(CellSailSourceFuncMakeup)(u32 pArg, s8 pProtocolNames);
typedef int(CellSailSourceFuncCleanup)(u32 pArg);
typedef void(CellSailSourceFuncOpen)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr<CellSailSourceStreamingProfile> pProfile);
typedef void(CellSailSourceFuncClose)(u32 pArg);
typedef void(CellSailSourceFuncStart)(u32 pArg, vm::ptr<CellSailSourceStartCommand> pCommand, u32 sessionId);
typedef void(CellSailSourceFuncStop)(u32 pArg);
typedef void(CellSailSourceFuncCancel)(u32 pArg);
typedef int(CellSailSourceFuncCheckout)(u32 pArg, vm::ptr<CellSailSourceBufferItem> ppItem);
typedef int(CellSailSourceFuncCheckin)(u32 pArg, vm::ptr<CellSailSourceBufferItem> pItem);
typedef int(CellSailSourceFuncClear)(u32 pArg);
typedef int(CellSailSourceFuncRead)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize);
typedef int(CellSailSourceFuncReadSync)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize);
typedef int(CellSailSourceFuncGetCapabilities)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 pCapabilities);
typedef int(CellSailSourceFuncInquireCapability)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr<CellSailSourceStartCommand> pCommand);
typedef void(CellSailSourceCheckFuncError)(u32 pArg, s8 pMsg, s32 line);
typedef int(*CellSailFsFuncOpen)(s8 pPath, s32 flag, s32 pFd, u32 pArg, u64 size);
typedef int(*CellSailFsFuncOpenSecond)(s8 pPath, s32 flag, s32 fd, u32 pArg, u64 size);
typedef int(*CellSailFsFuncClose)(s32 fd);
typedef int(*CellSailFsFuncFstat)(s32 fd, u32 pStat_addr);
typedef int(*CellSailFsFuncRead)(s32 fd, u32 pBuf, u64 numBytes, u64 pNumRead);
typedef int(*CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, u64 pPosition);
typedef int(*CellSailFsFuncCancel)(s32 fd);
typedef int(CellSailFsFuncOpen)(s8 pPath, s32 flag, s32 pFd, u32 pArg, u64 size);
typedef int(CellSailFsFuncOpenSecond)(s8 pPath, s32 flag, s32 fd, u32 pArg, u64 size);
typedef int(CellSailFsFuncClose)(s32 fd);
typedef int(CellSailFsFuncFstat)(s32 fd, u32 pStat_addr);
typedef int(CellSailFsFuncRead)(s32 fd, u32 pBuf, u64 numBytes, u64 pNumRead);
typedef int(CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, u64 pPosition);
typedef int(CellSailFsFuncCancel)(s32 fd);
typedef int(*CellSailRendererAudioFuncMakeup)(u32 pArg);
typedef int(*CellSailRendererAudioFuncCleanup)(u32 pArg);
typedef void(*CellSailRendererAudioFuncOpen)(u32 pArg, vm::ptr<CellSailAudioFormat> pInfo, u32 frameNum);
typedef void(*CellSailRendererAudioFuncClose)(u32 pArg);
typedef void(*CellSailRendererAudioFuncStart)(u32 pArg, bool buffering);
typedef void(*CellSailRendererAudioFuncStop)(u32 pArg, bool flush);
typedef void(*CellSailRendererAudioFuncCancel)(u32 pArg);
typedef int(*CellSailRendererAudioFuncCheckout)(u32 pArg, vm::ptr<CellSailAudioFrameInfo> ppInfo);
typedef int(*CellSailRendererAudioFuncCheckin)(u32 pArg, vm::ptr<CellSailAudioFrameInfo> pInfo);
typedef int(CellSailRendererAudioFuncMakeup)(u32 pArg);
typedef int(CellSailRendererAudioFuncCleanup)(u32 pArg);
typedef void(CellSailRendererAudioFuncOpen)(u32 pArg, vm::ptr<CellSailAudioFormat> pInfo, u32 frameNum);
typedef void(CellSailRendererAudioFuncClose)(u32 pArg);
typedef void(CellSailRendererAudioFuncStart)(u32 pArg, bool buffering);
typedef void(CellSailRendererAudioFuncStop)(u32 pArg, bool flush);
typedef void(CellSailRendererAudioFuncCancel)(u32 pArg);
typedef int(CellSailRendererAudioFuncCheckout)(u32 pArg, vm::ptr<CellSailAudioFrameInfo> ppInfo);
typedef int(CellSailRendererAudioFuncCheckin)(u32 pArg, vm::ptr<CellSailAudioFrameInfo> pInfo);
typedef int(*CellSailRendererVideoFuncMakeup)(u32 pArg);
typedef int(*CellSailRendererVideoFuncCleanup)(u32 pArg);
typedef void(*CellSailRendererVideoFuncOpen)(u32 pArg, vm::ptr<CellSailVideoFormat> pInfo, u32 frameNum, u32 minFrameNum);
typedef void(*CellSailRendererVideoFuncClose)(u32 pArg);
typedef void(*CellSailRendererVideoFuncStart)(u32 pArg, bool buffering);
typedef void(*CellSailRendererVideoFuncStop)(u32 pArg, bool flush, bool keepRendering);
typedef void(*CellSailRendererVideoFuncCancel)(u32 pArg);
typedef int(*CellSailRendererVideoFuncCheckout)(u32 pArg, vm::ptr<CellSailVideoFrameInfo> ppInfo);
typedef int(*CellSailRendererVideoFuncCheckin)(u32 pArg, vm::ptr<CellSailVideoFrameInfo> pInfo);
typedef int(CellSailRendererVideoFuncMakeup)(u32 pArg);
typedef int(CellSailRendererVideoFuncCleanup)(u32 pArg);
typedef void(CellSailRendererVideoFuncOpen)(u32 pArg, vm::ptr<CellSailVideoFormat> pInfo, u32 frameNum, u32 minFrameNum);
typedef void(CellSailRendererVideoFuncClose)(u32 pArg);
typedef void(CellSailRendererVideoFuncStart)(u32 pArg, bool buffering);
typedef void(CellSailRendererVideoFuncStop)(u32 pArg, bool flush, bool keepRendering);
typedef void(CellSailRendererVideoFuncCancel)(u32 pArg);
typedef int(CellSailRendererVideoFuncCheckout)(u32 pArg, vm::ptr<CellSailVideoFrameInfo> ppInfo);
typedef int(CellSailRendererVideoFuncCheckin)(u32 pArg, vm::ptr<CellSailVideoFrameInfo> pInfo);
typedef void(*CellSailPlayerFuncNotified)(u32 pArg, vm::ptr<CellSailEvent> event, u64 arg0, u64 arg1);
typedef void(CellSailPlayerFuncNotified)(u32 pArg, vm::ptr<CellSailEvent> event, u64 arg0, u64 arg1);
struct CellSailMemAllocatorFuncs
{

View File

@ -256,11 +256,11 @@ struct CellSaveDataDoneGet
// Callback Functions
typedef void(*CellSaveDataFixedCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataListGet> get, vm::ptr<CellSaveDataFixedSet> set);
typedef void(*CellSaveDataListCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataListGet> get, vm::ptr<CellSaveDataListSet> set);
typedef void(*CellSaveDataStatCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataStatGet> get, vm::ptr<CellSaveDataStatSet> set);
typedef void(*CellSaveDataFileCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataFileGet> get, vm::ptr<CellSaveDataFileSet> set);
typedef void(*CellSaveDataDoneCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataDoneGet> get);
typedef void(CellSaveDataFixedCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataListGet> get, vm::ptr<CellSaveDataFixedSet> set);
typedef void(CellSaveDataListCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataListGet> get, vm::ptr<CellSaveDataListSet> set);
typedef void(CellSaveDataStatCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataStatGet> get, vm::ptr<CellSaveDataStatSet> set);
typedef void(CellSaveDataFileCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataFileGet> get, vm::ptr<CellSaveDataFileSet> set);
typedef void(CellSaveDataDoneCallback)(vm::ptr<CellSaveDataCBResult> cbResult, vm::ptr<CellSaveDataDoneGet> get);
// Auxiliary Structs

View File

@ -206,7 +206,7 @@ struct CellSpursWorkloadFlag
atomic_t<u32> flag;
};
typedef void(*CellSpursShutdownCompletionEventHook)(vm::ptr<CellSpurs>, u32 wid, vm::ptr<void> arg);
typedef void(CellSpursShutdownCompletionEventHook)(vm::ptr<CellSpurs>, u32 wid, vm::ptr<void> arg);
// Core CellSpurs structures
struct CellSpurs

View File

@ -1264,7 +1264,7 @@ s32 syncLFQueueCompletePushPointer(vm::ptr<CellSyncLFQueue> queue, s32 pointer,
}
}
s32 _cellSyncLFQueueCompletePushPointer(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(*)(u32 addr, u32 arg)> fpSendSignal)
s32 _cellSyncLFQueueCompletePushPointer(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(u32 addr, u32 arg)> fpSendSignal)
{
cellSync->Todo("_cellSyncLFQueueCompletePushPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)",
queue.addr(), pointer, fpSendSignal.addr());
@ -1280,7 +1280,7 @@ s32 syncLFQueueCompletePushPointer2(vm::ptr<CellSyncLFQueue> queue, s32 pointer,
return CELL_OK;
}
s32 _cellSyncLFQueueCompletePushPointer2(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(*)(u32 addr, u32 arg)> fpSendSignal)
s32 _cellSyncLFQueueCompletePushPointer2(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(u32 addr, u32 arg)> fpSendSignal)
{
// arguments copied from _cellSyncLFQueueCompletePushPointer
cellSync->Todo("_cellSyncLFQueueCompletePushPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)",
@ -1642,7 +1642,7 @@ s32 syncLFQueueCompletePopPointer(vm::ptr<CellSyncLFQueue> queue, s32 pointer, c
}
}
s32 _cellSyncLFQueueCompletePopPointer(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(*)(u32 addr, u32 arg)> fpSendSignal, u32 noQueueFull)
s32 _cellSyncLFQueueCompletePopPointer(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(u32 addr, u32 arg)> fpSendSignal, u32 noQueueFull)
{
// arguments copied from _cellSyncLFQueueCompletePushPointer + unknown argument (noQueueFull taken from LFQueue2CompletePopPointer)
cellSync->Todo("_cellSyncLFQueueCompletePopPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)",
@ -1659,7 +1659,7 @@ s32 syncLFQueueCompletePopPointer2(vm::ptr<CellSyncLFQueue> queue, s32 pointer,
return CELL_OK;
}
s32 _cellSyncLFQueueCompletePopPointer2(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(*)(u32 addr, u32 arg)> fpSendSignal, u32 noQueueFull)
s32 _cellSyncLFQueueCompletePopPointer2(vm::ptr<CellSyncLFQueue> queue, s32 pointer, vm::ptr<s32(u32 addr, u32 arg)> fpSendSignal, u32 noQueueFull)
{
// arguments copied from _cellSyncLFQueueCompletePopPointer
cellSync->Todo("_cellSyncLFQueueCompletePopPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)",

View File

@ -19,7 +19,7 @@
#include "cellGame.h"
#include "cellSysutil.h"
typedef void (*CellHddGameStatCallback)(vm::ptr<CellHddGameCBResult> cbResult, vm::ptr<CellHddGameStatGet> get, vm::ptr<CellHddGameStatSet> set);
typedef void (CellHddGameStatCallback)(vm::ptr<CellHddGameCBResult> cbResult, vm::ptr<CellHddGameStatGet> get, vm::ptr<CellHddGameStatSet> set);
Module *cellSysutil = nullptr;
@ -835,10 +835,10 @@ int cellWebBrowserEstimate2(const vm::ptr<const CellWebBrowserConfig2> config, v
}
extern int cellGameDataCheckCreate2(PPUThread& CPU, u32 version, vm::ptr<const char> dirName, u32 errDialog,
vm::ptr<void(*)(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container);
vm::ptr<void(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container);
extern int cellGameDataCheckCreate(PPUThread& CPU, u32 version, vm::ptr<const char> dirName, u32 errDialog,
vm::ptr<void(*)(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container);
vm::ptr<void(vm::ptr<CellGameDataCBResult> cbResult, vm::ptr<CellGameDataStatGet> get, vm::ptr<CellGameDataStatSet> set)> funcStat, u32 container);
extern void cellSysutil_SaveData_init();

View File

@ -78,7 +78,7 @@ enum
CELL_SYSUTIL_SYSCHAT_VOICE_STREAMING_PAUSED = 0x0164,
};
typedef void(*CellSysutilCallback)(u64 status, u64 param, vm::ptr<void> userdata);
typedef void(CellSysutilCallback)(u64 status, u64 param, vm::ptr<void> userdata);
void sysutilSendSystemCommand(u64 status, u64 param);
@ -238,16 +238,16 @@ struct CellHddGameCBResult
};
typedef s32 CellWebBrowserId;
typedef void* CellWebBrowserClientSession;
typedef void(*CellWebBrowserCallback)(s32 cb_type, vm::ptr<CellWebBrowserClientSession>, vm::ptr<void> usrdata);
typedef void(*CellWebComponentCallback)(CellWebBrowserId, s32 cb_type, vm::ptr<CellWebBrowserClientSession>, vm::ptr<void> usrdata);
typedef void(*CellWebBrowserSystemCallback)(s32 cb_type, vm::ptr<void> usrdata);
typedef vm::ptr<void> CellWebBrowserClientSession;
typedef void(CellWebBrowserCallback)(s32 cb_type, CellWebBrowserClientSession, vm::ptr<void> usrdata);
typedef void(CellWebComponentCallback)(CellWebBrowserId, s32 cb_type, CellWebBrowserClientSession, vm::ptr<void> usrdata);
typedef void(CellWebBrowserSystemCallback)(s32 cb_type, vm::ptr<void> usrdata);
typedef void(*CellWebBrowserMIMETypeCallback)(vm::ptr<const char> mimetype, vm::ptr<const char> url, vm::ptr<void> usrdata);
typedef void(*CellWebBrowserErrorCallback)(s32 err_type, vm::ptr<void> usrdata);
typedef void(*CellWebBrowserStatusCallback)(s32 err_type, vm::ptr<void> usrdata);
typedef void(*CellWebBrowserNotify)(vm::ptr<const char> message, vm::ptr<void> usrdata);
typedef void(*CellWebBrowserUsrdata)(vm::ptr<void> usrdata);
typedef void(CellWebBrowserMIMETypeCallback)(vm::ptr<const char> mimetype, vm::ptr<const char> url, vm::ptr<void> usrdata);
typedef void(CellWebBrowserErrorCallback)(s32 err_type, vm::ptr<void> usrdata);
typedef void(CellWebBrowserStatusCallback)(s32 err_type, vm::ptr<void> usrdata);
typedef void(CellWebBrowserNotify)(vm::ptr<const char> message, vm::ptr<void> usrdata);
typedef void(CellWebBrowserUsrdata)(vm::ptr<void> usrdata);
struct CellWebBrowserMimeSet
{

View File

@ -163,7 +163,7 @@ struct CellVdecPicFormat
u8 alpha;
};
typedef u32(*CellVdecCbMsg)(u32 handle, CellVdecMsgType msgType, s32 msgData, u32 cbArg);
typedef u32(CellVdecCbMsg)(u32 handle, CellVdecMsgType msgType, s32 msgData, u32 cbArg);
// Callback Function Information
struct CellVdecCb

View File

@ -110,7 +110,7 @@ enum
CELL_SSPLAYER_STATE_ON = 0x20,
};
typedef s32(*CellSurMixerNotifyCallbackFunction)(vm::ptr<void> arg, u32 counter, u32 samples);
typedef s32(CellSurMixerNotifyCallbackFunction)(vm::ptr<void> arg, u32 counter, u32 samples);
struct CellSSPlayerConfig
{

View File

@ -134,4 +134,4 @@ enum
SCE_NP_TROPHY_STATUS_CHANGES_DETECTED = 9,
};
typedef s32 (*SceNpTrophyStatusCallback)(u32 context, u32 status, s32 completed, s32 total, u32 arg_addr);
typedef s32 (SceNpTrophyStatusCallback)(u32 context, u32 status, s32 completed, s32 total, u32 arg_addr);

View File

@ -14,7 +14,7 @@ struct HeapInfo
}
};
typedef s32(*spu_printf_cb_t)(u32 arg);
typedef s32(spu_printf_cb_t)(u32 arg);
// Aux
extern vm::ptr<spu_printf_cb_t> spu_printf_agcb;

View File

@ -738,7 +738,7 @@ s32 cellFsStReadWait(u32 fd, u64 size)
return CELL_OK;
}
s32 cellFsStReadWaitCallback(u32 fd, u64 size, vm::ptr<void (*)(int xfd, u64 xsize)> func)
s32 cellFsStReadWaitCallback(u32 fd, u64 size, vm::ptr<void(int xfd, u64 xsize)> func)
{
sys_fs->Todo("cellFsStReadWaitCallback(fd=0x%x, size=0x%llx, func=0x%x)", fd, size, func);
@ -886,7 +886,7 @@ std::atomic<s32> g_FsAioReadID(0);
std::atomic<s32> g_FsAioReadCur(0);
bool aio_init = false;
void fsAioRead(u32 fd, vm::ptr<CellFsAio> aio, int xid, vm::ptr<void(*)(vm::ptr<CellFsAio> xaio, int error, int xid, u64 size)> func)
void fsAioRead(u32 fd, vm::ptr<CellFsAio> aio, int xid, vm::ptr<void(vm::ptr<CellFsAio> xaio, int error, int xid, u64 size)> func)
{
while (g_FsAioReadCur != xid)
{
@ -941,7 +941,7 @@ void fsAioRead(u32 fd, vm::ptr<CellFsAio> aio, int xid, vm::ptr<void(*)(vm::ptr<
g_FsAioReadCur++;
}
s32 cellFsAioRead(vm::ptr<CellFsAio> aio, vm::ptr<s32> id, vm::ptr<void(*)(vm::ptr<CellFsAio> xaio, s32 error, s32 xid, u64 size)> func)
s32 cellFsAioRead(vm::ptr<CellFsAio> aio, vm::ptr<s32> id, vm::ptr<void(vm::ptr<CellFsAio> xaio, s32 error, s32 xid, u64 size)> func)
{
sys_fs->Warning("cellFsAioRead(aio=0x%x, id=0x%x, func=0x%x)", aio, id, func);
@ -966,7 +966,7 @@ s32 cellFsAioRead(vm::ptr<CellFsAio> aio, vm::ptr<s32> id, vm::ptr<void(*)(vm::p
return CELL_OK;
}
s32 cellFsAioWrite(vm::ptr<CellFsAio> aio, vm::ptr<s32> id, vm::ptr<void(*)(vm::ptr<CellFsAio> xaio, s32 error, s32 xid, u64 size)> func)
s32 cellFsAioWrite(vm::ptr<CellFsAio> aio, vm::ptr<s32> id, vm::ptr<void(vm::ptr<CellFsAio> xaio, s32 error, s32 xid, u64 size)> func)
{
sys_fs->Todo("cellFsAioWrite(aio=0x%x, id=0x%x, func=0x%x)", aio, id, func);

View File

@ -210,10 +210,12 @@ s32 sys_ppu_thread_create(vm::ptr<u64> thread_id, u32 entry, u64 arg, s32 prio,
return CELL_OK;
}
void sys_ppu_thread_once(PPUThread& CPU, vm::ptr<atomic_t<u32>> once_ctrl, vm::ptr<void(*)()> init)
void sys_ppu_thread_once(PPUThread& CPU, vm::ptr<atomic_t<u32>> once_ctrl, vm::ptr<void()> init)
{
sys_ppu_thread.Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, init_addr=0x%x)", once_ctrl.addr(), init.addr());
LV2_LOCK(0);
if (once_ctrl->compare_and_swap_test(be_t<u32>::make(SYS_PPU_THREAD_ONCE_INIT), be_t<u32>::make(SYS_PPU_THREAD_DONE_INIT)))
{
init(CPU);

View File

@ -30,6 +30,6 @@ s32 sys_ppu_thread_get_stack_information(PPUThread& CPU, u32 info_addr);
s32 sys_ppu_thread_stop(u64 thread_id);
s32 sys_ppu_thread_restart(u64 thread_id);
s32 sys_ppu_thread_create(vm::ptr<u64> thread_id, u32 entry, u64 arg, s32 prio, u32 stacksize, u64 flags, vm::ptr<const char> threadname);
void sys_ppu_thread_once(PPUThread& CPU, vm::ptr<atomic_t<u32>> once_ctrl, vm::ptr<void(*)()> init);
void sys_ppu_thread_once(PPUThread& CPU, vm::ptr<atomic_t<u32>> once_ctrl, vm::ptr<void()> init);
s32 sys_ppu_thread_get_id(PPUThread& CPU, vm::ptr<u64> thread_id);
s32 sys_ppu_thread_rename(u64 thread_id, vm::ptr<const char> name);

View File

@ -6,6 +6,7 @@
#include "Emu/GameInfo.h"
#include "Emu/ARMv7/PSVFuncList.h"
#include "Emu/ARMv7/PSVObjectList.h"
#include "Emu/SysCalls/Static.h"
#include "Emu/SysCalls/ModuleManager.h"
#include "Emu/Cell/PPUThread.h"
@ -363,6 +364,7 @@ void Emulator::Stop()
LOG_NOTICE(HLE, "All threads stopped...");
finalize_psv_modules();
clear_all_psv_objects();
m_rsx_callback = 0;
// TODO: check finalization order

View File

@ -215,7 +215,7 @@ namespace loader
const u32 addr = *++code;
vm::psv::write16(addr + 0, 0xf240 | (data & 0x800) >> 1 | (data & 0xf000) >> 12); // MOVW
vm::psv::write16(addr + 2, 0x0c00 | (data & 0x700) << 4 | (data & 0xff));
LOG_NOTICE(LOADER, "sceRefs: movw written at 0x%x (data=0x%x)", addr, data);
//LOG_NOTICE(LOADER, "sceRefs: movw written at 0x%x (data=0x%x)", addr, data);
break;
}
case 0x00000030:
@ -224,13 +224,13 @@ namespace loader
const u32 addr = *++code;
vm::psv::write16(addr + 0, 0xf2c0 | (data & 0x8000000) >> 17 | (data & 0xf0000000) >> 28); // MOVT
vm::psv::write16(addr + 2, 0x0c00 | (data & 0x7000000) >> 12 | (data & 0xff0000) >> 16);
LOG_NOTICE(LOADER, "sceRefs: movt written at 0x%x (data=0x%x)", addr, data);
//LOG_NOTICE(LOADER, "sceRefs: movt written at 0x%x (data=0x%x)", addr, data);
break;
}
case 0x00000000:
{
// probably, no operation
LOG_NOTICE(LOADER, "sceRefs: zero code");
//LOG_NOTICE(LOADER, "sceRefs: zero code");
break;
}
default:

View File

@ -325,7 +325,7 @@ namespace loader
for (auto &e : m.second.exports)
{
module->RegisterLLEFunc(e.first, vm::ptr<void(*)()>::make(e.second));
module->RegisterLLEFunc(e.first, vm::ptr<void()>::make(e.second));
}
}
}

View File

@ -56,11 +56,20 @@
<ClCompile Include="Emu\ARMv7\ARMv7DisAsm.cpp" />
<ClCompile Include="Emu\ARMv7\ARMv7Interpreter.cpp" />
<ClCompile Include="Emu\ARMv7\ARMv7Thread.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\psv_event_flag.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\psv_sema.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceCtrl.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceDeci4p.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceDisplay.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceGxm.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceLibKernel.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceLibc.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceLibm.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceLibstdcxx.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\scePerf.cpp" />
<ClCompile Include="Emu\ARMv7\Modules\sceSysmodule.cpp" />
<ClCompile Include="Emu\ARMv7\PSVFuncList.cpp" />
<ClCompile Include="Emu\ARMv7\PSVObjectList.cpp" />
<ClCompile Include="Emu\Audio\AL\OpenALThread.cpp" />
<ClCompile Include="Emu\Audio\AudioDumper.cpp" />
<ClCompile Include="Emu\Audio\AudioManager.cpp" />
@ -274,8 +283,12 @@
<ClInclude Include="Emu\ARMv7\ARMv7Interpreter.h" />
<ClInclude Include="Emu\ARMv7\ARMv7Opcodes.h" />
<ClInclude Include="Emu\ARMv7\ARMv7Thread.h" />
<ClInclude Include="Emu\ARMv7\Modules\psv_event_flag.h" />
<ClInclude Include="Emu\ARMv7\Modules\psv_sema.h" />
<ClInclude Include="Emu\ARMv7\Modules\sceGxm.h" />
<ClInclude Include="Emu\ARMv7\Modules\sceLibKernel.h" />
<ClInclude Include="Emu\ARMv7\PSVFuncList.h" />
<ClInclude Include="Emu\ARMv7\PSVObjectList.h" />
<ClInclude Include="Emu\Audio\AL\OpenALThread.h" />
<ClInclude Include="Emu\Audio\AudioDumper.h" />
<ClInclude Include="Emu\Audio\AudioManager.h" />

View File

@ -87,6 +87,9 @@
<Filter Include="Emu\Audio\XAudio2">
<UniqueIdentifier>{1d6abf72-0f18-43ec-9351-1fed1a3d1a1e}</UniqueIdentifier>
</Filter>
<Filter Include="Emu\CPU\ARMv7\Objects">
<UniqueIdentifier>{368770cf-c8d9-4f4a-9ac3-5bdf48101ffe}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Crypto\aes.cpp">
@ -665,6 +668,33 @@
<ClCompile Include="Emu\ARMv7\ARMv7Decoder.cpp">
<Filter>Emu\CPU\ARMv7</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\PSVObjectList.cpp">
<Filter>Emu\CPU\ARMv7</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\psv_sema.cpp">
<Filter>Emu\CPU\ARMv7\Objects</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\psv_event_flag.cpp">
<Filter>Emu\CPU\ARMv7\Objects</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\sceSysmodule.cpp">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\scePerf.cpp">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\sceCtrl.cpp">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\sceDeci4p.cpp">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\sceDisplay.cpp">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\ARMv7\Modules\sceGxm.cpp">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Crypto\aes.h">
@ -1294,5 +1324,17 @@
<ClInclude Include="Emu\ARMv7\Modules\sceLibKernel.h">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\ARMv7\PSVObjectList.h">
<Filter>Emu\CPU\ARMv7</Filter>
</ClInclude>
<ClInclude Include="Emu\ARMv7\Modules\psv_event_flag.h">
<Filter>Emu\CPU\ARMv7\Objects</Filter>
</ClInclude>
<ClInclude Include="Emu\ARMv7\Modules\psv_sema.h">
<Filter>Emu\CPU\ARMv7\Objects</Filter>
</ClInclude>
<ClInclude Include="Emu\ARMv7\Modules\sceGxm.h">
<Filter>Emu\CPU\ARMv7\Modules</Filter>
</ClInclude>
</ItemGroup>
</Project>