diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-02-23 07:59:56 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-02-23 07:59:56 +0000 |
commit | e413826144bcd0a910e8a6f942ec34a368f65613 (patch) | |
tree | df006e17ef7841a1d2886d800c60365492809291 /sysdeps | |
parent | 903b3396b8a1a5f4488649b7975cffed4c771e80 (diff) | |
download | glibc-e413826144bcd0a910e8a6f942ec34a368f65613.zip glibc-e413826144bcd0a910e8a6f942ec34a368f65613.tar.gz glibc-e413826144bcd0a910e8a6f942ec34a368f65613.tar.bz2 |
Update.
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.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/dl-tls.c | 15 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 4 |
2 files changed, 19 insertions, 0 deletions
diff --git a/sysdeps/generic/dl-tls.c b/sysdeps/generic/dl-tls.c index 7e45850..b7ed69f 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 d722198..779e438 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. */ |