From 2a76f7ef1477c3e33dce2d9d7c3005c660de18a0 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 15 Aug 2002 13:04:07 +0000 Subject: [PATCH] Update. 2002-08-15 Ulrich Drepper * csu/Makefile: Define elide-routines.os not static-only-routines. * include/sched.h (__clone): Add varargs at the end. * elf/rtld.c (_dl_start): All TLS_INIT_TP to fail and stop in that case. (TLS_INIT_HELPER): If defined use it. * sysdeps/generic/libc-tls.c (TLS_INIT_HELPER): Likewise. * locale/loadarchive.c (archfname): Add missing slash. * sysdeps/generic/strtold.c (__strtold_internal): Add libc_hidden_def. * wcsmbs/wcstold.c (__wcstold_internal): Add libc_hidden_def. --- ChangeLog | 17 ++++++++++++++--- csu/Makefile | 2 +- elf/rtld.c | 11 +++++++++-- include/sched.h | 2 +- sysdeps/generic/libc-tls.c | 6 ++++++ sysdeps/unix/sysv/linux/kernel-features.h | 4 ++-- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index d251b1a..8f327f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-08-15 Ulrich Drepper + + * csu/Makefile: Define elide-routines.os not static-only-routines. + + * include/sched.h (__clone): Add varargs at the end. + + * elf/rtld.c (_dl_start): All TLS_INIT_TP to fail and stop in that + case. + (TLS_INIT_HELPER): If defined use it. + * sysdeps/generic/libc-tls.c (TLS_INIT_HELPER): Likewise. + 2002-08-15 Roland McGrath * elf/dl-load.c (lose): Remove [!SHARED] conditional from null check @@ -55,10 +66,10 @@ 2002-08-13 Jakub Jelinek - * locale/loadarchive.c (archfname): Add missing slash. + * locale/loadarchive.c (archfname): Add missing slash. - * sysdeps/generic/strtold.c (__strtold_internal): Add libc_hidden_def. - * wcsmbs/wcstold.c (__wcstold_internal): Add libc_hidden_def. + * sysdeps/generic/strtold.c (__strtold_internal): Add libc_hidden_def. + * wcsmbs/wcstold.c (__wcstold_internal): Add libc_hidden_def. 2002-08-12 Roland McGrath diff --git a/csu/Makefile b/csu/Makefile index ca8dbbb..c0a06e3 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -28,7 +28,7 @@ subdir := csu routines = init-first libc-start $(libc-init) sysdep version check_fds \ libc-tls -static-only-routines = libc-tls +elide-routines.os = libc-tls csu-dummies = $(filter-out $(start-installed-name),crt1.o Mcrt1.o) extra-objs = start.o gmon-start.o \ $(start-installed-name) g$(start-installed-name) $(csu-dummies) diff --git a/elf/rtld.c b/elf/rtld.c index 8a14473..5c42600 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -117,6 +117,11 @@ static hp_timing_t relocate_time; static hp_timing_t load_time; #endif +/* Additional definitions needed by TLS initialization. */ +#ifdef TLS_INIT_HELPER +TLS_INIT_HELPER +#endif + static ElfW(Addr) _dl_start_final (void *arg, struct link_map *bootstrap_map_p, hp_timing_t start_time); @@ -257,10 +262,12 @@ _dl_start (void *arg) INSTALL_DTV ((char *) tlsblock + bootstrap_map.l_tls_offset, initdtv); - TLS_INIT_TP ((char *) tlsblock + bootstrap_map.l_tls_offset); + if (TLS_INIT_TP ((char *) tlsblock + bootstrap_map.l_tls_offset) != 0) + _dl_fatal_printf ("cannot setup thread-local storage\n"); # elif TLS_DTV_AT_TP INSTALL_DTV (tlsblock, initdtv); - TLS_INIT_TP (tlsblock); + if (TLS_INIT_TP (tlsblock) != 0) + _dl_fatal_printf ("cannot setup thread-local storage\n"); # else # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" # endif diff --git a/include/sched.h b/include/sched.h index 26ff9c2..291811a 100644 --- a/include/sched.h +++ b/include/sched.h @@ -16,7 +16,7 @@ extern int __sched_rr_get_interval (__pid_t __pid, struct timespec *__t); /* These are Linux specific. */ extern int __clone (int (*__fn) (void *__arg), void *__child_stack, - int __flags, void *__arg); + int __flags, void *__arg, ...); extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base, size_t __child_stack_size, int __flags, void *__arg); #endif diff --git a/sysdeps/generic/libc-tls.c b/sysdeps/generic/libc-tls.c index cc56a44..51b85ef 100644 --- a/sysdeps/generic/libc-tls.c +++ b/sysdeps/generic/libc-tls.c @@ -47,6 +47,12 @@ static struct static struct link_map static_map; +/* Additional definitions needed by TLS initialization. */ +#ifdef TLS_INIT_HELPER +TLS_INIT_HELPER +#endif + + void __libc_setup_tls (size_t tcbsize, size_t tcbalign) { diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 3653f73..e62e90c 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -185,8 +185,8 @@ #endif /* On x86, the set_thread_area syscall was introduced in 2.5.29, but its - semantics was changed in 2.5.30. */ -#if __LINUX_KERNEL_VERSION >= 132382 && defined __i386__ + semantics was changed in 2.5.30, and again after 2.3.31. */ +#if __LINUX_KERNEL_VERSION >= 132384 && defined __i386__ # define __ASSUME_SET_THREAD_AREA_SYSCALL 1 #endif -- 2.7.4