unit ps4_libkernel; {$mode objfpc}{$H+} interface uses Windows, RWLock, sys_types, ps4_map_mm, ps4_mspace_internal, ps4_pthread, ps4_pthread_attr, ps4_pthread_key, ps4_signal, ps4_mutex, ps4_cond, ps4_sema, ps4_rwlock, ps4_barrier, ps4_time, ps4_kernel_file, ps4_queue, ps4_event_flag, ps4_scesocket, ps4_elf, ps4_program, //trace_manager, Classes, SysUtils; function ps4___error:Pointer; SysV_ABI_CDecl; function ps4_sceKernelError(i:Integer):Integer; SysV_ABI_CDecl; function ps4_sceKernelIsNeoMode:Integer; SysV_ABI_CDecl; function ps4_sceKernelIsProspero:Integer; SysV_ABI_CDecl; function ps4_sceKernelGetCompiledSdkVersion(sdkVersion:PDWORD):Integer; SysV_ABI_CDecl; function ps4_sceKernelGetModuleInfoFromAddr(Addr:Pointer;flags:DWORD;info:pSceKernelModuleInfoEx):Integer; SysV_ABI_CDecl; function ps4___elf_phdr_match_addr(phdr_info:pSceKernelModuleInfoEx;addr:Pointer):Integer; SysV_ABI_CDecl; procedure ps4___pthread_cxa_finalize(phdr_info:pSceKernelModuleInfoEx); SysV_ABI_CDecl; const __progname:PChar='eboot.bin'; //argv[0] g_argv:array[0..1] of PChar=('eboot.bin',nil); _env:array[0..2] of PChar=('HOME=/','PWD=/',nil); environ:PPchar=@_env; implementation uses atomic, sys_crt, sys_path, sys_kernel, sys_pthread, sys_signal, sys_dev; type pSceKernelUuid=^SceKernelUuid; SceKernelUuid=TGuid; function ps4_sceKernelUuidCreate(outUuid:pSceKernelUuid):Integer; SysV_ABI_CDecl; begin if (outUuid=nil) then Exit(SCE_KERNEL_ERROR_EINVAL); CreateGUID(outUuid^); _set_errno(0); Result:=0; end; function ps4___error:Pointer; SysV_ABI_CDecl; begin Result:=_error; end; function ps4_sceKernelError(i:Integer):Integer; SysV_ABI_CDecl; begin if (i=0) then Result:=0 else Result:=i-$7ffe0000; end; Const _stack_chk_guard:QWORD=$deadbeefa55a857; ps4_stack_chk_guard:Pointer=@_stack_chk_guard; procedure ps4_stack_chk_fail; SysV_ABI_CDecl; begin Writeln(StdErr,GetCurrentThreadId,':Stack overflow detected! Aborting program.'); asm ud2 end; end; {$I StopNotificationReason.inc} // eStopNotificationReason procedure ps4_sceKernelDebugRaiseException(dwStopReason,dwStopId:DWORD); SysV_ABI_CDecl; begin Writeln(StdErr,'RaiseException:',HexStr(dwStopReason,8),':',HexStr(dwStopId,8),':',GetStopReasonInfo(dwStopReason)); asm ud2 end; end; procedure ps4_sceKernelDebugRaiseExceptionOnReleaseMode(dwStopReason,dwStopId:DWORD); SysV_ABI_CDecl; begin //skip end; procedure ps4_sceKernelDebugOutText(dbg_id:Integer;text:Pchar); SysV_ABI_CDecl; begin Writeln('[DBG]:',text); end; //ps4 neo mode is support? (Ps4 Pro) function ps4_sceKernelIsNeoMode:Integer; SysV_ABI_CDecl; begin Result:=0; //no //Result:=1; //yes end; //ps5? no function ps4_sceKernelIsProspero:Integer; SysV_ABI_CDecl; begin Result:=0; //no end; function ps4_sceKernelHasNeoMode:Integer; SysV_ABI_CDecl; begin Result:=0; //no end; function ps4_sceKernelGetModuleInfoFromAddr(Addr:Pointer;flags:DWORD;info:pSceKernelModuleInfoEx):Integer; SysV_ABI_CDecl; var node:TElf_node; begin if (info=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); if (flags - 1 < 2) then begin if (info=nil) then begin Result:=SCE_KERNEL_ERROR_EFAULT; end else begin _sig_lock; Writeln('GetModuleInfoFromAddr:',HexStr(Addr),':',flags,':',HexStr(info)); node:=ps4_app.AcqureFileByCodeAdr(Addr); if (node=nil) then begin _sig_unlock; info^:=Default(SceKernelModuleInfoEx); Exit(SCE_KERNEL_ERROR_ESRCH); end; info^:=node.GetModuleInfoEx; node.Release; _sig_unlock; Result:=0; end; end else begin Result:=SCE_KERNEL_ERROR_EINVAL; info^:=Default(SceKernelModuleInfoEx); end; end; function ps4_sceKernelGetModuleInfoInternal(handle:Integer;info:pSceKernelModuleInfoEx):Integer; SysV_ABI_CDecl; var node:TElf_node; begin if (info=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); _sig_lock; Writeln('sceKernelGetModuleInfoInternal:',handle,':',HexStr(info)); node:=ps4_app.AcqureFileByHandle(handle); if (node=nil) then begin _sig_unlock; Exit(SCE_KERNEL_ERROR_ESRCH); end; info^:=node.GetModuleInfoEx; node.Release; _sig_unlock; Result:=0; end; function ps4_sceKernelGetModuleInfo(handle:Integer;info:pSceKernelModuleInfo):Integer; SysV_ABI_CDecl; var node:TElf_node; begin if (info=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); _sig_lock; Writeln('sceKernelGetModuleInfo:',handle,':',HexStr(info)); node:=ps4_app.AcqureFileByHandle(handle); if (node=nil) then begin _sig_unlock; Exit(SCE_KERNEL_ERROR_ESRCH); end; info^:=node.GetModuleInfo; node.Release; _sig_unlock; Result:=0; end; function ps4_sceKernelGetModuleInfo2(handle:Integer;info:pSceKernelModuleInfo):Integer; SysV_ABI_CDecl; var node:TElf_node; begin Result:=0; //Almost the same sceKernelGetModuleInfo if (info=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); _sig_lock; Writeln('sceKernelGetModuleInfo2:',handle,':',HexStr(info)); node:=ps4_app.AcqureFileByHandle(handle); if (node=nil) then begin _sig_unlock; Exit(SCE_KERNEL_ERROR_ESRCH); end; info^:=node.GetModuleInfo; if (info^.segmentCount=0) then begin Result:=SCE_KERNEL_ERROR_EPERM; end; node.Release; _sig_unlock; end; function ps4_sceKernelGetModuleInfoForUnwind(addr:Pointer;flags:DWORD;info:pSceModuleInfoForUnwind):Integer; SysV_ABI_CDecl; var node:TElf_node; info_ex:SceKernelModuleInfoEx; begin if (info=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); if (flags - 1 < 2) then begin if (info=nil) then begin Result:=SCE_KERNEL_ERROR_EFAULT; end else begin Result:=SCE_KERNEL_ERROR_EINVAL; if (info^.st_size > 303) then begin _sig_lock; Writeln('sceKernelGetModuleInfoForUnwind:',HexStr(Addr),':',flags,':',HexStr(info)); node:=ps4_app.AcqureFileByCodeAdr(Addr); if (node=nil) then begin _sig_unlock; info^:=Default(SceModuleInfoForUnwind); Exit(SCE_KERNEL_ERROR_ESRCH); end; info_ex:=node.GetModuleInfoEx; node.Release; _sig_unlock; info^.name :=info_ex.name; info^.eh_frame_hdr_addr:=info_ex.eh_frame_hdr_addr; info^.eh_frame_addr :=info_ex.eh_frame_addr; info^.eh_frame_size :=info_ex.eh_frame_size; info^.seg0_addr :=info_ex.segments[0].address; info^.seg0_size :=info_ex.segments[0].size; Result:=0; end; end; end else begin Result:=SCE_KERNEL_ERROR_EINVAL; info^:=Default(SceModuleInfoForUnwind); end; end; function ps4_sceSysmoduleGetModuleInfoForUnwind(addr:Pointer;flags:DWORD;info:pSceModuleInfoForUnwind):Integer; SysV_ABI_CDecl; begin Result:=ps4_sceKernelGetModuleInfoForUnwind(addr,flags,info); end; function ps4__sceKernelRtldThreadAtexitIncrement(Addr:Pointer):Integer; SysV_ABI_CDecl; var node:TElf_node; begin _sig_lock; node:=ps4_app.AcqureFileByCodeAdr(Addr); //inc ref _sig_unlock; Result:=-ord(node=nil); end; procedure ps4__sceKernelRtldThreadAtexitDecrement(Addr:Pointer); SysV_ABI_CDecl; var node:TElf_node; begin _sig_lock; node:=ps4_app.AcqureFileByCodeAdr(Addr); //inc ref _sig_unlock; if (node<>nil) then begin node.Release; //dec ref node.Release; //dec ref end; end; //sysctl to CTL_KERN(1).KERN_PROC(14).KERN_PROC_(44) function ps4_sceKernelGetLibkernelTextLocation(address:PPointer;size:PQWORD):Integer; SysV_ABI_CDecl; var elf:Telf_file; begin Result:=0; elf:=Telf_file(ps4_program.ps4_app.prog); if (elf=nil) then Exit(-1); address^:=elf.ModuleInfo.segmentInfo[0].address; size ^:=elf.ModuleInfo.segmentInfo[0].size; end; type PInternalSegmentInfo=^TInternalSegmentInfo; TInternalSegmentInfo=packed record address:Pointer; size:QWORD; end; function ps4_sceKernelInternalMemoryGetModuleSegmentInfo(pOut:PInternalSegmentInfo):Integer; SysV_ABI_CDecl; begin //pOut^.address:=nil; //pOut^.size:=0; //Result:=0; Result:=ps4_sceKernelGetLibkernelTextLocation(@pOut^.address,@pOut^.size) end; function ps4___elf_phdr_match_addr(phdr_info:pSceKernelModuleInfoEx;addr:Pointer):Integer; SysV_ABI_CDecl; var i,scount:Integer; begin scount:=phdr_info^.segment_count; if (scount=0) then begin Exit(ord(False)); end else begin For i:=0 to scount-1 do begin if ((phdr_info^.segments[i].prot and PF_R)<>0) then begin if (phdr_info^.segments[i].address<=addr) and ((phdr_info^.segments[i].address+phdr_info^.segments[i].size)>addr) then begin Exit(ord(i<>scount)); end; end; end; end; end; procedure ps4___pthread_cxa_finalize(phdr_info:pSceKernelModuleInfoEx); SysV_ABI_CDecl; begin Writeln('__pthread_cxa_finalize'); end; function ps4_sceKernelGetProcParam:PSceProcParam; SysV_ABI_CDecl; begin Writeln('KernelGetProcParam'); Result:=GetSceProcParam; end; type PAppHeapAPI=^TAppHeapAPI; TAppHeapAPI=packed record malloc:Pointer; free :Pointer; unknow:array[0..3] of Pointer; posix_memalign:Pointer; end; procedure ps4__sceKernelRtldSetApplicationHeapAPI(heap_api:PAppHeapAPI); SysV_ABI_CDecl; begin Writeln('SetApplicationHeapAPI:',HexStr(heap_api)); Writeln(' malloc:',HexStr(heap_api^.malloc)); Writeln(' free:',HexStr(heap_api^.free)); Writeln(' posix_memalign:',HexStr(heap_api^.posix_memalign)); end; //cb used in pthread_exit function ps4_sceKernelSetThreadDtors(Proc:TProcedure):Integer; SysV_ABI_CDecl; begin sceKernelThreadDtors:=Proc; Writeln('sceKernelSetThreadDtors:',HexStr(proc)); Result:=0; end; //cb used in sceKernelStopUnloadModule function ps4_sceKernelSetThreadAtexitCount(proc:TKernelAtexitFuncCount):Integer; SysV_ABI_CDecl; begin Writeln('sceKernelSetThreadAtexitCount:',HexStr(proc)); Result:=0; end; //cb used in sceKernelStopUnloadModule function ps4_sceKernelSetThreadAtexitReport(proc:TKernelAtexitReportFunc):Integer; SysV_ABI_CDecl; begin Writeln('sceKernelSetThreadAtexitReport:',HexStr(proc)); Result:=0; end; //extern "C" { //int user_malloc_init(void); //int user_malloc_finalize(void); //void *user_malloc(size_t size); //void user_free(void *ptr); //void *user_calloc(size_t nelem, size_t size); //void *user_realloc(void *ptr, size_t size); //void *user_memalign(size_t boundary, size_t size); //int user_posix_memalign(void **ptr, size_t boundary, size_t size); //void *user_reallocalign(void *ptr, size_t size, size_t boundary); //int user_malloc_stats(SceLibcMallocManagedSize *mmsize); //int user_malloc_stats_fast(SceLibcMallocManagedSize *mmsize); //size_t user_malloc_usable_size(void *ptr); //} function ps4_sceKernelGetSanitizerMallocReplaceExternal:Pointer; SysV_ABI_CDecl; begin //sceKernelDlsym: libSceDbgAddressSanitizer.prx->__asan_malloc_replace_external Result:=nil; end; function ps4_sceKernelGetSanitizerNewReplaceExternal:Pointer; SysV_ABI_CDecl; begin //sceKernelDlsym: libSceDbgAddressSanitizer.prx->__asan_new_replace_external Result:=nil; end; function ps4_sceKernelGetSanitizerMallocReplace:Pointer; SysV_ABI_CDecl; begin //sceKernelDlsym: libSceDbgAddressSanitizer.prx->__asan_malloc_replace Result:=nil; end; function ps4_sceKernelGetSanitizerNewReplace:Pointer; SysV_ABI_CDecl; begin //sceKernelDlsym: libSceDbgAddressSanitizer.prx->__asan_new_replace Result:=nil; end; function ps4_sceKernelIsAddressSanitizerEnabled:Integer; SysV_ABI_CDecl; begin Result:=0; end; function ps4_sceKernelMapSanitizerShadowMemory(addr:Pointer;len:qword;flags:DWORD;name:Pchar):Integer; SysV_ABI_CDecl; begin Result:=SCE_KERNEL_ERROR_EINVAL; end; //get sdk version of game function ps4_sceKernelGetCompiledSdkVersion(sdkVersion:PDWORD):Integer; SysV_ABI_CDecl; var P:PSceProcParam; begin //sys_dynlib_get_proc_param Result:=SCE_KERNEL_ERROR_EINVAL; if (sdkVersion=nil) then Exit; //sys_dynlib_get_proc_param P:=GetSceProcParam; if (P<>nil) then if (P^.Header.Size>$13) then if (P^.Header.Magic=$4942524f) then if (P^.Header.Entry_count<>0) then begin sdkVersion^:=P^.Header.SDK_version; Result:=0; end; end; type p_sw_version=^t_sw_version; t_sw_version=packed record size :QWORD; //(40) str :array[0..27] of Char; version:DWORD; end; //get sdk version of system function ps4_sceKernelGetSystemSwVersion(p:p_sw_version):Integer; SysV_ABI_CDecl; var version:DWORD; begin //sysctlbyname:kern.sdk_version version:=$10508001; //10.50 ps4_sceKernelGetCompiledSdkVersion(@version); //mirror of game version? p^.version:=version; p^.str:=Format('%2x.%03x.%03x',[(version shr 24), ((version shr 12) and $fff), (version and $fff)]); Result:=0; end; const //eLoadOptions LOAD_OPTIONS_DEFAULT =$0000; LOAD_OPTIONS_LOAD_SUSPENDED =$0001; LOAD_OPTIONS_USE_SYSTEM_LIBRARY_VERIFICATION =$0002; LOAD_OPTIONS_SLV_MODE_WARN =$0004; LOAD_OPTIONS_ARG_STACK_SIZE =$0008; LOAD_OPTIONS_FULL_DEBUG_REQUIRED =$0010; //mmap_flags //bit 2 -> first find addr is (1 shl 33) -> //_sceKernelMapFlexibleMemory //_sceKernelMapDirectMemory //sceKernelMapDirectMemory2 //excp_flags //bit 1 -> use in [libkernel_exception] -> // -> sceKernelInstallExceptionHandler // -> sceKernelRemoveExceptionHandler // -> sceKernelAddGpuExceptionEvent // -> sceKernelDeleteGpuExceptionEvent // -> sceKernelBacktraceSelf type PSCE_APP_ENV=^TSCE_APP_ENV; TSCE_APP_ENV=packed record AppId:Integer; //4 mmap_flags:Integer; //4 excp_flags:Integer; //4 AppType:Integer; //4 TitleId:array[0..9] of char; //10 debug_level:Byte; //1 slv_flags:Byte; //1 eLoadOptions unk1:Integer; //4 unk2:array[0..4] of QWORD; //40 end; //sysctl to CTL_KERN(1).KERN_PROC(14).KERN_PROC_APPINFO(35) function ps4_sceKernelGetAppInfo(pid:Integer;env:PSCE_APP_ENV):Integer; SysV_ABI_CDecl; begin //ignore pid if (env=nil) then begin _set_errno(EINVAL); Exit(SCE_KERNEL_ERROR_EINVAL); end; env^:=Default(TSCE_APP_ENV); env^.AppId:=pid; _set_errno(0); Result:=0; end; type p_authinfo=^t_authinfo; t_authinfo=record //0x88 { //know values of app_type 0x3800000000000003 sceSblACMgrIsVdecProxyProcess 0x3800000000000006 sceSblACMgrIsCoredumpProcess 0x3800000000000007 sceSblACMgrIsSyscoreProcess 0x3800000000000009 sceSblACMgrHasUseHp3dPipeCapability 0x380000000000000f sceSblACMgrIsShelluiProcess 0x3800000000000010 sceSblACMgrIsShellcoreProces 0x3800000000000015 0x3800000000000016 0x3800000000000017 0x3800000000000018 0x380000000000001e sceSblACMgrIsFirstImageWriterProcess 0x380000000000001f sceSblACMgrIsAvcontrolProcess 0x3800000000000022 sceSblACMgrIsMinisyscoreProcess 0x3800000000000021 sceSblACMgrIsSafemodeProcess 0x3800000000000026 sceSblACMgrIsSoftwagnerProcess 0x380000000000002d sceSblACMgrIsSafemodeProcess 0x380000000000002e sceSblACMgrIsMinisyscoreProcess 0x3800000000000033 0x3800000000000034 0x3800000000000035 0x3800000000000036 0x3800000000010002 sceSblACMgrIsMountfusefsProcess 0x3800000000010003 sceSblACMgrIsDebuggerProcess 0x3800000000020001 sceSblACMgrIsGaikaiControllerDaemonProcess 0x3800000010000001 sceSblACMgrIsVideoplayerProcess 0x3800000010000002 sceSblACMgrIsVideoplayerProcess 0x3800000010000003 0x3800000010000004 0x3800000010000005 sceSblACMgrIsBdjavaProcess 0x3800000010000009 sceSblACMgrIsDiskplayeruiProcess 0x380000001000000f 0x3800800000000002 sceSblACMgrIsVtrmadminProcess 0x380100000000002c sceSblACMgrHasUseHp3dPipeCapability 0x38X1XXXXXXXXXXXX sceSblACMgrIsDiagProcess 0x38X2XXXXXXXXXXXX sceSblACMgrIsDiagProcess } app_type :qword; app_flags:qword; //62 bit IsSystemProcess;61 bit IsGameProcess1;60 bit IsGameProcess2; app_cap :qword; unknow:array[0..13] of qword end; function ps4_get_authinfo(pid:Integer;info:p_authinfo):Integer; SysV_ABI_CDecl; begin //ignore pid Result:=0; if (info=nil) then begin _set_errno(EINVAL); Exit(SCE_KERNEL_ERROR_EINVAL); end; info^:=Default(t_authinfo); info^.app_type :=$3800000000000000; info^.app_flags:=$2000000000000000; _set_errno(0); Result:=0; end; function _sysctlbyname(name :PChar; oldp :Pointer; oldlenp:Pptruint; newp :Pointer; newlen :ptruint ):Integer; begin Result:=0; Case RawByteString(name) of '':Result:=EINVAL; 'kern.rng_pseudo': begin if (oldlenp=nil) then Exit(EFAULT); Result:=BCryptGenRandom(nil,oldp,oldlenp^,BCRYPT_USE_SYSTEM_PREFERRED_RNG); if (Result<>0) then Result:=EFAULT; end; else begin Writeln(StdErr,'TODO sysctlbyname:',name); Assert(False); end; end; end; function ps4_sysctlbyname(name :PChar; oldp :Pointer; oldlenp:Pptruint; newp :Pointer; newlen :ptruint ):Integer; SysV_ABI_CDecl; begin _sig_lock; Result:=_set_errno(_sysctlbyname(name,oldp,oldlenp,newp,newlen)); _sig_unlock; end; //SetFanThreshold function ps4_gpgi_GwE2Is(param:PByte):Integer; SysV_ABI_CDecl; //gpgi-GwE2Is begin Writeln('SetFanThreshold:',param[5]); Result:=0; end; //dynlib_get_obj_member(handle,8,&ptr); module param //dynlib_get_obj_member(handle,1,&ptr); init //dynlib_get_obj_member(handle,2,&ptr); fini function _sceKernelLoadStartModule(moduleFileName:Pchar; argc:size_t; argp:PPointer; flags:DWORD; pOpt:PSceKernelLoadModuleOpt; pRes:PInteger):SceKernelModule; var node:TElf_node; fn:RawByteString; i:Integer; begin Result:=0; if (pOpt<>nil) then Exit(SCE_KERNEL_ERROR_EINVAL); Writeln('Load Lib:',moduleFileName); Result:=parse_filename(moduleFileName,fn); Case Result of PT_FILE:; else Exit(_set_sce_errno(SCE_KERNEL_ERROR_EACCES)); end; node:=ps4_app.AcqureFileByName(ExtractFileName(fn)); if (node<>nil) then begin Writeln(StdWrn,'File Loaded:',ExtractFileName(fn)); Result:=node.Handle; node.Release; if (pRes<>nil) then pRes^:=0; Exit; end; Writeln('Load File:',fn); node:=LoadPs4ElfFromFile(fn); if (node<>nil) then begin node.IsStatic:=False; node.Acqure; node.Prepare; if not ps4_app.RegistredElf(node) then Assert(false,'RegistredElf'); ps4_app.ResolveDepended(node); ps4_app.LoadSymbolImport(nil); ps4_app.ReLoadSymbolImport(Pointer(node)); ps4_app.InitProt; ps4_app.InitThread(0); node.IsInit:=True; //mark exclude ps4_app.InitCode; i:=node.module_start(argc,argp,nil); Result:=node.Handle; node.Release; if (pRes<>nil) then pRes^:=i; if (i<0) then Result:=SCE_KERNEL_ERROR_EINVAL; end else begin Result:=SCE_KERNEL_ERROR_ENOENT; end; _set_sce_errno(Result); end; function ps4_sceKernelLoadStartModule(moduleFileName:Pchar; argc:size_t; argp:PPointer; flags:DWORD; pOpt:PSceKernelLoadModuleOpt; pRes:PInteger):SceKernelModule; SysV_ABI_CDecl; begin if (flags<>0) then Exit(SCE_KERNEL_ERROR_EINVAL); _sig_lock; Result:=_sceKernelLoadStartModule(moduleFileName, argc, argp, 0, pOpt, pRes); _sig_unlock; end; function ps4_sceKernelLoadStartModuleForSysmodule(moduleFileName:Pchar; argc:size_t; argp:PPointer; flags:DWORD; pOpt:PSceKernelLoadModuleOpt; pRes:PInteger):SceKernelModule; SysV_ABI_CDecl; begin _sig_lock; Result:=_sceKernelLoadStartModule(moduleFileName, argc, argp, flags or $10000, pOpt, pRes); _sig_unlock; end; Function ps4_sceKernelDlsym(handle:Integer;symbol:PChar;addrp:PPointer):Integer; SysV_ABI_CDecl; var node:TElf_node; p:Pointer; begin Result:=0; if (addrp=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); _sig_lock; //sys_dynlib_dlsym Writeln('sceKernelDlsym:',symbol); node:=ps4_app.AcqureFileByHandle(handle); if (node=nil) then begin _sig_unlock; Exit(SCE_KERNEL_ERROR_ESRCH); end; p:=node.get_proc_by_name(symbol); if (p<>nil) then begin addrp^:=p; end else begin Result:=SCE_KERNEL_ERROR_EFAULT; end; node.Release; _sig_unlock; end; Function GetModuleList(list:PInteger;numArray:QWORD;actualNum:PQWORD):Integer; var i:QWORD; node:TElf_node; begin Result:=0; if (list=nil) or (actualNum=nil) then Exit(SCE_KERNEL_ERROR_EFAULT); _sig_lock; ps4_app.LockRd; i:=0; node:=ps4_app.FirstFile; While (node<>nil) do begin if (inumArray) then Result:=SCE_KERNEL_ERROR_ENOMEM; end; Function ps4_sceKernelGetModuleList(list:PInteger;numArray:QWORD;actualNum:PQWORD):Integer; SysV_ABI_CDecl; begin Result:=GetModuleList(list,numArray,actualNum); Writeln('sceKernelGetModuleList:',HexStr(list),' ',numArray); end; Function ps4_sceKernelGetModuleList2(list:PInteger;numArray:QWORD;actualNum:PQWORD):Integer; SysV_ABI_CDecl; begin //alias? Result:=GetModuleList(list,numArray,actualNum); Writeln('sceKernelGetModuleList2:',HexStr(list),' ',numArray); end; Function ps4_sceKernelGetModuleListInternal(list:PInteger;numArray:QWORD;actualNum:PQWORD):Integer; SysV_ABI_CDecl; begin //alias? Result:=GetModuleList(list,numArray,actualNum); Writeln('sceKernelGetModuleListInternal:',HexStr(list),' ',numArray); end; const // //For CPU mode // bit 0: 7/6 CPU mode flag 1: 7 CPU mode 0: 6 CPU mode // bit 1: Reserved // bit 2: CPU #6 flag 1: normal 0: low // SCE_KERNEL_CPUMODE_6CPU =0; SCE_KERNEL_CPUMODE_7CPU_LOW =1; SCE_KERNEL_CPUMODE_7CPU_NORMAL=5; function ps4_sceKernelGetCpumode():Integer; SysV_ABI_CDecl; begin Result:=SCE_KERNEL_CPUMODE_7CPU_NORMAL; end; //wtf it mean? function ps4_sceKernelSetFsstParam(prio:Integer; mask:QWORD //SceKernelCpumask ):Integer; SysV_ABI_CDecl; begin Result:=0; end; procedure ps4_sceKernelSetGPO(uiBits:DWORD); SysV_ABI_CDecl; begin Writeln('sceKernelSetGPO:',BinStr(uiBits,8)); end; function ps4_sceKernelGetGPI:QWORD; SysV_ABI_CDecl; begin Result:=0; end; function ps4_sceKernelGetCpuTemperature(temp:PDWORD):Integer; SysV_ABI_CDecl; begin if (temp=nil) then Exit(_set_errno(EINVAL)); temp^:=36; Result:=_set_errno(0); end; const RUSAGE_SELF = 0; RUSAGE_CHILDREN=-1; RUSAGE_THREAD = 1; type p_rusage=^rusage; rusage=packed record ru_utime :timeval; // user time used ru_stime :timeval; // system time used ru_maxrss :DWORD; // max resident set size ru_ixrss :DWORD; // integral shared memory size * ru_idrss :DWORD; // integral unshared data ru_isrss :DWORD; // integral unshared stack ru_minflt :DWORD; // page reclaims ru_majflt :DWORD; // page faults ru_nswap :DWORD; // swaps ru_inblock :DWORD; // block input operations ru_oublock :DWORD; // block output operations ru_msgsnd :DWORD; // messages sent ru_msgrcv :DWORD; // messages received ru_nsignals:DWORD; // signals received ru_nvcsw :DWORD; // voluntary context switches ru_nivcsw :DWORD; // involuntary end; function ps4_getrusage(who:Integer;usage:p_rusage):Integer; SysV_ABI_CDecl; var ct,et,kt,ut:TFileTime; pmc:_PROCESS_MEMORY_COUNTERS; pio:_IO_COUNTERS; function _timeval(f:TFileTime):timeval; inline; begin Result.tv_sec :=(QWORD(f) div 10000000); Result.tv_usec:=(QWORD(f) mod 10000000) div 10 end; begin Result:=0; if (usage=nil) then Exit(_set_errno(EFAULT)); usage^:=Default(rusage); QWORD(ct):=0; QWORD(et):=0; QWORD(kt):=0; QWORD(ut):=0; pmc:=Default(_PROCESS_MEMORY_COUNTERS); pmc.cb:=sizeof(pmc); pio:=Default(_IO_COUNTERS); Case who of RUSAGE_SELF: begin _sig_lock; GetProcessTimes(GetCurrentProcess,ct,et,kt,ut); GetProcessMemoryInfo(GetCurrentProcess,@pmc,sizeof(pmc)); GetProcessIoCounters(GetCurrentProcess,@pio); _sig_unlock; end; RUSAGE_THREAD: begin _sig_lock; GetThreadTimes(GetCurrentThread,ct,et,kt,ut); _sig_unlock; end; else; Exit(_set_errno(EINVAL)); end; usage^.ru_utime:=_timeval(ut); usage^.ru_stime:=_timeval(kt); usage^.ru_maxrss:=pmc.PeakWorkingSetSize div 1024; //ru_ixrss //ru_idrss //ru_isrss //ru_minflt usage^.ru_majflt:=pmc.PageFaultCount; //ru_nswap usage^.ru_inblock:=pio.ReadOperationCount; usage^.ru_oublock:=pio.WriteOperationCount; //ru_msgsnd //ru_msgrcv //ru_nsignals //ru_nvcsw >NtQuerySystemInformation //ru_nivcsw end; function ps4_getargc:Integer; SysV_ABI_CDecl; begin Result:=1; end; function ps4_getargv:PPChar; SysV_ABI_CDecl; begin Result:=@g_argv; end; // const SCE_COREDUMP_ERROR_NOT_REGISTERED =-2129133567; // 0x81180001 SCE_COREDUMP_ERROR_ALREADY_REGISTERED=-2129133566; // 0x81180002 var g_CoredumpHandler:Pointer=nil; function ps4_sceCoredumpRegisterCoredumpHandler(handler:Pointer; stackSize:QWORD; pCommon:Pointer ):Integer; SysV_ABI_CDecl; begin if CAS(g_CoredumpHandler,nil,handler) then begin Result:=0; end else begin Result:=SCE_COREDUMP_ERROR_ALREADY_REGISTERED; end; end; function ps4_sceCoredumpUnregisterCoredumpHandler:Integer; SysV_ABI_CDecl; begin if (XCHG(g_CoredumpHandler,nil)<>nil) then begin Result:=0; end else begin Result:=SCE_COREDUMP_ERROR_NOT_REGISTERED; end; end; function GetCurrentHwGUID(var g:TGUID):Boolean; var HW:HW_PROFILE_INFOA; begin HW:=Default(HW_PROFILE_INFOA); Result:=GetCurrentHwProfileA(@HW); if Result then begin Result:=TryStringToGUID(HW.szHwProfileGuid,g); end; end; type pSceKernelOpenPsId=^SceKernelOpenPsId; SceKernelOpenPsId=array[0..15] of Byte; function ps4_sceKernelGetOpenPsId(id:pSceKernelOpenPsId):Integer; SysV_ABI_CDecl; var g:TGUID; begin //sysctlbyname:machdep.openpsid if (id=nil) then Exit(EINVAL); g:=Default(TGUID); if GetCurrentHwGUID(g) then begin id^:=SceKernelOpenPsId(g); end else begin id^:=Default(SceKernelOpenPsId); end; end; function ps4_sceKernelGetOpenPsIdForSystem(id:pSceKernelOpenPsId):Integer; SysV_ABI_CDecl; var g:TGUID; begin //sysctlbyname:machdep.openpsid_for_sys if (id=nil) then Exit(EINVAL); g:=Default(TGUID); if GetCurrentHwGUID(g) then begin id^:=SceKernelOpenPsId(g); end else begin id^:=Default(SceKernelOpenPsId); end; end; // const AF_INET = 2; AF_INET6=28; function inet_ntop4(src,dst:PChar;size:Integer):PChar; SysV_ABI_CDecl; var S:RawByteString; begin S:=Format('%u.%u.%u.%u',[src[0], src[1], src[2], src[3]]); if (Length(S)<=0) or (Length(S)>=size) then begin Exit(nil); end; strlcopy(dst,PChar(S),Length(S)); Exit(dst); end; function inet_ntop6(src,dst:PChar;size:Integer):PChar; SysV_ABI_CDecl; const NS_IN6ADDRSZ=16; NS_INT16SZ =2; type t_cur=record base,len:Integer; end; var tp:PChar; tmp,s:RawByteString; best,cur:t_cur; words:array[0..(NS_IN6ADDRSZ div NS_INT16SZ)-1] of DWORD; i:Integer; begin FillChar(words,sizeof(words),0); for i:=0 to NS_IN6ADDRSZ-1 do begin words[i div 2]:=words[i div 2] or (Byte(src[i]) shl ((1 - (i mod 2)) shl 3)); end; best.base:=-1; best.len :=0; cur.base :=-1; cur.len :=0; for i:=0 to (NS_IN6ADDRSZ div NS_INT16SZ)-1 do begin if (words[i]=0) then begin if (cur.base=-1) then begin cur.base:=i; cur.len :=1; end else begin Inc(cur.len); end; end else begin if (cur.base<>-1) then begin if (best.base=-1) or (cur.len > best.len) then begin best:=cur; end; cur.base:=-1; end; end; end; if (cur.base<>-1) then begin if (best.base=-1) or (cur.len > best.len) then begin best:=cur; end; end else if (best.base<>-1) and (best.len < 2) then begin best.base:=-1; end; tmp:='ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255'; tp:=PChar(tmp); for i:=0 to (NS_IN6ADDRSZ div NS_INT16SZ)-1 do begin if (best.base<>-1) and (i >= best.base) and (i < (best.base + best.len)) then begin if (i=best.base) then begin tp^:=':'; Inc(tp); end; continue; end; if (i<>0) then begin tp^:=':'; Inc(tp); end; if (i=6) and (best.base=0) and ( (best.len=6) or ((best.len=7) and (words[7]<>$0001)) or ((best.len=5) and (words[5]=$ffff)) ) then begin if (inet_ntop4(src+12, tp, Length(tmp) - (tp - PChar(tmp)) )=nil) then begin Exit(nil); end; tp:=tp+strlen(tp); break; end; s:=Format('%x',[words[i]]); Move(PChar(s)^,PChar(tp)^,Length(s)); tp:=tp+Length(s); end; if (best.base<>-1) and ((best.base + best.len)=(NS_IN6ADDRSZ div NS_INT16SZ)) then begin tp^:=':'; Inc(tp); end; tp:=#0; Inc(tp); if ((tp - PChar(tmp)) > size) then begin Exit(nil); end; strcopy(dst, PChar(tmp)); Exit(dst); end; function ps4_inet_ntop(af:Integer;src,dst:PChar;size:Integer):PChar; SysV_ABI_CDecl; begin case af of AF_INET :Exit(inet_ntop4(src, dst, size)); AF_INET6:Exit(inet_ntop6(src, dst, size)); else Exit(nil); end; end; // {$I libsysmodule.inc} function ps4_sceSysmoduleLoadModule(id:DWord):Integer; SysV_ABI_CDecl; begin if (Word(id)=0) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); if ((Word(id)=$80) and (SDK_VERSION>=$3000000)) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix, 'sceSysmoduleLoadModule:',GetSysmoduleName(id)); Result:=0; end; function ps4_sceSysmoduleUnloadModule(id:DWord):Integer; SysV_ABI_CDecl; begin if (Word(id)=0) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix, 'sceSysmoduleUnloadModule:',GetSysmoduleName(id)); Result:=0; end; function ps4_sceSysmoduleIsLoaded(id:DWord):Integer; SysV_ABI_CDecl; begin if (Word(id)=0) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix, 'sceSysmoduleIsLoaded:',GetSysmoduleName(id)); Result:=0; //0 -> loaded ; SCE_SYSMODULE_ERROR_UNLOADED -> not loaded end; // function ps4_sceSysmoduleIsLoadedInternal(id:DWord):Integer; SysV_ABI_CDecl; begin if ((id or $80000000)=$80000000) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix, 'sceSysmoduleIsLoadedInternal:',GetSysmoduleInternalName(id)); Result:=0; //0 -> loaded ; SCE_SYSMODULE_ERROR_UNLOADED -> not loaded end; function ps4_sceSysmoduleLoadModuleInternal(id:DWord):Integer; SysV_ABI_CDecl; begin if ((id or $80000000)=$80000000) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); if ((Word(id)=$80) and (SDK_VERSION>=$3000000)) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix, 'sceSysmoduleLoadModuleInternal:',GetSysmoduleInternalName(id)); Result:=0; end; function ps4_sceSysmoduleLoadModuleInternalWithArg(id:DWord; argc:size_t; argp:PPointer; flags:DWORD; pRes:PInteger):Integer; SysV_ABI_CDecl; begin if ((id or $80000000)=$80000000) or (flags<>0) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); if ((Word(id)=$80) and (SDK_VERSION>=$3000000)) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix, 'sceSysmoduleLoadModuleInternalWithArg:',GetSysmoduleInternalName(id)); if (pRes<>nil) then pRes^:=0; Result:=0; end; function ps4_sceSysmoduleUnloadModuleInternal(id:DWord):Integer; SysV_ABI_CDecl; begin if ((id or $80000000)=$80000000) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix,'sceSysmoduleUnloadModuleInternal:',GetSysmoduleInternalName(id)); Result:=0; end; function ps4_sceSysmoduleUnloadModuleInternalWithArg(id:DWord; argc:size_t; argp:PPointer; flags:DWORD; pRes:PInteger):Integer; SysV_ABI_CDecl; begin if ((id or $80000000)=$80000000) or (flags<>0) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); Writeln(SysLogPrefix,'sceSysmoduleUnloadModuleInternalWithArg:',GetSysmoduleInternalName(id)); if (pRes<>nil) then pRes^:=0; Result:=0; end; function ps4_sceSysmoduleLoadModuleByNameInternal(name:PChar; argc:size_t; argp:PPointer; flags:DWORD; pRes:PInteger):Integer; SysV_ABI_CDecl; begin Writeln(StdWrn,SysLogPrefix,'sceSysmoduleLoadModuleByNameInternal:',name); Result:=0; end; function Load_libSceSysmodule(Const name:RawByteString):TElf_node; var lib:PLIBRARY; begin Result:=TElf_node.Create; Result.pFileName:=name; lib:=Result._add_lib('libSceSysmodule'); lib^.set_proc($83C70CDFD11467AA,@ps4_sceSysmoduleLoadModule); lib^.set_proc($791D9B6450005344,@ps4_sceSysmoduleUnloadModule); lib^.set_proc($7CC3F934750E68C9,@ps4_sceSysmoduleIsLoaded); lib^.set_proc($CA714A4396DF1A4B,@ps4_sceSysmoduleIsLoadedInternal); lib^.set_proc($DFD895E44D47A029,@ps4_sceSysmoduleLoadModuleInternal); lib^.set_proc($847AC6A06A0D7FEB,@ps4_sceSysmoduleLoadModuleInternalWithArg); lib^.set_proc($BD7661AED2719067,@ps4_sceSysmoduleUnloadModuleInternal); lib^.set_proc($68A6BA61F04A66CE,@ps4_sceSysmoduleUnloadModuleInternalWithArg); lib^.set_proc($094F26F90B3E1CDE,@ps4_sceSysmoduleLoadModuleByNameInternal); lib^.set_proc($E1F539CAF3A4546E,@ps4_sceSysmoduleGetModuleInfoForUnwind); end; procedure _kernel_init; begin ps4_sceKernelGetCompiledSdkVersion(@SDK_VERSION); _mem_init; _sys_dev_init; ps4_malloc_init; end; function Load_libkernel(Const name:RawByteString):TElf_node; var lib,px:PLIBRARY; begin Result:=TElf_node.Create; Result.pFileName:=name; lib:=Result._add_lib('libkernel'); lib^.set_proc($BCD7B5C387622C2B,@_dynamic_tls_get_addr); lib^.set_proc($763C713A65BAFDAC,@__progname); lib^.set_proc($F41703CA43E6A352,@ps4___error); lib^.set_proc($0F8CA56B7BF1E2D6,@ps4_sceKernelError); lib^.set_proc($7FBB8EC58F663355,@ps4_stack_chk_guard); lib^.set_proc($3AEDE22F569BBE78,@ps4_stack_chk_fail); lib^.set_proc($91BC385071D2632D,@ps4___pthread_cxa_finalize); lib^.set_proc($5E3A28B22C3E5CF2,@ps4_sceKernelUuidCreate); lib^.set_proc($8479594149E5C523,@ps4_getrusage); lib^.set_proc($88A24C5AB02E98F1,@ps4_getargc); lib^.set_proc($1499A09664CC76BE,@ps4_getargv); //signal lib^.set_proc($F85EC2FE1764EFE1,@ps4_sigemptyset); lib^.set_proc($5644C0B2B643709D,@ps4_sigfillset); lib^.set_proc($2548A616D29ED0A7,@ps4_sigaddset); lib^.set_proc($68F732A6D6CE899B,@ps4_sigprocmask); //sigprocmask lib^.set_proc($EB1569CB415DABE2,@ps4_sigprocmask); //_sigprocmask lib^.set_proc($2592B0E7E5AB9DAC,@ps4_pthread_sigmask); lib^.set_proc($72B6F98FB9A49357,@ps4_is_signal_return); lib^.set_proc($2A22443C4591C946,@ps4_sigaction); lib^.set_proc($5400DCDCC350DDC3,@ps4_signal_); lib^.set_proc($38C0D128A019F08E,@ps4_sceKernelDebugRaiseException); lib^.set_proc($CC4FF05C86632E83,@ps4_sceKernelDebugRaiseExceptionOnReleaseMode); lib^.set_proc($F4960DA8DEA300A2,@ps4_sceKernelDebugOutText); lib^.set_proc($3A35ACB5B2113D4A,@ps4___Ux86_64_setcontext); //signal //module lib^.set_proc($0262749A7DA5E253,@ps4_sceKernelGetLibkernelTextLocation); lib^.set_proc($FD84D6FAA5DCDC24,@ps4_sceKernelInternalMemoryGetModuleSegmentInfo); lib^.set_proc($7FB28139A7F2B17A,@ps4_sceKernelGetModuleInfoFromAddr); lib^.set_proc($1D93BBC4EA2CE317,@ps4_sceKernelGetModuleInfoInternal); lib^.set_proc($914A60AD722BCFB4,@ps4_sceKernelGetModuleInfo); lib^.set_proc($4694092552938853,@ps4_sceKernelGetModuleInfoForUnwind); lib^.set_proc($4F3E113540816C62,@ps4__sceKernelRtldThreadAtexitIncrement); lib^.set_proc($F0E9D65E581096FA,@ps4__sceKernelRtldThreadAtexitDecrement); lib^.set_proc($163738FE7D7ECB68,@ps4___elf_phdr_match_addr); lib^.set_proc($F79F6AADACCF22B8,@ps4_sceKernelGetProcParam); lib^.set_proc($A7911C41E11E2401,@ps4__sceKernelRtldSetApplicationHeapAPI); lib^.set_proc($ACD856CFE96F38C5,@ps4_sceKernelSetThreadDtors); lib^.set_proc($A41FF2199DA743DA,@ps4_sceKernelSetThreadAtexitCount); lib^.set_proc($5A109CD70DC48522,@ps4_sceKernelSetThreadAtexitReport); lib^.set_proc($A72E8BF2389500DF,@ps4_sceKernelGetSanitizerMallocReplaceExternal); lib^.set_proc($6E7671620005780D,@ps4_sceKernelGetSanitizerNewReplaceExternal); lib^.set_proc($6EDD0F38451975D1,@ps4_sceKernelGetSanitizerMallocReplace); lib^.set_proc($1782A26F731BD302,@ps4_sceKernelGetSanitizerNewReplace); lib^.set_proc($8E1FBC5E22B82DE1,@ps4_sceKernelIsAddressSanitizerEnabled); lib^.set_proc($F1C0250B3A0E8A27,@ps4_sceKernelMapSanitizerShadowMemory); lib^.set_proc($581EBA7AFBBC6EC5,@ps4_sceKernelGetCompiledSdkVersion); lib^.set_proc($32FD7350E6C7BD72,@ps4_sceKernelGetSystemSwVersion); lib^.set_proc($1BF318BF97AB5DA5,@ps4_sceKernelGetAppInfo); lib^.set_proc($8A031E7E9E1202FD,@ps4_get_authinfo); lib^.set_proc($3210B9DD32A68D50,@ps4_sysctlbyname); lib^.set_proc($829822FC6C04D88B,@ps4_gpgi_GwE2Is); //gpgi-GwE2Is lib^.set_proc($C33BEA4F852A297F,@ps4_sceKernelLoadStartModule); lib^.set_proc($1A0DFEC962FA0D65,@ps4_sceKernelLoadStartModuleForSysmodule); lib^.set_proc($22EC6752E5E4E818,@ps4_sceKernelGetModuleList); lib^.set_proc($BBE9A55245A95376,@ps4_sceKernelGetModuleListInternal); lib^.set_proc($2F01BC8379E2AB00,@ps4_sceKernelDlsym); lib^.set_proc($54EC7C3469875D3B,@ps4_sceKernelGetCpumode); lib^.set_proc($56306D83906D97DE,@ps4_sceKernelSetFsstParam); lib^.set_proc($71AEEFE82C6E973B,@ps4_sceKernelSetGPO); lib^.set_proc($E285D87BD5E69344,@ps4_sceKernelGetGPI); lib^.set_proc($AA22F87C539B0313,@ps4_sceKernelGetCpuTemperature); //module //mutex lib^.set_proc($7501D612C26DA04E,@ps4_pthread_mutexattr_init); lib^.set_proc($1C5EE52B8EB1CE36,@ps4_pthread_mutexattr_destroy); lib^.set_proc($19916523B461B90A,@ps4_pthread_mutexattr_gettype); lib^.set_proc($9839A030E19552A8,@ps4_pthread_mutexattr_settype); lib^.set_proc($3E62FF4F0294CD72,@ps4_pthread_mutexattr_getpshared); lib^.set_proc($117BF7CED1AAB433,@ps4_pthread_mutexattr_setpshared); lib^.set_proc($C83696C54139D2CD,@ps4_pthread_mutexattr_getprotocol); lib^.set_proc($E6DC4A7DC3140289,@ps4_pthread_mutexattr_setprotocol); lib^.set_proc($FA6F3EAAEA8EC213,@ps4_pthread_mutexattr_getprioceiling); lib^.set_proc($64BBDFEA55407383,@ps4_pthread_mutexattr_setprioceiling); lib^.set_proc($B6D1CD7D4FAA0C15,@ps4_pthread_mutex_init); lib^.set_proc($96D09F686AF62461,@ps4_pthread_mutex_destroy); lib^.set_proc($EC7D224CE7224CBA,@ps4_pthread_mutex_lock); lib^.set_proc($D99F8FA58E826898,@ps4_pthread_mutex_unlock); lib^.set_proc($228F7E9D329766D0,@ps4_pthread_mutex_timedlock); lib^.set_proc($2BF8D785BB76827E,@ps4_pthread_mutex_trylock); lib^.set_proc($9D3C59069F183467,@ps4_pthread_mutex_setname_np); lib^.set_proc($17C6D41F0006DBCE,@ps4_scePthreadMutexattrInit); lib^.set_proc($B2658492D8B2C86D,@ps4_scePthreadMutexattrDestroy); lib^.set_proc($82AB84841AD2DA2C,@ps4_scePthreadMutexattrGettype); lib^.set_proc($88CA7C42913E5CEE,@ps4_scePthreadMutexattrSettype); lib^.set_proc($1A84E615EBA2FA14,@ps4_scePthreadMutexattrGetprotocol); lib^.set_proc($D451AF5348BDB1A4,@ps4_scePthreadMutexattrSetprotocol); lib^.set_proc($4A08CCA721FD67D2,@ps4_scePthreadMutexattrGetprioceiling); lib^.set_proc($E77D8869082EC0C8,@ps4_scePthreadMutexattrSetprioceiling); lib^.set_proc($726A3544862F6BDA,@ps4_scePthreadMutexInit); lib^.set_proc($D8E7F47FEDE68611,@ps4_scePthreadMutexDestroy); lib^.set_proc($F542B5BCB6507EDE,@ps4_scePthreadMutexLock); lib^.set_proc($21A7C8D8FC5C3E74,@ps4_scePthreadMutexTimedlock); lib^.set_proc($B67DD5943D211BAD,@ps4_scePthreadMutexUnlock); lib^.set_proc($BA9A15AF330715E1,@ps4_scePthreadMutexTrylock); //mutex //rwlock lib^.set_proc($C4579BB00E18B052,@ps4_pthread_rwlockattr_init); lib^.set_proc($AAC7668178EA4A09,@ps4_pthread_rwlockattr_destroy); lib^.set_proc($97E6C6E5FB189218,@ps4_pthread_rwlockattr_gettype_np); lib^.set_proc($F0DB8E1E24EBD55C,@ps4_pthread_rwlockattr_settype_np); lib^.set_proc($56A10CB82BFFA876,@ps4_pthread_rwlockattr_getpshared); lib^.set_proc($3AE2A0FA44430FB5,@ps4_pthread_rwlockattr_setpshared); lib^.set_proc($CAD4142CDFE784BE,@ps4_pthread_rwlock_init); lib^.set_proc($D78EF56A33F3C61D,@ps4_pthread_rwlock_destroy); lib^.set_proc($8868ECAF5580B48D,@ps4_pthread_rwlock_rdlock); lib^.set_proc($B08951BD0AAC3766,@ps4_pthread_rwlock_wrlock); lib^.set_proc($485C5330E7EE0A41,@ps4_pthread_rwlock_tryrdlock); lib^.set_proc($5E15879FA3F947B5,@ps4_pthread_rwlock_trywrlock); lib^.set_proc($12098BA3A11682CA,@ps4_pthread_rwlock_unlock); lib^.set_proc($C8E7C683F2356482,@ps4_scePthreadRwlockattrInit); lib^.set_proc($8B689F6777D2D9FA,@ps4_scePthreadRwlockattrDestroy); lib^.set_proc($2B296CD42845CAB7,@ps4_scePthreadRwlockattrGettype); lib^.set_proc($87F3A27E2A2E05DF,@ps4_scePthreadRwlockattrSettype); lib^.set_proc($E942C06B47EAE230,@ps4_scePthreadRwlockInit); lib^.set_proc($041FA46F4F1397D0,@ps4_scePthreadRwlockDestroy); lib^.set_proc($3B1F62D1CECBE70D,@ps4_scePthreadRwlockRdlock); lib^.set_proc($9AA74DA2BAC1FA02,@ps4_scePthreadRwlockWrlock); lib^.set_proc($5C3DE60DEC9B0A79,@ps4_scePthreadRwlockTryrdlock); lib^.set_proc($6C81E86424E89AC2,@ps4_scePthreadRwlockTrywrlock); lib^.set_proc($F8BF7C3C86C6B6D9,@ps4_scePthreadRwlockUnlock); //rwlock //Sema lib^.set_proc($A43B8F11FDE6E1F2,@ps4_sem_init); lib^.set_proc($7035B6DF7440C16A,@ps4_sem_destroy); lib^.set_proc($06AF8B455FCDE879,@ps4_sem_getvalue); lib^.set_proc($20A3FCB72A744149,@ps4_sem_post); lib^.set_proc($C39207CAF6A183FA,@ps4_sem_timedwait); lib^.set_proc($5815B3B1189F0840,@ps4_sem_trywait); lib^.set_proc($602579746181702A,@ps4_sem_wait); lib^.set_proc($D7CF31E7B258A748,@ps4_sceKernelCreateSema); lib^.set_proc($47526F9FC6D2096F,@ps4_sceKernelDeleteSema); lib^.set_proc($6716B45614154EC9,@ps4_sceKernelWaitSema); lib^.set_proc($E1CCE9A47062AE2C,@ps4_sceKernelSignalSema); lib^.set_proc($D76C0E1E4F32C1BD,@ps4_sceKernelPollSema); lib^.set_proc($E03334E94D813446,@ps4_sceKernelCancelSema); //Sema //cond lib^.set_proc($98AA13C74DC74560,@ps4_pthread_condattr_init); lib^.set_proc($74972E4159FAFC8C,@ps4_pthread_condattr_destroy); lib^.set_proc($7130D8C5350D3E13,@ps4_pthread_condattr_getclock); lib^.set_proc($123965680A803D9A,@ps4_pthread_condattr_setclock); lib^.set_proc($874A94A92B8E982F,@ps4_pthread_condattr_getpshared); lib^.set_proc($DC1A4FF39D21053E,@ps4_pthread_condattr_setpshared); lib^.set_proc($D13C959383122EDD,@ps4_pthread_cond_init); lib^.set_proc($4575EA8B80AD17CC,@ps4_pthread_cond_destroy); lib^.set_proc($D8C3B2FAB51FBA14,@ps4_pthread_cond_signal); lib^.set_proc($9A4C767D584D32C8,@ps4_pthread_cond_broadcast); lib^.set_proc($3A9F130466392878,@ps4_pthread_cond_wait); lib^.set_proc($DBB6C08222663A1D,@ps4_pthread_cond_timedwait); lib^.set_proc($9B9FF66EC35FBFBB,@ps4_scePthreadCondattrInit); lib^.set_proc($C1A3DCC58891DD60,@ps4_scePthreadCondattrDestroy); lib^.set_proc($D936FDDAABA9AE5D,@ps4_scePthreadCondInit); lib^.set_proc($83E3D977686269C8,@ps4_scePthreadCondDestroy); lib^.set_proc($90387F35FC6032D1,@ps4_scePthreadCondSignal); lib^.set_proc($58A0172785C13D0E,@ps4_scePthreadCondWait); lib^.set_proc($06632363199EC35C,@ps4_scePthreadCondTimedwait); lib^.set_proc($246823ED4BEB97E0,@ps4_scePthreadCondBroadcast); //cond //barrier lib^.set_proc($E27A829CB252BDC9,@ps4_pthread_barrierattr_init); lib^.set_proc($02C0900984DB7BCD,@ps4_pthread_barrierattr_destroy); lib^.set_proc($6B92593328C557AF,@ps4_pthread_barrierattr_getpshared); lib^.set_proc($8EAAC6249C458665,@ps4_pthread_barrierattr_setpshared); lib^.set_proc($66C5CB16D7768EA4,@ps4_pthread_barrier_init); lib^.set_proc($F8FAAE6FD1D908FA,@ps4_pthread_barrier_destroy); lib^.set_proc($09AC1980262A5D69,@ps4_pthread_barrier_wait); lib^.set_proc($5B04510248630113,@ps4_pthread_barrier_setname_np); lib^.set_proc($483915F7184834A2,@ps4_scePthreadBarrierattrInit); lib^.set_proc($A13FE3E03A891D8F,@ps4_scePthreadBarrierattrDestroy); lib^.set_proc($4A4BAD0ED82A27D8,@ps4_scePthreadBarrierattrGetpshared); lib^.set_proc($3697E970B7F93D83,@ps4_scePthreadBarrierattrSetpshared); lib^.set_proc($E5D80E10FB041AAC,@ps4_scePthreadBarrierInit); lib^.set_proc($1EE741D89BF630F6,@ps4_scePthreadBarrierDestroy); lib^.set_proc($B7DBD5C93825A874,@ps4_scePthreadBarrierWait); //barrier //thread lib^.set_proc($B46FBCD396F53639,@ps4_pthread_set_defaultstacksize_np); lib^.set_proc($A1567EFCA819246A,@ps4_scePthreadSetDefaultstacksize); lib^.set_proc($C2D92DFED791D6CA,@ps4_pthread_attr_init); lib^.set_proc($CC772163C7EDE699,@ps4_pthread_attr_destroy); lib^.set_proc($9EC628351CB0C0D8,@ps4_scePthreadAttrInit); lib^.set_proc($EB6282C04326CDC3,@ps4_scePthreadAttrDestroy); lib^.set_proc($D90D33EAB9C1AD31,@ps4_pthread_attr_setstacksize); lib^.set_proc($5135F325B5A18531,@ps4_scePthreadAttrSetstacksize); lib^.set_proc($13EB72A37969E4BC,@ps4_pthread_attr_setdetachstate); lib^.set_proc($FD6ADEA6BB6ED10B,@ps4_scePthreadAttrSetdetachstate); lib^.set_proc($25AACC232F242846,@ps4_pthread_attr_setschedpolicy); lib^.set_proc($E3E87D133C0A1782,@ps4_scePthreadAttrSetschedpolicy); lib^.set_proc($46D2D157FA414D36,@ps4_pthread_attr_getschedpolicy); lib^.set_proc($34CC8843D5A059B5,@ps4_scePthreadAttrGetschedpolicy); lib^.set_proc($7AE291826D159F63,@ps4_pthread_attr_setschedparam); lib^.set_proc($0F3112F61405E1FE,@ps4_scePthreadAttrSetschedparam); lib^.set_proc($AA593DA522EC5263,@ps4_pthread_attr_getschedparam); lib^.set_proc($1573D61CD93C39FD,@ps4_scePthreadAttrGetschedparam); lib^.set_proc($ED99406A411FD108,@ps4_pthread_attr_setinheritsched); lib^.set_proc($7976D44A911A4EC0,@ps4_scePthreadAttrSetinheritsched); lib^.set_proc($DEAC603387B31130,@ps4_scePthreadAttrSetaffinity); lib^.set_proc($F3EB39073663C528,@ps4_scePthreadAttrGetaffinity); lib^.set_proc($24AC86DD25B2035D,@ps4_pthread_attr_setguardsize); lib^.set_proc($125F9C436D03CA75,@ps4_scePthreadAttrSetguardsize); lib^.set_proc($24D91556C54398E9,@ps4_pthread_attr_getguardsize); lib^.set_proc($B711ED9E027E7B27,@ps4_scePthreadAttrGetguardsize); lib^.set_proc($B2E0AB11BAF4C484,@ps4_pthread_attr_setstackaddr); lib^.set_proc($17EC9F99DB88041F,@ps4_scePthreadAttrSetstackaddr); lib^.set_proc($0F198831443FC176,@ps4_pthread_attr_getstackaddr); lib^.set_proc($46EDFA7E24ED2730,@ps4_scePthreadAttrGetstackaddr); lib^.set_proc($D2A3AD091FD91DC9,@ps4_pthread_attr_getstacksize); lib^.set_proc($FDF03EED99460D0B,@ps4_scePthreadAttrGetstacksize); lib^.set_proc($FD2ADB5E9191D5FD,@ps4_pthread_attr_setstack); lib^.set_proc($06F9FBE2F8FAA0BA,@ps4_scePthreadAttrSetstack); lib^.set_proc($BD09B87C312C5A2F,@ps4_pthread_attr_getstack); lib^.set_proc($FEAB8F6B8484254C,@ps4_scePthreadAttrGetstack); lib^.set_proc($5544F5652AC74F42,@ps4_pthread_attr_getdetachstate); lib^.set_proc($25A44CCBE41CA5E5,@ps4_scePthreadAttrGetdetachstate); lib^.set_proc($C755FBE9AAD83315,@ps4_scePthreadAttrGet); lib^.set_proc($2668BEF70F6ED04E,@ps4_pthread_create_name_np); lib^.set_proc($3B184807C2C1FCF4,@ps4_pthread_create); lib^.set_proc($E9482DC15FB4CDBE,@ps4_scePthreadCreate); lib^.set_proc($E2A1AB47A7A83FD6,@ps4_scePthreadDetach); lib^.set_proc($F94D51E16B57BE87,@ps4_pthread_detach); lib^.set_proc($A27358F41CA7FD6F,@ps4_scePthreadJoin); lib^.set_proc($87D09C3F7274A153,@ps4_pthread_join); lib^.set_proc($678428B15B80B00D,@ps4_pthread_once); lib^.set_proc($D786CE00200D4C1A,@ps4_scePthreadOnce); lib^.set_proc($DCFB55EA9DD0357E,@ps4_scePthreadEqual); lib^.set_proc($ED7976E7B33854D2,@ps4_pthread_equal); lib^.set_proc($DE483BAD3D0D408B,@ps4_scePthreadExit); lib^.set_proc($149AD3E4BB940405,@ps4_pthread_exit); lib^.set_proc($A810E6A42C86B2C1,@ps4_scePthreadCancel); lib^.set_proc($959CC5792C4F974F,@ps4_pthread_setcancelstate); lib^.set_proc($D9D121BEF8E5AB7D,@ps4_pthread_setcanceltype); lib^.set_proc($380996ABE3874A3C,@ps4_scePthreadSetcancelstate); lib^.set_proc($B0225DF7D3E172DD,@ps4_scePthreadSetcanceltype); lib^.set_proc($128B51F1ADC049FE,@ps4_pthread_self); lib^.set_proc($688F8E782CFCC6B4,@ps4_scePthreadSelf); lib^.set_proc($1E82D558D6A70417,@ps4_getpid); lib^.set_proc($108FF9FE396AD9D1,@ps4_scePthreadGetthreadid); lib^.set_proc($F47CDF85DB444A2A,@ps4_pthread_getname_np); lib^.set_proc($1E8C3B07C39EB7A9,@ps4_scePthreadGetname); lib^.set_proc($F6FC8FE99EDBAB37,@ps4_pthread_rename_np); lib^.set_proc($181518EF2C1D50B1,@ps4_scePthreadRename); lib^.set_proc($A31329F2E3EA6BE5,@ps4_pthread_set_name_np); lib^.set_proc($5DE4EAC3ED19975D,@ps4_scePthreadSetName); lib^.set_proc($6EDDC24C12A61B22,@ps4_scePthreadSetaffinity); lib^.set_proc($ADCAD5149B105916,@ps4_scePthreadGetaffinity); lib^.set_proc($8345530717C9CAED,@ps4_sceKernelGetCurrentCpu); lib^.set_proc($68EF964B6C56BA8E,@ps4_pthread_getprio); lib^.set_proc($D6D2B21BB465309A,@ps4_scePthreadGetprio); lib^.set_proc($6B63FDC1819E66F7,@ps4_pthread_setprio); lib^.set_proc($5B41E99B65F4B8F1,@ps4_scePthreadSetprio); lib^.set_proc($148B37FD4413F6C8,@ps4_pthread_getschedparam); lib^.set_proc($3F8D644D6512DC42,@ps4_scePthreadGetschedparam); lib^.set_proc($5ECF617620FBB000,@ps4_pthread_setschedparam); lib^.set_proc($A084454E3A082DB8,@ps4_scePthreadSetschedparam); lib^.set_proc($08136D5CEA1E7FF1,@ps4_sched_get_priority_max); lib^.set_proc($9B4892EA336C5DDB,@ps4_sched_get_priority_min); lib^.set_proc($4FBDA1CFA7DFAB4F,@ps4_scePthreadYield); lib^.set_proc($0791A65432B0A67D,@ps4_pthread_yield); lib^.set_proc($E971B8077DCDD3D8,@ps4_sched_yield); lib^.set_proc($E1979959C32C015D,@ps4_pthread_cleanup_push); lib^.set_proc($455C5BD12B1AE6DD,@ps4_pthread_cleanup_pop); lib^.set_proc($D71BED515C75FD28,@ps4___pthread_cleanup_push_imp); lib^.set_proc($896B0595831FDCAC,@ps4___pthread_cleanup_pop_imp); //thread //pthread_key lib^.set_proc($9AA50B35D8A64E7D,@ps4_pthread_key_create); lib^.set_proc($E81A4466E0D3ED82,@ps4_pthread_key_delete); lib^.set_proc($D3F297692EF4C72E,@ps4_pthread_getspecific); lib^.set_proc($5AB38BBC7534C903,@ps4_pthread_setspecific); lib^.set_proc($81E0DAAA01FD9538,@ps4_scePthreadKeyCreate); lib^.set_proc($3EB747BAE0DE9216,@ps4_scePthreadKeyDelete); lib^.set_proc($7A886DEE640E0A6A,@ps4_scePthreadGetspecific); lib^.set_proc($F81CD7624A9878B1,@ps4_scePthreadSetspecific); //pthread_key lib^.set_proc($5AC95C2B51507062,@ps4_sceKernelIsNeoMode); lib^.set_proc($9A9C4076A5BB74A6,@ps4_sceKernelIsProspero); lib^.set_proc($ACD46D9B5BA2A326,@ps4_sceKernelHasNeoMode); //mmap lib^.set_proc($93E017AAEDBF7817,@ps4_getpagesize); lib^.set_proc($A4EF7A4F0CCE9B91,@ps4_sceKernelGetDirectMemorySize); lib^.set_proc($68DCF5D5F9E7CE2E,@ps4_sceKernelAvailableFlexibleMemorySize); lib^.set_proc($9F5FEFE85814ECC4,@ps4_sceKernelConfiguredFlexibleMemorySize); lib^.set_proc($AD35F0EB9C662C80,@ps4_sceKernelAllocateDirectMemory); lib^.set_proc($07EBDCD803B666B7,@ps4_sceKernelAllocateMainDirectMemory); lib^.set_proc($0B47FB4C971B7DA7,@ps4_sceKernelAvailableDirectMemorySize); lib^.set_proc($047A2E2D0CE1D17D,@ps4_sceKernelDirectMemoryQuery); lib^.set_proc($042F8E1B99BDF9BC,@ps4_sceKernelGetDirectMemoryType); lib^.set_proc($8705523C29A9E6D3,@ps4_sceKernelCheckedReleaseDirectMemory); lib^.set_proc($301B88B6F6DAEB3F,@ps4_sceKernelReleaseDirectMemory); lib^.set_proc($04F13DB3DBD0417A,@ps4_mmap); lib^.set_proc($3C68501DDFDDCEFF,@ps4_sceKernelMmap); lib^.set_proc($52A0C68D7039C943,@ps4_munmap); lib^.set_proc($71091EF54B8140E9,@ps4_sceKernelMunmap); lib^.set_proc($B5E888B4BD9BA05C,@ps4_sceKernelReleaseFlexibleMemory); lib^.set_proc($61039FC4BE107DE5,@ps4_mprotect); lib^.set_proc($BD23009B77316136,@ps4_sceKernelMprotect); lib^.set_proc($F5B7DD2C8CAEC026,@ps4_sceKernelMtypeprotect); lib^.set_proc($58571F2F697389DA,@ps4_sceKernelQueryMemoryProtection); lib^.set_proc($AD58D1BC72745FA7,@ps4_sceKernelVirtualQuery); lib^.set_proc($0C6306DC9B21AD95,@ps4_sceKernelSetVirtualRangeName); lib^.set_proc($21620105D4C78ADE,@ps4_sceKernelMapFlexibleMemory); lib^.set_proc($98BF0D0C7F3A8902,@ps4_sceKernelMapNamedFlexibleMemory); lib^.set_proc($91CF8B1042186A47,@ps4_sceKernelMapNamedSystemFlexibleMemory); lib^.set_proc($EE8C6FDCF3C2BA6A,@ps4_sceKernelReserveVirtualRange); lib^.set_proc($0504278A8963F6D4,@ps4_sceKernelMapDirectMemory2); lib^.set_proc($2FF4372C48C86E00,@ps4_sceKernelMapDirectMemory); lib^.set_proc($35C6965317CC3484,@ps4_sceKernelMapNamedDirectMemory); lib^.set_proc($D92284C7A6D2ABFE,@ps4_sceKernelBatchMap); lib^.set_proc($90127317CC784B21,@ps4_sceKernelBatchMap2); lib^.set_proc($9930597C46A5D81C,@ps4_mlock); lib^.set_proc($386E11B03C0B82EA,@ps4_munlock); lib^.set_proc($C7B83B11B7A8F3F5,@ps4_mlockall); lib^.set_proc($3692C1A60555ECF5,@ps4_munlockall); lib^.set_proc($DE4EA4C7FCCE3924,@ps4_sceKernelMlock); lib^.set_proc($C502087C9F3AD2C9,@ps4_sceKernelMunlock); lib^.set_proc($11FAA62A48AB245D,@ps4_sceKernelMlockall); lib^.set_proc($96F0FBD633F63279,@ps4_sceKernelMunlockall); lib^.set_proc($B59638F9264D1610,@ps4_msync); lib^.set_proc($0E435E6F1989C952,@ps4_sceKernelMsync); //mmap //queue lib^.set_proc($0F439D14C8E9E3A2,@ps4_sceKernelCreateEqueue); lib^.set_proc($8E91639A0002E401,@ps4_sceKernelDeleteEqueue); lib^.set_proc($7F3C8C2ACF648A6D,@ps4_sceKernelWaitEqueue); lib^.set_proc($E11EBF3AF2367040,@ps4_sceKernelAddUserEvent); lib^.set_proc($583B339926D6B839,@ps4_sceKernelAddUserEventEdge); lib^.set_proc($2C90F07523539C38,@ps4_sceKernelDeleteUserEvent); lib^.set_proc($17A7B4930A387279,@ps4_sceKernelTriggerUserEvent); lib^.set_proc($9301B2CA3A21239D,@ps4_sceKernelGetEventData); lib^.set_proc($52EFE20C50BD6947,@ps4_sceKernelGetEventError); lib^.set_proc($434AABF40CAA2529,@ps4_sceKernelGetEventFflags); lib^.set_proc($DB708F3C8D6DC816,@ps4_sceKernelGetEventFilter); lib^.set_proc($989EDA8219A0BDF7,@ps4_sceKernelGetEventId); lib^.set_proc($BF3FA9836CDDA292,@ps4_sceKernelGetEventUserData); //queue //event_flag lib^.set_proc($0691686E8509A195,@ps4_sceKernelCreateEventFlag); lib^.set_proc($253BC17E58586B34,@ps4_sceKernelWaitEventFlag); lib^.set_proc($F65BE3E438C76620,@ps4_sceKernelPollEventFlag); lib^.set_proc($20E9D2BC7CEABBA0,@ps4_sceKernelSetEventFlag); lib^.set_proc($EEE8411564404BAD,@ps4_sceKernelClearEventFlag); lib^.set_proc($F26AA5F4E7109DDE,@ps4_sceKernelDeleteEventFlag); lib^.set_proc($3D992EE19AD726A8,@ps4_sceKernelCancelEventFlag); //event_flag //time lib^.set_proc($9FCF2FC770B99D6F,@ps4_gettimeofday); lib^.set_proc($B26223EDEAB3644F,@ps4_clock_getres); lib^.set_proc($94B313F6F240724D,@ps4_clock_gettime); lib^.set_proc($C1161503966896CA,@ps4_sceKernelClockGetres); lib^.set_proc($7A37A471A35036AD,@ps4_sceKernelGettimeofday); lib^.set_proc($90E7277ABCA99D00,@ps4_sceKernelGettimezone); lib^.set_proc($77B9D48F52CE7435,@ps4_clock_settime); lib^.set_proc($55D5C80C06C9DED4,@ps4_settimeofday); lib^.set_proc($0A108E0A13D4FD83,@ps4_sceKernelSettimeofday); lib^.set_proc($D63DD2DE7FED4D6E,@ps4_sceKernelGetTscFrequency); lib^.set_proc($FF62115023BFFCF3,@ps4_sceKernelReadTsc); lib^.set_proc($4018BB1C22B4DE1C,@ps4_sceKernelClockGettime); lib^.set_proc($E09DAC5099AE1D94,@ps4_sceKernelGetProcessTime); lib^.set_proc($04DA30C76979F3C1,@ps4_sceKernelGetProcessTimeCounterFrequency); lib^.set_proc($7E0C6731E4CD52D6,@ps4_sceKernelGetProcessTimeCounter); lib^.set_proc($C92F14D931827B50,@ps4_nanosleep); lib^.set_proc($42FB19C689AF507B,@ps4_sceKernelNanosleep); lib^.set_proc($41CB5E4706EC9D5D,@ps4_usleep); lib^.set_proc($D637D72D15738AC7,@ps4_sceKernelUsleep); lib^.set_proc($D30BB7DE1BA735D1,@ps4_sleep); lib^.set_proc($FD947E846EDA0C7C,@ps4_sceKernelSleep); lib^.set_proc($FE8E6E103A4DFA86,@ps4_sceKernelConvertUtcToLocaltime); lib^.set_proc($D0D4C737534A38D2,@ps4_sceKernelConvertLocaltimeToUtc); //time //file lib^.set_proc($D46DE51751A0D64F,@ps4_sceKernelOpen); lib^.set_proc($50AD939760D6527B,@ps4_sceKernelClose); lib^.set_proc($A226FBE85FF5D9F9,@ps4_sceKernelLseek); lib^.set_proc($0A0E2CAD9E9329B5,@ps4_sceKernelRead); lib^.set_proc($FABDEB305C08B55E,@ps4_sceKernelPread); lib^.set_proc($C938FAD88EE4C38B,@ps4_sceKernelPreadv); lib^.set_proc($E304B37BDD8184B2,@ps4_sceKernelWrite); lib^.set_proc($9CA5A2FCDD87055E,@ps4_sceKernelPwrite); lib^.set_proc($900B7A5436C79ABA,@ps4_sceKernelWritev); lib^.set_proc($556DD355988CE3F1,@ps4_sceKernelFtruncate); lib^.set_proc($901C023EC617FE6E,@ps4_sceKernelFstat); lib^.set_proc($B5A4568532454E01,@ps4_sceKernelGetdirentries); lib^.set_proc($8F6008A92A893F4C,@ps4_sceKernelGetdents); lib^.set_proc($7D3C7AEA5E625880,@ps4_sceKernelFsync); lib^.set_proc($4A8664C599021DAC,@ps4_sceKernelFcntl); lib^.set_proc($C2E0ABA081A3B768,@ps4_open); //open lib^.set_proc($E9CDEB09513F7D35,@ps4_open); //_open lib^.set_proc($3B2E88A7082D60E9,@ps4_lseek); //lseek lib^.set_proc($6D8FCF3BA261CE14,@ps4_close); //close lib^.set_proc($34DB4568A25B3EDD,@ps4_close); //_close lib^.set_proc($0D1B81B76A6F2029,@ps4_read); //_read lib^.set_proc($02A062A02DAF1772,@ps4_read); //read lib^.set_proc($7B3BFF45204D2AA2,@ps4_pread); lib^.set_proc($F9646590A8D9BDA8,@ps4_readv); //_readv lib^.set_proc($23B22670B76CFEE5,@ps4_readv); //readv lib^.set_proc($65A47369AA406703,@ps4_preadv); lib^.set_proc($171559A81000EE4B,@ps4_write); //_write lib^.set_proc($14DE2068F9AE155F,@ps4_write); //write lib^.set_proc($0B6909FDBC92E6B3,@ps4_pwrite); lib^.set_proc($6121D10512E7DA92,@ps4_writev); //_writev lib^.set_proc($67668A771CD2E0A1,@ps4_writev); //writev lib^.set_proc($8A1E020FDFE08213,@ps4_ftruncate); lib^.set_proc($9AA40C875CCF3D3F,@ps4_fstat); lib^.set_proc($7F4F4ABC83F2FD06,@ps4_getdirentries); lib^.set_proc($D86EA2EA13085146,@ps4_getdents); lib^.set_proc($8EE59B4CD33EF21C,@ps4_fsync); lib^.set_proc($F27635F5B2A88999,@ps4_fcntl); lib^.set_proc($3DF71C4FBA944581,@ps4_ioctl); //ioctl lib^.set_proc($C16FA4DB57266F04,@ps4_ioctl); //_ioctl lib^.set_proc($13A6A8DF8C0FC3E5,@ps4_stat); lib^.set_proc($795F70003DAB8880,@ps4_sceKernelStat); lib^.set_proc($6B2AEDB3323B1818,@ps4_truncate); lib^.set_proc($5A5C8403FB0B0DFD,@ps4_sceKernelTruncate); lib^.set_proc($246322A3EDB52F87,@ps4_mkdir); lib^.set_proc($D7F2C52E6445C713,@ps4_sceKernelMkdir); lib^.set_proc($540CECC2F4CE0B32,@ps4_unlink); lib^.set_proc($0145D5C5678953F0,@ps4_sceKernelUnlink); lib^.set_proc($73B6674FB57507DF,@ps4_rmdir); lib^.set_proc($9DA22752362DDECA,@ps4_sceKernelRmdir); lib^.set_proc($34DD35A8B4618AA5,@ps4_rename); lib^.set_proc($E7635C614F7E944A,@ps4_sceKernelRename); lib^.set_proc($CF476D9CFC5882D8,@ps4_chmod); lib^.set_proc($7E022C435D316150,@ps4_sceKernelChmod); lib^.set_proc($B96C96DEFF7CB14E,@ps4_sceKernelCheckReachability); lib^.set_proc($F2F13A67A5446329,@ps4_access); lib^.set_proc($B19BB06833C04CAB,@ps4_getdtablesize); lib^.set_proc($2467D330139D509A,@ps4_sceKernelGetFsSandboxRandomWord); lib^.set_proc($9EEE1AD3F6AB422B,@ps4_sceKernelAioInitializeParam); //file //socket lib^.set_proc($4D4FDDF4F7C81CF3,@ps4_socket); lib^.set_proc($2AE3A680AA2A09D6,@ps4_bind); lib^.set_proc($7C5C469311766D5A,@ps4_setsockopt); lib^.set_proc($4FC7C447EB481A09,@ps4_select); lib^.set_proc($95493AC2B197C8CC,@ps4_recvfrom); lib^.set_proc($A719C299A82BB5AA,@ps4_listen); lib^.set_proc($4D4BA2612DA413CB,@ps4_shutdown); lib^.set_proc($DDEFB822FEC827C5,@ps4_accept); lib^.set_proc($A01AF7D773E9A4D1,@ps4_sendto); lib^.set_proc($45E9C8D652F55859,@ps4_getsockname); lib^.set_proc($5D52FC4A8DD02549,@ps4_connect); //socket lib^.set_proc($BA5E7B86F9BA9817,@ps4_sceKernelGetOpenPsIdForSystem); lib^.set_proc($E63442B366B1B6BE,@ps4_inet_ntop); // //mirror of libkernel px:=Result._add_lib('libScePosix'); px^.MapSymbol:=lib^.MapSymbol; //mirror of libkernel px:=Result._add_lib('libkernel_cpumode_platform'); px^.MapSymbol:=lib^.MapSymbol; // lib:=Result._add_lib('libkernel_unity'); lib^.set_proc($5A4C0477737BC346,@ps4_sceKernelInstallExceptionHandler); lib^.set_proc($421BF90110283847,@ps4_sceKernelRemoveExceptionHandler); lib^.set_proc($8A5D379E5B8A7CC9,@ps4_sceKernelRaiseException); //mirror of libkernel px:=Result._add_lib('libkernel_exception'); px^.MapSymbol:=lib^.MapSymbol; // lib:=Result._add_lib('libSceCoredump'); lib^.set_proc($F332D27C47D6E405,@ps4_sceCoredumpRegisterCoredumpHandler); lib^.set_proc($7C59213A0CED8820,@ps4_sceCoredumpUnregisterCoredumpHandler); // lib:=Result._add_lib('libSceOpenPsId'); lib^.set_proc($0CB39172BA14A9B7,@ps4_sceKernelGetOpenPsId); // lib:=Result._add_lib('libkernel_module_info'); lib^.set_proc($420B0A1147E4A8C0,@ps4_sceKernelGetModuleInfo2); lib^.set_proc($673CC2DD91950247,@ps4_sceKernelGetModuleList2); // _kernel_init; end; initialization ps4_app.RegistredPreLoad('libSceSysmodule.prx',@Load_libSceSysmodule); ps4_app.RegistredPreLoad('libkernel.prx',@Load_libkernel); end.