more pthread progress added init for main Thread

This commit is contained in:
georgemoralis 2023-07-20 11:20:11 +03:00
parent 03892b51a9
commit cc596083f5
2 changed files with 18 additions and 7 deletions

View file

@ -8,12 +8,18 @@ thread_local PthreadInternal* g_pthread_self = nullptr;
PThreadCxt* g_pthread_cxt = nullptr; PThreadCxt* g_pthread_cxt = nullptr;
void Pthread_Init_Self_MainThread() {
g_pthread_self = new PthreadInternal{};
scePthreadAttrInit(&g_pthread_self->attr);
g_pthread_self->pth = pthread_self();
g_pthread_self->name = "Main_Thread";
}
int scePthreadAttrInit(ScePthreadAttr* attr) { int scePthreadAttrInit(ScePthreadAttr* attr) {
*attr = new PthreadAttrInternal{}; *attr = new PthreadAttrInternal{};
int result = pthread_attr_init(&(*attr)->p); int result = pthread_attr_init(&(*attr)->pth_attr);
(*attr)->affinity = 0x7f; (*attr)->affinity = 0x7f;
(*attr)->guard_size = 0x1000; (*attr)->guard_size = 0x1000;
@ -47,7 +53,7 @@ int scePthreadAttrSetdetachstate(ScePthreadAttr* attr, int detachstate) {
__debugbreak(); //unknown state __debugbreak(); //unknown state
} }
int result = pthread_attr_setdetachstate(&(*attr)->p, pstate); int result = pthread_attr_setdetachstate(&(*attr)->pth_attr, pstate);
(*attr)->detached = (pstate == PTHREAD_CREATE_DETACHED); (*attr)->detached = (pstate == PTHREAD_CREATE_DETACHED);
@ -70,7 +76,7 @@ int scePthreadAttrSetinheritsched(ScePthreadAttr* attr, int inheritSched) {
default: __debugbreak(); // unknown inheritSched default: __debugbreak(); // unknown inheritSched
} }
int result = pthread_attr_setinheritsched(&(*attr)->p, pinherit_sched); int result = pthread_attr_setinheritsched(&(*attr)->pth_attr, pinherit_sched);
if (result == 0) { if (result == 0) {
return SCE_OK; return SCE_OK;
@ -93,7 +99,7 @@ int scePthreadAttrSetschedparam(ScePthreadAttr* attr, const SceKernelSchedParam*
pparam.sched_priority = 0; pparam.sched_priority = 0;
} }
int result = pthread_attr_setschedparam(&(*attr)->p, &pparam); int result = pthread_attr_setschedparam(&(*attr)->pth_attr, &pparam);
if (result == 0) { if (result == 0) {
return SCE_OK; return SCE_OK;
@ -114,7 +120,7 @@ int scePthreadAttrSetschedpolicy(ScePthreadAttr* attr, int policy) {
(*attr)->policy = policy; (*attr)->policy = policy;
int result = pthread_attr_setschedpolicy(&(*attr)->p, policy); int result = pthread_attr_setschedpolicy(&(*attr)->pth_attr, policy);
if (result == 0) { if (result == 0) {
return SCE_OK; return SCE_OK;

View file

@ -2,6 +2,7 @@
#include <pthread.h> #include <pthread.h>
#include <sched.h> #include <sched.h>
#include "../../../../types.h" #include "../../../../types.h"
#include <string>
namespace HLE::Libs::LibKernel::ThreadManagement { namespace HLE::Libs::LibKernel::ThreadManagement {
@ -11,14 +12,18 @@ using SceKernelSchedParam = ::sched_param;
using ScePthreadAttr = PthreadAttrInternal*; using ScePthreadAttr = PthreadAttrInternal*;
struct PthreadInternal { struct PthreadInternal {
pthread_t p; u08 reserved[4096];
std::string name;
pthread_t pth;
ScePthreadAttr attr;
}; };
struct PthreadAttrInternal { struct PthreadAttrInternal {
u08 reserved[64];
u64 affinity; u64 affinity;
size_t guard_size; size_t guard_size;
int policy; int policy;
bool detached; bool detached;
pthread_attr_t p; pthread_attr_t pth_attr;
}; };
class PThreadCxt {}; class PThreadCxt {};