2002-07-23  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/libc-tls.c: New file.
	* csu/Makefile (routines): Add libc-tls.
	(static-only-routines): Add libc-tls.
	* elf/dl-support.c (_dl_phdr): New variable.
	(_dl_phnum): New variable.
	(_dl_aux_init): Initialize _dl_phdr and _dl_phnum from aux vector.
	* sysdeps/generic/libc-start.c (__libc_start_main): Reorganize code
	for !SHARED.  First look through auxiliary vector.  If TLS always
	call __pthread_initialize_minimal.

	* sysdeps/generic/dl-tls.c (_dl_allocate_tls): Make sure size argument
	in mmap call is never zero.
This commit is contained in:
Ulrich Drepper
2002-07-23 23:12:01 +00:00
parent fcda29e260
commit 8a30f00fe8
8 changed files with 236 additions and 13 deletions
+14 -1
View File
@@ -394,13 +394,26 @@ extern void *__dso_handle __attribute__ ((weak));
#endif
#if defined USE_TLS && !defined SHARED
extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
#endif
/* Do some minimal initialization which has to be done during the
startup of the C library. */
void
__pthread_initialize_minimal(void)
{
#ifdef USE_TLS
pthread_descr self = THREAD_SELF;
pthread_descr self;
# ifndef SHARED
/* Unlike in the dynamically linked case the dynamic linker has not
taken care of initializing the TLS data structures. */
__libc_setup_tls (TLS_TCB_SIZE, TLS_TCB_ALIGN);
# endif
self = THREAD_SELF;
/* The memory for the thread descriptor was allocated elsewhere as
part of the TLS allocation. We have to initialize the data