diff --git a/kernel/ps4_libkernel.pas b/kernel/ps4_libkernel.pas index c87808cc..5f793fc3 100644 --- a/kernel/ps4_libkernel.pas +++ b/kernel/ps4_libkernel.pas @@ -167,7 +167,7 @@ end; function ps4_sceKernelGetProcParam:Pointer; SysV_ABI_CDecl; begin Writeln('KernelGetProcParam'); - Result:=GetProcParam; + Result:=GetSceProcParam; end; type @@ -245,7 +245,7 @@ var begin Result:=SCE_KERNEL_ERROR_EINVAL; if (sdkVersion=nil) then Exit; - P:=GetProcParam; + P:=GetSceProcParam; if (P<>nil) then if (P^.Header.Size>$13) then diff --git a/kernel/ps4_pthread.pas b/kernel/ps4_pthread.pas index 919eaada..d5e60e81 100644 --- a/kernel/ps4_pthread.pas +++ b/kernel/ps4_pthread.pas @@ -89,7 +89,7 @@ function ps4_pthread_key_delete(Key:pthread_key_t):Integer; SysV_ABI_CDecl; function ps4_pthread_getspecific(Key:pthread_key_t):Pointer; SysV_ABI_CDecl; function ps4_pthread_setspecific(Key:pthread_key_t;value:Pointer):Integer; SysV_ABI_CDecl; -function _pthread_run_entry(pthread:p_pthread):Integer; +function _pthread_run_entry(pthread:p_pthread;name:Pchar;stack:PDWORD):Integer; implementation @@ -400,14 +400,28 @@ end; const default_name:Pchar='main'; + default_stack:Integer=DefaultStackSize; -function _pthread_run_entry(pthread:p_pthread):Integer; +function _pthread_run_entry(pthread:p_pthread;name:Pchar;stack:PDWORD):Integer; var attr:pthread_attr_t; begin + if (name=nil) then + begin + name:=default_name; + end; + if (stack=nil) then + begin + stack:=@default_stack; + end else + if (stack^=1 SDK_version:QWORD; //0x4508101 end; sceProcessName:PChar; sceUserMainThreadName:PChar; - sceUserMainThreadPriority:PQWORD; - sceUserMainThreadStackSize:PQWORD; + sceUserMainThreadPriority:PDWORD; + sceUserMainThreadStackSize:PDWORD; _sceLibcParam :PSceLibcParam; _sceKernelMemParam:PSceKernelMemParam; _sceKernelFsParam :PSceKernelFsParam; - sceProcessPreloadEnabled:PQWORD; + sceProcessPreloadEnabled:PDWORD; end; Telf_file=class; diff --git a/ps4_program.pas b/ps4_program.pas index 37551b93..52560094 100644 --- a/ps4_program.pas +++ b/ps4_program.pas @@ -173,7 +173,11 @@ Function UnMountPath(path:PChar):Integer; function _parse_filename(filename:PChar):RawByteString; -function GetProcParam:Pointer; +function GetSceProcParam:Pointer; +function GetSceUserMainThreadName:PChar; +function GetSceUserMainThreadPriority:PDWORD; +function GetSceUserMainThreadStackSize:PDWORD; + Function get_dev_progname:RawByteString; implementation @@ -1501,7 +1505,7 @@ begin rwlock_unlock(lock); end; -function GetProcParam:Pointer; +function GetSceProcParam:Pointer; var elf:Telf_file; begin @@ -1512,6 +1516,48 @@ begin Result:=elf.mMap.pAddr+elf.pProcParam; end; +function GetSceUserMainThreadName:PChar; +var + p:PSceProcParam; +begin + Result:=nil; + p:=GetSceProcParam; + if (p=nil) then Exit; + + if (P^.Header.Size>=qword(@PSceProcParam(nil)^.sceUserMainThreadName)+SizeOf(Pointer)) then + begin + Result:=p^.sceUserMainThreadName; + end; +end; + +function GetSceUserMainThreadPriority:PDWORD; +var + p:PSceProcParam; +begin + Result:=nil; + p:=GetSceProcParam; + if (p=nil) then Exit; + + if (P^.Header.Size>=qword(@PSceProcParam(nil)^.SceUserMainThreadPriority)+SizeOf(Pointer)) then + begin + Result:=p^.SceUserMainThreadPriority; + end; +end; + +function GetSceUserMainThreadStackSize:PDWORD; +var + p:PSceProcParam; +begin + Result:=nil; + p:=GetSceProcParam; + if (p=nil) then Exit; + + if (P^.Header.Size>=qword(@PSceProcParam(nil)^.SceUserMainThreadStackSize)+SizeOf(Pointer)) then + begin + Result:=p^.SceUserMainThreadStackSize; + end; +end; + Function get_dev_progname:RawByteString; begin Result:='';