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>.
This commit is contained in:
parent
78477e4843
commit
3300816c38
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,11 @@
|
|||
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.
|
||||
|
||||
2000-04-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* nss/getXXbyYY_r.c: Fix a typo in __old_getxxbyyy_r versioning.
|
||||
|
@ -44,7 +52,7 @@
|
|||
2000-04-27 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* intl/libintl.h: Fix typo, reported by Bruno Haible
|
||||
<clisp.cons.org>.
|
||||
<haible@clisp.cons.org>.
|
||||
|
||||
2000-04-25 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
|
|
|
@ -40,6 +40,9 @@ extern void __deregister_frame (const void *);
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* We have to initialize the thread library at least if bit. */
|
||||
extern void __pthread_initialize_minimal (void) __attribute__ ((weak));
|
||||
|
||||
/* This function will be called from _init in init-first.c. */
|
||||
void
|
||||
__libc_global_ctors (void)
|
||||
|
@ -48,6 +51,11 @@ __libc_global_ctors (void)
|
|||
run_hooks (__CTOR_LIST__);
|
||||
#ifdef HAVE_DWARF2_UNWIND_INFO
|
||||
# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
|
||||
/* Initialize the thread library at least a bit since the libgcc functions
|
||||
are using thread functions if these are available. */
|
||||
if (__pthread_initialize_minimal)
|
||||
__pthread_initialize_minimal ();
|
||||
|
||||
{
|
||||
static struct object ob;
|
||||
__register_frame_info (__EH_FRAME_BEGIN__, &ob);
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2000-04-27 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* Versions [libpthread] (GLIBC_2.2): Add __pthread_initialize_minimal.
|
||||
* pthread.c (__pthread_initialize_minimal): New function. Perform
|
||||
minimal initialization.
|
||||
(pthread_initialize): Remove this code here.
|
||||
* sysdeps/i386/i686/pt-machine.h: Include "../useldt.h" again. We
|
||||
are working around the problem in glibc.
|
||||
|
||||
2000-04-25 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/i386/i686/pt-machine.h: Do not use "../useldt.h" for
|
||||
|
|
|
@ -138,5 +138,8 @@ libpthread {
|
|||
|
||||
# Extensions.
|
||||
pthread_yield;
|
||||
|
||||
# New internal function.
|
||||
__pthread_initialize_minimal;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -63,5 +63,4 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
|
|||
}
|
||||
|
||||
|
||||
/* Use the LDT implementation only if the kernel is fixed. */
|
||||
//#include "../useldt.h"
|
||||
#include "../useldt.h"
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2000-04-24 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* td_thr_get_info.c (td_thr_get_info): Set ti_state to
|
||||
TD_THR_ACTIVE instead of TD_THR_RUN. If the thread is no longer
|
||||
running but is still joinable, set it to TD_THR_ZOMBIE. Otherwise
|
||||
set it to TD_THR_UNKNOWN.
|
||||
|
||||
2000-02-25 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* td_ta_thr_iter.c: Include <alloca.h> for prototype declaration.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Low-level functions for atomic operations. ix86 version, x >= 4.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
|
@ -23,11 +23,11 @@
|
|||
#include <inttypes.h>
|
||||
|
||||
|
||||
static inline int
|
||||
static inline uint32_t
|
||||
__attribute__ ((unused))
|
||||
exchange_and_add (volatile uint32_t *mem, int val)
|
||||
exchange_and_add (volatile uint32_t *mem, uint32_t val)
|
||||
{
|
||||
register int result;
|
||||
register uint32_t result;
|
||||
__asm__ __volatile__ ("lock; xaddl %0,%2"
|
||||
: "=r" (result) : "0" (val), "m" (*mem) : "memory");
|
||||
return result;
|
||||
|
|
Loading…
Reference in New Issue