aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--csu/Makefile2
-rw-r--r--elf/rtld.c11
-rw-r--r--include/sched.h2
-rw-r--r--sysdeps/generic/libc-tls.c6
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h4
6 files changed, 33 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index d251b1a14f..8f327f99b7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2002-08-15 Ulrich Drepper <drepper@redhat.com>
+
+ * 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 <roland@redhat.com>
* elf/dl-load.c (lose): Remove [!SHARED] conditional from null check
@@ -55,10 +66,10 @@
2002-08-13 Jakub Jelinek <jakub@redhat.com>
- * 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 <roland@redhat.com>
diff --git a/csu/Makefile b/csu/Makefile
index ca8dbbbeac..c0a06e3867 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 8a144730ca..5c426000ad 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 26ff9c2be1..291811a6d3 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 cc56a44022..51b85ef28f 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 3653f73618..e62e90c8e0 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