This patch helps to integrate the Hurd's libpthread as a libc add-on. It writes the configure file, removes an rpc call not yet implemented on the version of gnumach we use and defines a missing macro. diff --git a/libpthread/configure b/libpthread/configure new file mode 100644 index 0000000..2cdbc71 --- /dev/null +++ b/libpthread/configure @@ -0,0 +1,2 @@ +libc_add_on_canonical=libpthread +libc_add_on_subdirs=. -- 1.9.0 We are using a version of GNU Mach that lacks 'thread_terminate_release' (not introduced yet). The 'thread_terminate' RPC call will be enough for our needs. See . diff --git a/libpthread/sysdeps/mach/pt-thread-terminate.c b/libpthread/sysdeps/mach/pt-thread-terminate.c index 6672065..129a611 100644 --- a/libpthread/sysdeps/mach/pt-thread-terminate.c +++ b/libpthread/sysdeps/mach/pt-thread-terminate.c @@ -70,9 +70,9 @@ __pthread_thread_terminate (struct __pthread *thread) __mach_port_destroy (__mach_task_self (), wakeup_port); /* Terminate and release all that's left. */ - err = __thread_terminate_release (kernel_thread, mach_task_self (), - kernel_thread, reply_port, - stackaddr, stacksize); + /* err = __thread_terminate_release (kernel_thread, mach_task_self (), */ + /* kernel_thread, reply_port, */ + /* stackaddr, stacksize); */ /* The kernel does not support it yet. Leak but at least terminate correctly. */ -- 1.9.2 The __PTHREAD_SPIN_LOCK_INITIALIZER definition is missing, so we define it to __SPIN_LOCK_INITIALIZER which already exists. See . diff --git a/libpthread/sysdeps/mach/bits/spin-lock.h b/libpthread/sysdeps/mach/bits/spin-lock.h index 537dac9..fca0e5a 100644 --- a/libpthread/sysdeps/mach/bits/spin-lock.h +++ b/libpthread/sysdeps/mach/bits/spin-lock.h @@ -30,7 +30,7 @@ typedef __spin_lock_t __pthread_spinlock_t; /* Initializer for a spin lock object. */ #ifndef __PTHREAD_SPIN_LOCK_INITIALIZER -#error __PTHREAD_SPIN_LOCK_INITIALIZER undefined: should be defined by . +#define __PTHREAD_SPIN_LOCK_INITIALIZER __SPIN_LOCK_INITIALIZER #endif __END_DECLS The version of the glibc we use doesn't include the shm-directory.c file and does not yet support IS_IN. See diff --git a/libpthread/Makefile b/libpthread/Makefile index 2906788..b8dee58 100644 --- a/libpthread/Makefile +++ b/libpthread/Makefile @@ -149,8 +149,6 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ sem-post sem-timedwait sem-trywait sem-unlink \ sem-wait \ \ - shm-directory \ - \ cthreads-compat \ $(SYSDEPS) -- 2.3.6 diff --git a/libpthread/pthread/pt-create.c b/libpthread/pthread/pt-create.c index d88afae..84044dc 100644 --- a/libpthread/pthread/pt-create.c +++ b/libpthread/pthread/pt-create.c @@ -28,7 +28,7 @@ #include -#if IS_IN (libpthread) +#ifdef IS_IN_libpthread # include #endif #ifdef HAVE_USELOCALE @@ -50,7 +50,7 @@ entry_point (struct __pthread *self, void *(*start_routine)(void *), void *arg) __resp = &self->res_state; #endif -#if IS_IN (libpthread) +#ifdef IS_IN_libpthread /* Initialize pointers to locale data. */ __ctype_init (); #endif diff --git a/libpthread/pthread/pt-initialize.c b/libpthread/pthread/pt-initialize.c index 9e5404b..b9cacbd 100644 --- a/libpthread/pthread/pt-initialize.c +++ b/libpthread/pthread/pt-initialize.c @@ -28,7 +28,7 @@ DEFINE_HOOK (__pthread_init, (void)); -#if IS_IN (libpthread) +#ifdef IS_IN_libpthread static const struct pthread_functions pthread_functions = { .ptr_pthread_attr_destroy = __pthread_attr_destroy, @@ -81,7 +81,7 @@ static const struct pthread_functions pthread_functions = void ___pthread_init (void) { -#if IS_IN (libpthread) +#ifdef IS_IN_libpthread __libc_pthread_init(&pthread_functions); #endif RUN_HOOK (__pthread_init, ()); diff --git a/libpthread/pthread/pt-internal.h b/libpthread/pthread/pt-internal.h index 18b5b4c..8cdcfce 100644 --- a/libpthread/pthread/pt-internal.h +++ b/libpthread/pthread/pt-internal.h @@ -35,7 +35,7 @@ #include #include -#if IS_IN (libpthread) +#ifdef IS_IN_libpthread # include #endif @@ -60,7 +60,7 @@ enum pthread_state # define PTHREAD_SYSDEP_MEMBERS #endif -#if !(IS_IN (libpthread)) +#ifndef IS_IN_libpthread #ifdef ENABLE_TLS /* Type of the TCB. */ typedef struct