diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-12-20 08:49:27 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-12-20 08:49:27 +0000 |
commit | 676fde70c8940888bed31881ec9d0fd5c34f9dc0 (patch) | |
tree | bd680e1d2a7b269e51f1ffca66922ff4f2935bb4 | |
parent | 057c823fbef95bf0ddb2a33c109b82488390ecec (diff) | |
download | glibc-676fde70c8940888bed31881ec9d0fd5c34f9dc0.zip glibc-676fde70c8940888bed31881ec9d0fd5c34f9dc0.tar.gz glibc-676fde70c8940888bed31881ec9d0fd5c34f9dc0.tar.bz2 |
Update.
2002-12-20 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/dl-sysdep.c (_dl_important_hwcaps): For TLS
builds add "tls" in the search path.
* elf/ldconfig.c (is_hwcap_platform): Also recognize "tls".
(path_hwcap): Recognize "tls".
* sysdeps/unix/sysv/linux/i386/system.c (cancel_handler): Use
__waitpid instead of waitpid.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | elf/ldconfig.c | 14 | ||||
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/system.c | 2 |
4 files changed, 41 insertions, 8 deletions
@@ -1,5 +1,15 @@ +2002-12-20 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/generic/dl-sysdep.c (_dl_important_hwcaps): For TLS + builds add "tls" in the search path. + * elf/ldconfig.c (is_hwcap_platform): Also recognize "tls". + (path_hwcap): Recognize "tls". + 2002-12-19 Ulrich Drepper <drepper@redhat.com> + * sysdeps/unix/sysv/linux/i386/system.c (cancel_handler): Use + __waitpid instead of waitpid. + * sysdeps/unix/sysv/linux/i386/_exit.S: Use ENTER_KERNEL instead of int $0x80. * sysdeps/unix/sysv/linux/i386/getcontext.S: Likewise. diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 7e813d4..1b501e6 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -158,6 +158,11 @@ is_hwcap_platform (const char *name) if (hwcap_idx != -1) return 1; +#ifdef USE_TLS + if (strcmp (name, "tls") == 0) + return 1; +#endif + return 0; } @@ -190,7 +195,14 @@ path_hwcap (const char *path) { h = _dl_string_platform (ptr + 1); if (h == (uint64_t) -1) - break; + { +#ifdef USE_TLS + if (strcmp (ptr + 1, "tls") == 0) + h = 63; + else +#endif + break; + } } hwcap += 1ULL << h; diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index fbe5ad4..2a47a32 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -37,6 +37,7 @@ #include <dl-procinfo.h> #include <dl-osinfo.h> #include <hp-timing.h> +#include <tls.h> extern char **_environ attribute_hidden; extern void _end attribute_hidden; @@ -291,17 +292,17 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, if ((masked & (1UL << n)) != 0) ++cnt; +#ifdef USE_TLS + /* For TLS enabled builds always add 'tls'. */ + ++cnt; +#else if (cnt == 0) { /* If we have platform name and no important capability we only have the base directory to search. */ result = (struct r_strlenpair *) malloc (sizeof (*result)); if (result == NULL) - { - no_memory: - INTUSE(_dl_signal_error) (ENOMEM, NULL, NULL, - N_("cannot create capability list")); - } + goto no_memory; result[0].str = (char *) result; /* Does not really matter. */ result[0].len = 0; @@ -309,6 +310,7 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, *sz = 1; return result; } +#endif /* Create temporary data structure to generate result table. */ temp = (struct r_strlenpair *) alloca (cnt * sizeof (*temp)); @@ -327,6 +329,11 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, temp[m].len = platform_len; ++m; } +#ifdef USE_TLS + temp[m].str = "tls"; + temp[m].len = 3; + ++m; +#endif assert (m == cnt); /* Determine the total size of all strings together. */ @@ -344,7 +351,11 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, *sz = 1 << cnt; result = (struct r_strlenpair *) malloc (*sz * sizeof (*result) + total); if (result == NULL) - goto no_memory; + { + no_memory: + INTUSE(_dl_signal_error) (ENOMEM, NULL, NULL, + N_("cannot create capability list")); + } if (cnt == 1) { diff --git a/sysdeps/unix/sysv/linux/i386/system.c b/sysdeps/unix/sysv/linux/i386/system.c index aa33471..c7287e4 100644 --- a/sysdeps/unix/sysv/linux/i386/system.c +++ b/sysdeps/unix/sysv/linux/i386/system.c @@ -56,7 +56,7 @@ cancel_handler (void *arg) { __kill (SIGKILL, *(pid_t *) arg); - TEMP_FAILURE_RETRY (waitpid (*(pid_t *) arg, NULL, 0)); + TEMP_FAILURE_RETRY (__waitpid (*(pid_t *) arg, NULL, 0)); DO_LOCK (); |