aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/pthread.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-04-27 20:18:02 +0000
committerUlrich Drepper <drepper@redhat.com>2000-04-27 20:18:02 +0000
commit3300816c38721bcddbbeb92de7fe44b90454bce6 (patch)
treecd35fe7dc0799f565c04122cc63054d4790d9041 /linuxthreads/pthread.c
parent78477e4843c34f2ad54d25975758c3342746d0cd (diff)
downloadglibc-3300816c38721bcddbbeb92de7fe44b90454bce6.zip
glibc-3300816c38721bcddbbeb92de7fe44b90454bce6.tar.gz
glibc-3300816c38721bcddbbeb92de7fe44b90454bce6.tar.bz2
Update.
2000-04-27 Ulrich Drepper <drepper@redhat.com> * elf/soinit.c (__libc_global_ctors): Call __pthread_initialize_minimal if this function is available. * sysdeps/i386/i486/atomicity.h (exchange_and_add): Use uint32_t for all values. <haible@clisp.cons.org>.
Diffstat (limited to 'linuxthreads/pthread.c')
-rw-r--r--linuxthreads/pthread.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 7370420..a78e0c9 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -310,6 +310,23 @@ static void pthread_initialize(void) __attribute__((constructor));
extern void *__dso_handle __attribute__ ((weak));
+
+/* Do some minimal initialization which has to be done during the
+ startup of the C library. */
+void
+__pthread_initialize_minimal(void)
+{
+ /* The errno/h_errno variable of the main thread are the global ones. */
+ __pthread_initial_thread.p_errnop = &_errno;
+ __pthread_initial_thread.p_h_errnop = &_h_errno;
+ /* 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;
@@ -330,14 +347,6 @@ static void pthread_initialize(void)
(char *)(((long)CURRENT_STACK_FRAME - 2 * STACK_SIZE) & ~(STACK_SIZE - 1));
/* Update the descriptor for the initial thread. */
__pthread_initial_thread.p_pid = __getpid();
- /* 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
- /* The errno/h_errno variable of the main thread are the global ones. */
- __pthread_initial_thread.p_errnop = &_errno;
- __pthread_initial_thread.p_h_errnop = &_h_errno;
/* Play with the stack size limit to make sure that no stack ever grows
beyond STACK_SIZE minus one page (to act as a guard page). */
getrlimit(RLIMIT_STACK, &limit);