Move sys_process_exit

This commit is contained in:
Nekotekina 2017-09-16 14:52:15 +03:00
parent 01ffaab3e0
commit 669b1385cc
5 changed files with 23 additions and 26 deletions

View File

@ -21,6 +21,23 @@ s64 sys_time_get_system_time()
return get_system_time();
}
s32 sys_process_exit(ppu_thread& ppu, s32 status)
{
vm::temporary_unlock(ppu);
sysPrxForUser.warning("sys_process_exit(status=0x%x)", status);
Emu.CallAfter([]()
{
sysPrxForUser.success("Process finished");
Emu.Stop();
});
thread_ctrl::eternalize();
return CELL_OK;
}
s64 _sys_process_atexitspawn()
{
sysPrxForUser.todo("_sys_process_atexitspawn()");
@ -236,7 +253,6 @@ DECLARE(ppu_module_manager::sysPrxForUser)("sysPrxForUser", []()
REG_FUNC(sysPrxForUser, sys_time_get_system_time);
// TODO: split syscalls and liblv2 functions
REG_FUNC(sysPrxForUser, sys_process_exit);
REG_FUNC(sysPrxForUser, _sys_process_atexitspawn);
REG_FUNC(sysPrxForUser, _sys_process_at_Exitspawn);

View File

@ -7,7 +7,6 @@ extern std::string ppu_get_syscall_name(u64 code)
{
case 1: return "sys_process_getpid";
case 2: return "sys_process_wait_for_child";
case 3: return "sys_process_exit";
case 4: return "sys_process_get_status";
case 5: return "sys_process_detach_child";
case 12: return "sys_process_get_number_of_object";
@ -16,10 +15,10 @@ extern std::string ppu_get_syscall_name(u64 code)
case 18: return "sys_process_getppid";
case 19: return "sys_process_kill";
case 21: return "_sys_process_spawn";
case 22: return "sys_process_exit";
case 22: return "_sys_process_exit";
case 23: return "sys_process_wait_for_child2";
case 25: return "sys_process_get_sdk_version";
case 26: return "_sys_process_exit";
case 26: return "_sys_process_exit2";
case 28: return "_sys_process_get_number_of_object";
case 29: return "sys_process_get_id";
case 30: return "_sys_process_get_paramsfo";

View File

@ -76,11 +76,11 @@ const std::array<ppu_function_t, 1024> s_ppu_syscall_table
BIND_FUNC(sys_process_kill), //19 (0x013)
null_func, //20 (0x014) UNS
null_func,//BIND_FUNC(_sys_process_spawn), //21 (0x015) DBG
null_func,//BIND_FUNC(sys_process_exit), //22 (0x016)
BIND_FUNC(_sys_process_exit), //22 (0x016)
BIND_FUNC(sys_process_wait_for_child2), //23 (0x017) DBG
null_func,//BIND_FUNC(), //24 (0x018) DBG
BIND_FUNC(sys_process_get_sdk_version), //25 (0x019)
null_func,//BIND_FUNC(_sys_process_exit), //26 (0x01A)
BIND_FUNC(_sys_process_exit2), //26 (0x01A)
null_func,//BIND_FUNC(), //27 (0x01B) DBG
null_func,//BIND_FUNC(_sys_process_get_number_of_object)//28 (0x01C) ROOT
BIND_FUNC(sys_process_get_id), //29 (0x01D) ROOT

View File

@ -46,23 +46,6 @@ s32 sys_process_getppid()
return 0;
}
s32 sys_process_exit(ppu_thread& ppu, s32 status)
{
vm::temporary_unlock(ppu);
sys_process.warning("sys_process_exit(status=0x%x)", status);
Emu.CallAfter([]()
{
sys_process.success("Process finished");
Emu.Stop();
});
thread_ctrl::eternalize();
return CELL_OK;
}
template <typename T, typename Get>
u32 idm_get_count()
{

View File

@ -37,10 +37,9 @@ s32 _sys_process_get_paramsfo(vm::ps3::ptr<char> buffer);
s32 sys_process_get_sdk_version(u32 pid, vm::ps3::ptr<s32> version);
s32 sys_process_get_status(u64 unk);
s32 sys_process_is_spu_lock_line_reservation_address(u32 addr, u64 flags);
s32 sys_process_exit(ppu_thread& ppu, s32 errorcode);
s32 _sys_process_exit(ppu_thread& ppu, s32 exitcode, u32 arg2, u32 arg3);
s32 _sys_process_exit2(ppu_thread& ppu, s32 exitcode, u32 arg2, u32 arg3, u32 arg4);
s32 sys_process_kill(u32 pid);
s32 sys_process_wait_for_child(u32 pid, vm::ps3::ptr<u32> status, u64 unk);
s32 sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6);
s32 sys_process_detach_child(u64 unk);
void sys_game_process_exitspawn(vm::ps3::cptr<char> path, u32 argv_addr, u32 envp_addr, u32 data_addr, u32 data_size, u32 prio, u64 flags);
void sys_game_process_exitspawn2(vm::ps3::cptr<char> path, u32 argv_addr, u32 envp_addr, u32 data_addr, u32 data_size, u32 prio, u64 flags);