* sysdeps/generic/libc-tls.c (__libc_setup_tls): Reintroduce changes

from 2002-12-06, but remove unnecessary memset call without removing
	necessary copy of initialization image.

	* Makerules ($(common-objpfx)format.lds): New target.
	(common-generated): Add it.
	($(inst_libdir)/libc.so): Depend on that, and cat it into the result.
	* scripts/output-format.sed: New file.
	* Makefile (distribute): Add it.

2002-12-07  Kenneth W. Chen  <kenneth.w.chen@intel.com>
This commit is contained in:
Roland McGrath 2002-12-07 21:55:56 +00:00
parent cc1b826866
commit 82412d5402
2 changed files with 23 additions and 7 deletions

View File

@ -1,9 +1,21 @@
2002-12-07 Roland McGrath <roland@redhat.com>
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Reintroduce changes
from 2002-12-06, but remove unnecessary memset call without removing
necessary copy of initialization image.
* Makerules ($(common-objpfx)format.lds): New target.
(common-generated): Add it.
($(inst_libdir)/libc.so): Depend on that, and cat it into the result.
* scripts/output-format.sed: New file.
* Makefile (distribute): Add it.
2002-12-07 Ulrich Drepper <drepper@redhat.com> 2002-12-07 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/libc-tls.c: Include <sys/param.h>. * sysdeps/generic/libc-tls.c: Include <sys/param.h>.
Reported by Art Haas <ahaas@airmail.net>. Reported by Art Haas <ahaas@airmail.net>.
2002-12-07 Kenneth W. Chen <kenneth.w.chen@intel.com>. 2002-12-07 Kenneth W. Chen <kenneth.w.chen@intel.com>
* sysdeps/ia64/strncpy.S (strncpy): Clear ar.ec. Fix .recovery4. * sysdeps/ia64/strncpy.S (strncpy): Clear ar.ec. Fix .recovery4.

View File

@ -21,8 +21,10 @@
#include <ldsodefs.h> #include <ldsodefs.h>
#include <tls.h> #include <tls.h>
#include <unistd.h> #include <unistd.h>
#include <stdio.h>
#include <sys/param.h> #include <sys/param.h>
#ifdef SHARED #ifdef SHARED
#error makefile bug, this file is for static only #error makefile bug, this file is for static only
#endif #endif
@ -169,8 +171,8 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
/* Initialize the TLS block. */ /* Initialize the TLS block. */
# if TLS_TCB_AT_TP # if TLS_TCB_AT_TP
static_dtv[2].pointer = ((char *) tlsblock + tcb_offset static_dtv[2].pointer = ((char *) tlsblock + tcb_offset
- roundup (memsz, align)); - roundup (memsz, align ?: 1));
static_map.l_tls_offset = roundup (memsz, align); static_map.l_tls_offset = roundup (memsz, align ?: 1);
# elif TLS_DTV_AT_TP # elif TLS_DTV_AT_TP
tcb_offset = roundup (tcbsize, align); tcb_offset = roundup (tcbsize, align);
static_dtv[2].pointer = (char *) tlsblock + tcb_offset; static_dtv[2].pointer = (char *) tlsblock + tcb_offset;
@ -178,8 +180,8 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
# else # else
# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
# endif # endif
memset (__mempcpy (static_dtv[2].pointer, initimage, filesz), /* sbrk gives us zero'd memory, so we don't need to clear the remainder. */
'\0', memsz - filesz); memcpy (static_dtv[2].pointer, initimage, filesz);
/* Install the pointer to the dtv. */ /* Install the pointer to the dtv. */
@ -187,13 +189,15 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
# if TLS_TCB_AT_TP # if TLS_TCB_AT_TP
INSTALL_DTV ((char *) tlsblock + tcb_offset, static_dtv); INSTALL_DTV ((char *) tlsblock + tcb_offset, static_dtv);
TLS_INIT_TP ((char *) tlsblock + tcb_offset, 0); const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset, 0);
# elif TLS_DTV_AT_TP # elif TLS_DTV_AT_TP
INSTALL_DTV (tlsblock, static_dtv); INSTALL_DTV (tlsblock, static_dtv);
TLS_INIT_TP (tlsblock, 0); const char *lossage = TLS_INIT_TP (tlsblock, 0);
# else # else
# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
# endif # endif
if (__builtin_expect (lossage != NULL, 0))
__libc_fatal (lossage);
/* We have to create a fake link map which normally would be created /* We have to create a fake link map which normally would be created
by the dynamic linker. It just has to have enough information to by the dynamic linker. It just has to have enough information to