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.
This commit is contained in:
Ulrich Drepper 2002-12-20 08:49:27 +00:00
parent 057c823fbe
commit 676fde70c8
4 changed files with 41 additions and 8 deletions

View file

@ -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.

View file

@ -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;

View file

@ -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)
{

View file

@ -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 ();