diff options
Diffstat (limited to 'elf/dl-close.c')
-rw-r--r-- | elf/dl-close.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/elf/dl-close.c b/elf/dl-close.c index 754dd678fe..6a2ad976a7 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -1,5 +1,5 @@ /* Close a shared object opened by `_dl_open'. - Copyright (C) 1996-2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -330,7 +330,7 @@ _dl_close (void *_map) for (cnt = 0; imap->l_scope[cnt] != NULL; ++cnt) /* This relies on l_scope[] entries being always set either - to its own l_symbolic_searchlist address, or some other map's + to its own l_symbolic_searchlist address, or some map's l_searchlist address. */ if (imap->l_scope[cnt] != &imap->l_symbolic_searchlist) { @@ -347,6 +347,21 @@ _dl_close (void *_map) } } } + else + { + unsigned int cnt = 0; + while (imap->l_scope[cnt] != NULL) + { + if (imap->l_scope[cnt] == &map->l_searchlist) + { + while ((imap->l_scope[cnt] = imap->l_scope[cnt + 1]) + != NULL) + ++cnt; + break; + } + ++cnt; + } + } /* The loader is gone, so mark the object as not having one. Note: l_idx != -1 -> object will be removed. */ |