MCPcopy Create free account
hub / github.com/RPCSX/rpcsx / _sys_process_exit2

Function _sys_process_exit2

kernel/cellos/src/sys_process.cpp:422–459  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

420}
421
422void _sys_process_exit2(ppu_thread &ppu, s32 status,
423 vm::ptr<sys_exit2_param> arg, u32 arg_size, u32 arg4) {
424 ppu.state += cpu_flag::wait;
425
426 sys_process.warning(
427 "_sys_process_exit2(status=%d, arg=*0x%x, arg_size=0x%x, arg4=0x%x)",
428 status, arg, arg_size, arg4);
429
430 auto pstr = +arg->args;
431
432 std::vector<std::string> argv;
433 std::vector<std::string> envp;
434
435 while (auto ptr = *pstr++) {
436 argv.emplace_back(ptr.get_ptr());
437 sys_process.notice(" *** arg: %s", ptr);
438 }
439
440 while (auto ptr = *pstr++) {
441 envp.emplace_back(ptr.get_ptr());
442 sys_process.notice(" *** env: %s", ptr);
443 }
444
445 std::vector<u8> data;
446
447 if (arg_size > 0x1030) {
448 data.resize(0x1000);
449 std::memcpy(data.data(), vm::base(arg.addr() + arg_size - 0x1000), 0x1000);
450 }
451
452 if (argv.empty()) {
453 return _sys_process_exit(ppu, status, 0, 0);
454 }
455
456 // TODO: set prio, flags
457
458 lv2_exitspawn(ppu, argv, envp, data);
459}
460
461void lv2_exitspawn(ppu_thread &ppu, std::vector<std::string> &argv,
462 std::vector<std::string> &envp, std::vector<u8> &data) {

Callers 1

exitspawnFunction · 0.85

Calls 9

baseFunction · 0.85
_sys_process_exitFunction · 0.85
lv2_exitspawnFunction · 0.85
emplace_backMethod · 0.80
get_ptrMethod · 0.45
resizeMethod · 0.45
dataMethod · 0.45
addrMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected