From 3358b761b15daa480ca0ca788b3fe077ac967674 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 19 Aug 2002 10:05:03 +0000 Subject: Based on work by Stefan Allius, arrange for early initialization of pthread stuff. Also, don't bother building libthread_db unless we are debugging. -Erik --- libpthread/Makefile | 5 ++++- libpthread/linuxthreads/errno.c | 13 ------------- libpthread/linuxthreads/events.c | 2 ++ libpthread/linuxthreads/internals.h | 1 + libpthread/linuxthreads/pthread.c | 12 ++++++++++++ 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/libpthread/Makefile b/libpthread/Makefile index 1bf8e8c66..bdd097d38 100644 --- a/libpthread/Makefile +++ b/libpthread/Makefile @@ -30,7 +30,10 @@ LIBTHREAD_DB_SHARED_FULLNAME=libthread_db-$(MAJOR_VERSION).$(MINOR_VERSION).$(SU DIRS= ifeq ($(strip $(INCLUDE_THREADS)),true) - DIRS+=linuxthreads linuxthreads_db + DIRS+=linuxthreads +endif +ifeq ($(strip $(DODEBUG)),true) + DIRS+=linuxthreads_db endif ALL_SUBDIRS = linuxthreads linuxthreads_db diff --git a/libpthread/linuxthreads/errno.c b/libpthread/linuxthreads/errno.c index 46e2fbb35..9f651b8ec 100644 --- a/libpthread/linuxthreads/errno.c +++ b/libpthread/linuxthreads/errno.c @@ -21,28 +21,15 @@ #include "pthread.h" #include "internals.h" #include -extern int _errno; -extern int _h_errno; int * __errno_location() { - /* check, if the library is initilize */ - if (__pthread_initial_thread_bos != NULL) - { pthread_descr self = thread_self(); return THREAD_GETMEM (self, p_errnop); - } - return &_errno; } int * __h_errno_location() { - /* check, if the library is initilize */ - if (__pthread_initial_thread_bos != NULL) - { pthread_descr self = thread_self(); - return THREAD_GETMEM (self, p_h_errnop); - } - return &_h_errno; } diff --git a/libpthread/linuxthreads/events.c b/libpthread/linuxthreads/events.c index e5be3d935..a4bf1f898 100644 --- a/libpthread/linuxthreads/events.c +++ b/libpthread/linuxthreads/events.c @@ -19,6 +19,8 @@ /* The functions contained here do nothing, they just return. */ +#include "internals.h" + void __linuxthreads_create_event (void) { diff --git a/libpthread/linuxthreads/internals.h b/libpthread/linuxthreads/internals.h index 933ccb5f3..ffa52aff3 100644 --- a/libpthread/linuxthreads/internals.h +++ b/libpthread/linuxthreads/internals.h @@ -426,6 +426,7 @@ void __pthread_reset_main_thread(void); void __fresetlockfiles(void); void __pthread_manager_adjust_prio(int thread_prio); void __pthread_set_own_extricate_if(pthread_descr self, pthread_extricate_if *peif); +void __pthread_initialize_minimal (void); extern int __pthread_attr_setguardsize __P ((pthread_attr_t *__attr, size_t __guardsize)); diff --git a/libpthread/linuxthreads/pthread.c b/libpthread/linuxthreads/pthread.c index 548f83a5f..5142d4c13 100644 --- a/libpthread/linuxthreads/pthread.c +++ b/libpthread/linuxthreads/pthread.c @@ -236,6 +236,18 @@ void (*__pthread_suspend)(pthread_descr) = __pthread_suspend_old; static void pthread_initialize(void) __attribute__((constructor)); + /* Do some minimal initialization which has to be done during the + startup of the C library. */ +void __pthread_initialize_minimal(void) +{ + /* If we have special thread_self processing, initialize + * that for the main thread now. */ +#ifdef INIT_THREAD_SELF + INIT_THREAD_SELF(&__pthread_initial_thread, 0); +#endif +} + + static void pthread_initialize(void) { struct sigaction sa; -- cgit v1.2.3