diff options
-rw-r--r-- | ChangeLog | 74 | ||||
-rw-r--r-- | elf/rtld.c | 18 |
2 files changed, 55 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog index b185bfad98..3406a6deae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2002-08-05 Ulrich Drepper <drepper@redhat.com> + + * elf/rtld.c (_dl_start): Don't use memset. Use same tricks as for + the other memset call in this function. + + * sysdeps/generic/dl-tls.c (_dl_allocate_tls_init): Store dtv pointer + at correct index. Clear BSS region now that memalign is used. + 2002-08-05 Roland McGrath <roland@redhat.com> * include/sys/utsname.h: Use libc_hidden_proto for uname, __uname. @@ -6,39 +14,39 @@ 2002-08-05 Jakub Jelinek <jakub@redhat.com> - * include/wchar.h (wcrtomb, wcscmp, wcsftime, wcsspn, wcschr, wcscoll, - wcspbrk): Add libc_hidden_proto. - * time/strftime.c (my_strftime): Add libc_hidden_def. - (strftime): Remove libc_hidden_def. - * wcsmbs/wcschr.c (wcschr): Add libc_hidden_def. - * wcsmbs/wcspbrk.c (wcspbrk): Likewise. - * wcsmbs/wcsspn.c (wcsspn): Likewise. - * wcsmbs/wcscmp.c (wcscmp): Likewise. - * wcsmbs/wcrtomb.c (wcrtomb): Add libc_hidden_weak. - * wcsmbs/wcscoll.c (wcscoll): Likewise. - - * include/rpc/rpc.h (__rpc_thread_svc_max_pollfd, - __rpc_thread_svc_pollfd, __rpc_thread_svc_fdset, - __rpc_thread_createerr): Add libc_hidden_proto. - * sunrpc/rpc_thread.c (__rpc_thread_svc_max_pollfd, - __rpc_thread_svc_pollfd, __rpc_thread_svc_fdset, - __rpc_thread_createerr): Add libc_hidden_def. - - * include/rpc/clnt.h (clnt_sperrno, clnt_spcreateerror, - clnt_perror, clnt_sperror, _rpc_dtablesize): Add libc_hidden_proto. - * sunrpc/clnt_perr.c (clnt_sperrno, clnt_spcreateerror, - clnt_perror, clnt_sperror): Add libc_hidden_def. - * sunrpc/rpc_dtable.c (_rpc_dtablesize): Likewise. - - * include/rpc/des_crypt.h (des_setparity, ecb_crypt, cbc_crypt): Add - libc_hidden_proto. - * sunrpc/des_crypt.c (ecb_crypt, cbc_crypt): Add libc_hidden_proto. - * sunrpc/des_soft.c (des_setparity): Likewise. - - * include/rpc/auth.h (key_encryptsession_pk, key_decryptsession_pk): - Add libc_hidden_proto. - * sunrpc/key_call.c (key_encryptsession_pk, key_decryptsession_pk): - Add libc_hidden_def. + * include/wchar.h (wcrtomb, wcscmp, wcsftime, wcsspn, wcschr, wcscoll, + wcspbrk): Add libc_hidden_proto. + * time/strftime.c (my_strftime): Add libc_hidden_def. + (strftime): Remove libc_hidden_def. + * wcsmbs/wcschr.c (wcschr): Add libc_hidden_def. + * wcsmbs/wcspbrk.c (wcspbrk): Likewise. + * wcsmbs/wcsspn.c (wcsspn): Likewise. + * wcsmbs/wcscmp.c (wcscmp): Likewise. + * wcsmbs/wcrtomb.c (wcrtomb): Add libc_hidden_weak. + * wcsmbs/wcscoll.c (wcscoll): Likewise. + + * include/rpc/rpc.h (__rpc_thread_svc_max_pollfd, + __rpc_thread_svc_pollfd, __rpc_thread_svc_fdset, + __rpc_thread_createerr): Add libc_hidden_proto. + * sunrpc/rpc_thread.c (__rpc_thread_svc_max_pollfd, + __rpc_thread_svc_pollfd, __rpc_thread_svc_fdset, + __rpc_thread_createerr): Add libc_hidden_def. + + * include/rpc/clnt.h (clnt_sperrno, clnt_spcreateerror, + clnt_perror, clnt_sperror, _rpc_dtablesize): Add libc_hidden_proto. + * sunrpc/clnt_perr.c (clnt_sperrno, clnt_spcreateerror, + clnt_perror, clnt_sperror): Add libc_hidden_def. + * sunrpc/rpc_dtable.c (_rpc_dtablesize): Likewise. + + * include/rpc/des_crypt.h (des_setparity, ecb_crypt, cbc_crypt): Add + libc_hidden_proto. + * sunrpc/des_crypt.c (ecb_crypt, cbc_crypt): Add libc_hidden_proto. + * sunrpc/des_soft.c (des_setparity): Likewise. + + * include/rpc/auth.h (key_encryptsession_pk, key_decryptsession_pk): + Add libc_hidden_proto. + * sunrpc/key_call.c (key_encryptsession_pk, key_decryptsession_pk): + Add libc_hidden_def. 2002-08-05 Roland McGrath <roland@redhat.com> diff --git a/elf/rtld.c b/elf/rtld.c index f59b8a77b0..44ff5cb492 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -185,6 +185,7 @@ _dl_start (void *arg) { void *tlsblock; size_t max_align = MAX (TLS_INIT_TCB_ALIGN, phdr[cnt].p_align); + char *p; bootstrap_map.l_tls_blocksize = phdr[cnt].p_memsz; bootstrap_map.l_tls_align = phdr[cnt].p_align; @@ -231,10 +232,19 @@ _dl_start (void *arg) # else # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" # endif - memset (__mempcpy (initdtv[2].pointer, bootstrap_map.l_tls_initimage, - bootstrap_map.l_tls_initimage_size), - '\0', (bootstrap_map.l_tls_blocksize - - bootstrap_map.l_tls_initimage_size)); + p = __mempcpy (initdtv[2].pointer, bootstrap_map.l_tls_initimage, + bootstrap_map.l_tls_initimage_size); +# ifdef HAVE_BUILTIN_MEMSET + __builtin_memset (p, '\0', (bootstrap_map.l_tls_blocksize + - bootstrap_map.l_tls_initimage_size)); +# else + { + size_t remaining = (bootstrap_map.l_tls_blocksize + - bootstrap_map.l_tls_initimage_size); + while (remaining-- > 0) + *p++ = '\0'; + } +#endif /* Install the pointer to the dtv. */ |