diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-05-30 12:31:25 -0400 |
---|---|---|
committer | Carlos O'Donell <carlos@codesourcery.com> | 2011-07-20 16:46:15 -0400 |
commit | 943515f05cdbc1463bb06c9adbd3dcee5c1a7f57 (patch) | |
tree | 5e82049f938c1298cde47036bff1b737fcc04e77 /elf/dl-fini.c | |
parent | 54a051b62c4c2342d1daed78feef663026f8cf0e (diff) | |
download | glibc-release/2.13/master.zip glibc-release/2.13/master.tar.gz glibc-release/2.13/master.tar.bz2 |
Handle DSOs without any dependency in ld.sorelease/2.13/master
(cherry picked from commit 6b1e7d1992cd89032df431c0e0d1418b97e57cd8)
Diffstat (limited to 'elf/dl-fini.c')
-rw-r--r-- | elf/dl-fini.c | 10 |
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 |