2002-02-22  Ulrich Drepper  <drepper@redhat.com>

	* 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.
This commit is contained in:
Ulrich Drepper 2002-02-23 07:59:56 +00:00
parent 903b3396b8
commit e413826144
5 changed files with 30 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2002-02-22 Ulrich Drepper <drepper@redhat.com>
* 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 <jakub@redhat.com>
* libio/fileops.c (_IO_file_seekoff_mmap): Fix fseek SEEK_END.

View File

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

View File

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

View File

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

View File

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