diff --git a/fpPS4.lpi b/fpPS4.lpi
index 7993a06..bc5dcb2 100644
--- a/fpPS4.lpi
+++ b/fpPS4.lpi
@@ -31,7 +31,7 @@
-
+
@@ -549,6 +549,10 @@
+
+
+
+
diff --git a/kernel/ps4_libkernel.pas b/kernel/ps4_libkernel.pas
index 7c66a99..e9d22d8 100644
--- a/kernel/ps4_libkernel.pas
+++ b/kernel/ps4_libkernel.pas
@@ -11,6 +11,7 @@ uses
ps4_map_mm,
ps4_mspace_internal,
ps4_pthread,
+ ps4_pthread_attr,
ps4_pthread_key,
ps4_signal,
ps4_mutex,
diff --git a/kernel/ps4_pthread.pas b/kernel/ps4_pthread.pas
index 65e25f2..6f86875 100644
--- a/kernel/ps4_pthread.pas
+++ b/kernel/ps4_pthread.pas
@@ -10,32 +10,6 @@ uses
sys_pthread,
sys_signal;
-function ps4_pthread_set_defaultstacksize_np(size:QWORD):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadSetDefaultstacksize(size:QWORD):Integer; SysV_ABI_CDecl;
-
-function ps4_scePthreadAttrInit(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrDestroy(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_init(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_destroy(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrSetstacksize(pAttr:p_pthread_attr_t;size:size_t):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_setstacksize(pAttr:p_pthread_attr_t;size:size_t):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrSetdetachstate(pAttr:p_pthread_attr_t;detachstate:Integer):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_setdetachstate(pAttr:p_pthread_attr_t;detachstate:Integer):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrSetschedpolicy(pAttr:p_pthread_attr_t;policy:Integer):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrSetschedparam(pAttr:p_pthread_attr_t;param:PInteger):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetschedparam(pAttr:p_pthread_attr_t;param:PInteger):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_setschedparam(pAttr:p_pthread_attr_t;param:PInteger):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_getschedparam(pAttr:p_pthread_attr_t;param:PInteger):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrSetaffinity(pAttr:p_pthread_attr_t;mask:QWORD):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetaffinity(pAttr:p_pthread_attr_t;mask:PQWORD):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrSetinheritsched(pAttr:p_pthread_attr_t;inheritSched:Integer):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetguardsize(pAttr:p_pthread_attr_t;guardSize:PQWORD):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetstackaddr(pAttr:p_pthread_attr_t;stackAddr:PPointer):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetstacksize(pAttr:p_pthread_attr_t;stackSize:PQWORD):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetstack(pAttr:p_pthread_attr_t;stackAddr:PPointer;stackSize:PQWORD):Integer; SysV_ABI_CDecl;
-function ps4_scePthreadAttrGetdetachstate(pAttr:p_pthread_attr_t;detachstate:Pinteger):Integer; SysV_ABI_CDecl;
-function ps4_pthread_attr_getdetachstate(pAttr:p_pthread_attr_t;detachstate:Pinteger):Integer; SysV_ABI_CDecl;
-
function ps4_scePthreadAttrGet(pid:pthread;pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
function ps4_pthread_create_name_np(pthread:p_pthread;pAttr:p_pthread_attr_t;entry:Pointer;arg:Pointer;name:Pchar):Integer; SysV_ABI_CDecl;
@@ -113,254 +87,8 @@ uses
ps4_mutex,
ps4_map_mm,
ps4_program,
- ps4_elf;
-
-
-const
- default_name:Pchar='main';
-
-var
- default_main_stack:Integer=DefaultStackSize;
- default_stack_size:QWORD=$10000;
-
-function ps4_pthread_set_defaultstacksize_np(size:QWORD):Integer; SysV_ABI_CDecl;
-begin
- Result:=EINVAL;
- if (size>PTHREAD_STACK_MIN) then
- begin
- default_stack_size:=size;
- Result:=0;
- end;
-end;
-
-function ps4_scePthreadSetDefaultstacksize(size:QWORD):Integer; SysV_ABI_CDecl;
-begin
- Result:=px2sce(ps4_pthread_set_defaultstacksize_np(size));
-end;
-
-//struct pthread_attr _pthread_attr_default = {
-// .sched_policy = SCHED_OTHER,
-// .sched_inherit = PTHREAD_INHERIT_SCHED,
-// .prio = 0,
-// .suspend = THR_CREATE_RUNNING,
-// .flags = PTHREAD_SCOPE_SYSTEM,
-// .stackaddr_attr = NULL,
-// .stacksize_attr = THR_STACK_DEFAULT,
-// .guardsize_attr = 0,
-// .cpusetsize = 0,
-// .cpuset = NULL
-//};
-
-function ps4_scePthreadAttrInit(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-begin
- Writeln(SysLogPrefix, 'scePthreadAttrInit');
- if (pAttr=nil) then Exit(SCE_KERNEL_ERROR_EINVAL);
- pAttr^:=SwAllocMem(SizeOf(tthread_attr_t));
- if (pAttr^=nil) then Exit(SCE_KERNEL_ERROR_ENOMEM);
- pAttr^^.stacksize_attr:=default_stack_size;
- Result:=0;
-end;
-
-function ps4_scePthreadAttrDestroy(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-begin
- Writeln(SysLogPrefix, 'scePthreadAttrDestroy');
- Result:=SCE_KERNEL_ERROR_EINVAL;
- if (pAttr=nil) then Exit;
- SwFreeMem(XCHG(pAttr^,nil));
- Result:=0;
-end;
-
-function ps4_pthread_attr_init(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-begin
- Writeln(SysLogPrefix, 'pthread_attr_init');
- if (pAttr=nil) then Exit(EINVAL);
- pAttr^:=SwAllocMem(SizeOf(tthread_attr_t));
- if (pAttr^=nil) then Exit(ENOMEM);
- pAttr^^.stacksize_attr:=default_stack_size;
- Result:=0;
-end;
-
-function ps4_pthread_attr_destroy(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
-begin
- Writeln(SysLogPrefix, 'pthread_attr_destroy');
- Result:=EINVAL;
- if (pAttr=nil) then Exit;
- SwFreeMem(XCHG(pAttr^,nil));
- Result:=0;
-end;
-
-function ps4_scePthreadAttrSetstacksize(pAttr:p_pthread_attr_t;size:size_t):Integer; SysV_ABI_CDecl;
-begin
- if (pAttr=nil) then Exit(SCE_KERNEL_ERROR_EINVAL);
- if (pAttr^=nil) then Exit(SCE_KERNEL_ERROR_EINVAL);
- if (sizePTHREAD_STACK_MIN) then
+ begin
+ default_stack_size:=size;
+ Result:=0;
+ end;
+end;
+
+function ps4_scePthreadSetDefaultstacksize(size:QWORD):Integer; SysV_ABI_CDecl;
+begin
+ Result:=px2sce(ps4_pthread_set_defaultstacksize_np(size));
+end;
+
+//struct pthread_attr _pthread_attr_default = {
+// .sched_policy = SCHED_OTHER,
+// .sched_inherit = PTHREAD_INHERIT_SCHED,
+// .prio = 0,
+// .suspend = THR_CREATE_RUNNING,
+// .flags = PTHREAD_SCOPE_SYSTEM,
+// .stackaddr_attr = NULL,
+// .stacksize_attr = THR_STACK_DEFAULT,
+// .guardsize_attr = 0,
+// .cpusetsize = 0,
+// .cpuset = NULL
+//};
+
+function ps4_scePthreadAttrInit(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
+begin
+ Writeln(SysLogPrefix, 'scePthreadAttrInit');
+ if (pAttr=nil) then Exit(SCE_KERNEL_ERROR_EINVAL);
+ pAttr^:=SwAllocMem(SizeOf(tthread_attr_t));
+ if (pAttr^=nil) then Exit(SCE_KERNEL_ERROR_ENOMEM);
+ pAttr^^.stacksize_attr:=default_stack_size;
+ Result:=0;
+end;
+
+function ps4_scePthreadAttrDestroy(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
+begin
+ Writeln(SysLogPrefix, 'scePthreadAttrDestroy');
+ Result:=SCE_KERNEL_ERROR_EINVAL;
+ if (pAttr=nil) then Exit;
+ SwFreeMem(XCHG(pAttr^,nil));
+ Result:=0;
+end;
+
+function ps4_pthread_attr_init(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
+begin
+ Writeln(SysLogPrefix, 'pthread_attr_init');
+ if (pAttr=nil) then Exit(EINVAL);
+ pAttr^:=SwAllocMem(SizeOf(tthread_attr_t));
+ if (pAttr^=nil) then Exit(ENOMEM);
+ pAttr^^.stacksize_attr:=default_stack_size;
+ Result:=0;
+end;
+
+function ps4_pthread_attr_destroy(pAttr:p_pthread_attr_t):Integer; SysV_ABI_CDecl;
+begin
+ Writeln(SysLogPrefix, 'pthread_attr_destroy');
+ Result:=EINVAL;
+ if (pAttr=nil) then Exit;
+ SwFreeMem(XCHG(pAttr^,nil));
+ Result:=0;
+end;
+
+function ps4_scePthreadAttrSetstacksize(pAttr:p_pthread_attr_t;size:size_t):Integer; SysV_ABI_CDecl;
+begin
+ if (pAttr=nil) then Exit(SCE_KERNEL_ERROR_EINVAL);
+ if (pAttr^=nil) then Exit(SCE_KERNEL_ERROR_EINVAL);
+ if (size