From: Ulrich Drepper Date: Sat, 23 Feb 2002 07:59:56 +0000 (+0000) Subject: Update. X-Git-Tag: cvs/glibc-2-3~1051 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e413826144bcd0a910e8a6f942ec34a368f65613;p=thirdparty%2Fglibc.git Update. 2002-02-22 Ulrich Drepper * elf/Versions: Add _dl_allocate_tls and _dl_deallocate_tls. * elf/rtld.c (dl_main): Use _dl_allocate_tls with INTUSE. * sysdeps/generic/dl-tls.c: Add INTDEF for _dl_allocate_tls. (_dl_deallocate_tls): New function. * sysdeps/generic/ldsodefs.h: Declare _dl_allocate_tls_internal and _dl_deallocate_tls. --- diff --git a/ChangeLog b/ChangeLog index 0cd1271d5c3..41d839c8b41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-02-22 Ulrich Drepper + + * elf/Versions: Add _dl_allocate_tls and _dl_deallocate_tls. + * elf/rtld.c (dl_main): Use _dl_allocate_tls with INTUSE. + * sysdeps/generic/dl-tls.c: Add INTDEF for _dl_allocate_tls. + (_dl_deallocate_tls): New function. + * sysdeps/generic/ldsodefs.h: Declare _dl_allocate_tls_internal and + _dl_deallocate_tls. + 2002-02-21 Jakub Jelinek * libio/fileops.c (_IO_file_seekoff_mmap): Fix fseek SEEK_END. diff --git a/elf/Versions b/elf/Versions index 927e26ff462..37d11d87b94 100644 --- a/elf/Versions +++ b/elf/Versions @@ -49,6 +49,6 @@ ld { _dl_map_object; _dl_map_object_deps; _dl_out_of_memory; _dl_relocate_object; _dl_signal_error; _dl_start_profile; _dl_starting_up; _dl_unload_cache; - _rtld_global; _dl_tls_symaddr; + _rtld_global; _dl_tls_symaddr; _dl_allocate_tls; _dl_deallocate_tls; } } diff --git a/elf/rtld.c b/elf/rtld.c index d7653f23945..b926271590e 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -1240,7 +1240,7 @@ of this helper program; chances are you did not intend to run this program.\n\ for the thread descriptor. The memory for the TLS block will never be freed. It should be allocated accordingly. The dtv array can be changed if dynamic loading requires it. */ - tcbp = _dl_allocate_tls (); + tcbp = INTUSE(_dl_allocate_tls) (); if (tcbp == NULL) _dl_fatal_printf ("\ cannot allocate TLS data structures for inital thread"); diff --git a/sysdeps/generic/dl-tls.c b/sysdeps/generic/dl-tls.c index 7e458501987..b7ed69f934d 100644 --- a/sysdeps/generic/dl-tls.c +++ b/sysdeps/generic/dl-tls.c @@ -324,6 +324,21 @@ _dl_allocate_tls (void) return result; } +INTDEF(_dl_allocate_tls) + + +void +internal_function +_dl_deallocate_tls (void *tcb) +{ + dtv_t *dtv = GET_DTV (tcb); + + /* The array starts with dtv[-1]. */ + free (dtv - 1); + + munmap (tcb, GL(dl_tls_static_size)); +} + # ifdef SHARED diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index d7221983289..779e4387531 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -688,6 +688,10 @@ extern void _dl_determine_tlsoffset (void) internal_function; /* Allocate memory for static TLS block and dtv. */ extern void *_dl_allocate_tls (void) internal_function; +extern void *_dl_allocate_tls_internal (void) internal_function; + +/* Deallocate memory allocated with _dl_allocate_tls. */ +extern void _dl_deallocate_tls (void *tcb) internal_function; /* Return the symbol address given the map of the module it is in and the symbol record. */