diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-08-19 10:05:03 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-08-19 10:05:03 +0000 |
commit | 3358b761b15daa480ca0ca788b3fe077ac967674 (patch) | |
tree | d1cea37dd0fbc86a85259b025e62f3e672d68368 /libpthread | |
parent | c8b3ccaedb7e08a2d25ce4485ff7e13ddc6e92a5 (diff) |
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
Diffstat (limited to 'libpthread')
-rw-r--r-- | libpthread/Makefile | 5 | ||||
-rw-r--r-- | libpthread/linuxthreads/errno.c | 13 | ||||
-rw-r--r-- | libpthread/linuxthreads/events.c | 2 | ||||
-rw-r--r-- | libpthread/linuxthreads/internals.h | 1 | ||||
-rw-r--r-- | 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 <stdio.h> -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; |