From 05f8e8f2c63468231db2c5fe40c1a1c301209b7f Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sun, 15 Sep 2013 17:20:28 +0200 Subject: [PATCH] Add pthread_self(3). --- libpthread/Makefile | 1 + libpthread/include/pthread.h | 2 +- libpthread/pthread_self.c++ | 38 ++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 libpthread/pthread_self.c++ diff --git a/libpthread/Makefile b/libpthread/Makefile index 7740b84a..1ff1fb56 100644 --- a/libpthread/Makefile +++ b/libpthread/Makefile @@ -12,6 +12,7 @@ CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti OBJS=\ pthread_initialize.o \ +pthread_self.o \ BINS:=libpthread.a diff --git a/libpthread/include/pthread.h b/libpthread/include/pthread.h index 364681a2..e97e4366 100644 --- a/libpthread/include/pthread.h +++ b/libpthread/include/pthread.h @@ -235,7 +235,7 @@ void pthread_initialize(void); /* TODO: pthread_rwlockattr_getpshared */ /* TODO: pthread_rwlockattr_init */ /* TODO: pthread_rwlockattr_setpshared */ -/* TODO: pthread_self */ +pthread_t pthread_self(void); /* TODO: pthread_setcancelstate */ /* TODO: pthread_setcanceltype */ /* TODO: pthread_setconcurrency */ diff --git a/libpthread/pthread_self.c++ b/libpthread/pthread_self.c++ new file mode 100644 index 00000000..9d381b79 --- /dev/null +++ b/libpthread/pthread_self.c++ @@ -0,0 +1,38 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2013. + + This file is part of Sortix libpthread. + + Sortix libpthread is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + Sortix libpthread is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Sortix libpthread. If not, see . + + pthread_self.c++ + Returns the identity of the current thread. + +*******************************************************************************/ + +#include + +extern "C" pthread_t pthread_self(void) +{ + pthread_t current_thread; +#if defined(__i386__) + asm ( "mov %%gs:0, %0" : "=r"(current_thread)); +#elif defined(__x86_64__) + asm ( "mov %%fs:0, %0" : "=r"(current_thread)); +#else + #error "You need to implement pthread_self for your platform" +#endif + return current_thread; +}