diff options
author | Andreas Schwab <schwab@redhat.com> | 2010-09-21 13:52:12 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2010-09-21 13:52:12 -0700 |
commit | 56801c50d497685de85b1901193c9c79fadb513c (patch) | |
tree | b0a705e4bf299adec8bd989311aae128d2db617e /elf/dl-close.c | |
parent | dda51327baa01c8e5c188a9952317396bb5569b1 (diff) | |
download | glibc-56801c50d497685de85b1901193c9c79fadb513c.tar glibc-56801c50d497685de85b1901193c9c79fadb513c.tar.gz glibc-56801c50d497685de85b1901193c9c79fadb513c.tar.bz2 glibc-56801c50d497685de85b1901193c9c79fadb513c.zip |
Move freeres function from ld.so to libc.so.
Diffstat (limited to 'elf/dl-close.c')
-rw-r--r-- | elf/dl-close.c | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/elf/dl-close.c b/elf/dl-close.c index 286d67c224..f6d8dd313c 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -748,77 +748,3 @@ _dl_close (void *_map) __rtld_lock_unlock_recursive (GL(dl_load_lock)); } - - -static bool __libc_freeres_fn_section -free_slotinfo (struct dtv_slotinfo_list **elemp) -{ - size_t cnt; - - if (*elemp == NULL) - /* Nothing here, all is removed (or there never was anything). */ - return true; - - if (!free_slotinfo (&(*elemp)->next)) - /* We cannot free the entry. */ - return false; - - /* That cleared our next pointer for us. */ - - for (cnt = 0; cnt < (*elemp)->len; ++cnt) - if ((*elemp)->slotinfo[cnt].map != NULL) - /* Still used. */ - return false; - - /* We can remove the list element. */ - free (*elemp); - *elemp = NULL; - - return true; -} - - -libc_freeres_fn (free_mem) -{ - for (Lmid_t nsid = 0; nsid < GL(dl_nns); ++nsid) - if (__builtin_expect (GL(dl_ns)[nsid]._ns_global_scope_alloc, 0) != 0 - && (GL(dl_ns)[nsid]._ns_main_searchlist->r_nlist - // XXX Check whether we need NS-specific initial_searchlist - == GLRO(dl_initial_searchlist).r_nlist)) - { - /* All object dynamically loaded by the program are unloaded. Free - the memory allocated for the global scope variable. */ - struct link_map **old = GL(dl_ns)[nsid]._ns_main_searchlist->r_list; - - /* Put the old map in. */ - GL(dl_ns)[nsid]._ns_main_searchlist->r_list - // XXX Check whether we need NS-specific initial_searchlist - = GLRO(dl_initial_searchlist).r_list; - /* Signal that the original map is used. */ - GL(dl_ns)[nsid]._ns_global_scope_alloc = 0; - - /* Now free the old map. */ - free (old); - } - - if (USE___THREAD || GL(dl_tls_dtv_slotinfo_list) != NULL) - { - /* Free the memory allocated for the dtv slotinfo array. We can do - this only if all modules which used this memory are unloaded. */ -#ifdef SHARED - if (GL(dl_initial_dtv) == NULL) - /* There was no initial TLS setup, it was set up later when - it used the normal malloc. */ - free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)); - else -#endif - /* The first element of the list does not have to be deallocated. - It was allocated in the dynamic linker (i.e., with a different - malloc), and in the static library it's in .bss space. */ - free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)->next); - } - - void *scope_free_list = GL(dl_scope_free_list); - GL(dl_scope_free_list) = NULL; - free (scope_free_list); -} |