From 5549696c3a9653f701bbd96ddeb70680303a6742 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 2 Apr 2025 02:39:14 +0300 Subject: [PATCH] Kernel/LibC: Implement pthread_self --- kernel/include/kernel/Process.h | 1 + kernel/kernel/Process.cpp | 5 +++++ userspace/libraries/LibC/include/sys/syscall.h | 1 + userspace/libraries/LibC/pthread.cpp | 5 +++++ 4 files changed, 12 insertions(+) diff --git a/kernel/include/kernel/Process.h b/kernel/include/kernel/Process.h index 29c1d9e4..0f68822b 100644 --- a/kernel/include/kernel/Process.h +++ b/kernel/include/kernel/Process.h @@ -184,6 +184,7 @@ namespace Kernel BAN::ErrorOr sys_pthread_create(const pthread_attr_t* __restrict attr, void (*entry)(void*), void* arg); BAN::ErrorOr sys_pthread_exit(void* value); + BAN::ErrorOr sys_pthread_self(); BAN::ErrorOr sys_tcgetpgrp(int fd); BAN::ErrorOr sys_tcsetpgrp(int fd, pid_t pgid); diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 1f6c05b6..06f7d247 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -2121,6 +2121,11 @@ namespace Kernel ASSERT_NOT_REACHED(); } + BAN::ErrorOr Process::sys_pthread_self() + { + return Thread::current().tid(); + } + BAN::ErrorOr Process::sys_tcgetpgrp(int fd) { LockGuard _(m_process_lock); diff --git a/userspace/libraries/LibC/include/sys/syscall.h b/userspace/libraries/LibC/include/sys/syscall.h index 9e0c0529..b6434a97 100644 --- a/userspace/libraries/LibC/include/sys/syscall.h +++ b/userspace/libraries/LibC/include/sys/syscall.h @@ -92,6 +92,7 @@ __BEGIN_DECLS O(SYS_HARDLINKAT, hardlinkat) \ O(SYS_PTHREAD_CREATE, pthread_create) \ O(SYS_PTHREAD_EXIT, pthread_exit) \ + O(SYS_PTHREAD_SELF, pthread_self) \ enum Syscall { diff --git a/userspace/libraries/LibC/pthread.cpp b/userspace/libraries/LibC/pthread.cpp index 80399312..37300001 100644 --- a/userspace/libraries/LibC/pthread.cpp +++ b/userspace/libraries/LibC/pthread.cpp @@ -47,3 +47,8 @@ void pthread_exit(void* value_ptr) syscall(SYS_PTHREAD_EXIT, value_ptr); ASSERT_NOT_REACHED(); } + +pthread_t pthread_self(void) +{ + return syscall(SYS_PTHREAD_SELF); +}