aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-fini.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-05-30 12:31:25 -0400
committerUlrich Drepper <drepper@gmail.com>2011-05-30 12:31:25 -0400
commit6b1e7d1992cd89032df431c0e0d1418b97e57cd8 (patch)
tree708eff9b7d7318adf26082ca2df86c71899c1255 /elf/dl-fini.c
parent4997db742946d08be4378cf91221f558f928bc73 (diff)
downloadglibc-6b1e7d1992cd89032df431c0e0d1418b97e57cd8.zip
glibc-6b1e7d1992cd89032df431c0e0d1418b97e57cd8.tar.gz
glibc-6b1e7d1992cd89032df431c0e0d1418b97e57cd8.tar.bz2
Handle DSOs without any dependency in ld.so
Diffstat (limited to 'elf/dl-fini.c')
-rw-r--r--elf/dl-fini.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/elf/dl-fini.c b/elf/dl-fini.c
index ba6c62a..269bcec 100644
--- a/elf/dl-fini.c
+++ b/elf/dl-fini.c
@@ -33,9 +33,12 @@ internal_function
_dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps,
char *used, Lmid_t ns)
{
+ /* A list of one element need not be sorted. */
+ if (nmaps == 1)
+ return;
+
/* We can skip looking for the binary itself which is at the front
of the search list for the main namespace. */
- assert (nmaps > 1);
unsigned int i = ns == LM_ID_BASE;
bool seen[nmaps];
memset (seen, false, nmaps * sizeof (seen[0]));
@@ -195,9 +198,8 @@ _dl_fini (void)
assert (ns == LM_ID_BASE || i == nloaded || i == nloaded - 1);
nmaps = i;
- if (nmaps > 1)
- /* Now we have to do the sorting. */
- _dl_sort_fini (GL(dl_ns)[ns]._ns_loaded, maps, nmaps, NULL, ns);
+ /* Now we have to do the sorting. */
+ _dl_sort_fini (GL(dl_ns)[ns]._ns_loaded, maps, nmaps, NULL, ns);
/* We do not rely on the linked list of loaded object anymore from
this point on. We have our own list here (maps). The various