+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.
_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;
}
}
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");
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
/* 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. */