Preserve link time dependencies over relocation dependencies

This commit is contained in:
Andreas Schwab 2011-10-19 17:13:56 +02:00
parent 855d156018
commit d45c60c2fe
3 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2011-10-20 Andreas Schwab <schwab@redhat.com>
[BZ #12892]
* elf/dl-fini.c (_dl_sort_fini): Ignore relocation dependency if
it would create a cycle with a link time dependency.
2011-10-19 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/multiarch/rawmemchr.S: Small optimization to safe an

8
NEWS
View File

@ -1,4 +1,4 @@
GNU C Library NEWS -- history of user-visible changes. 2011-10-19
GNU C Library NEWS -- history of user-visible changes. 2011-10-20
Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
See the end for copying conditions.
@ -9,9 +9,9 @@ Version 2.15
* The following bugs are resolved with this release:
6779, 6783, 9696, 11589, 12403, 12847, 12868, 12852, 12874, 12885, 12907,
12922, 12935, 13007, 13021, 13067, 13068, 13090, 13092, 13114, 13118,
13123, 13134, 13138, 13150, 13179, 13192, 13268, 13291
6779, 6783, 9696, 11589, 12403, 12847, 12868, 12852, 12874, 12885, 12892,
12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090, 13092, 13114,
13118, 13123, 13134, 13138, 13150, 13179, 13192, 13268, 13291
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.

View File

@ -100,7 +100,17 @@ _dl_sort_fini (struct link_map **maps, size_t nmaps, char *used, Lmid_t ns)
/* Look through the relocation dependencies of the object. */
while (m-- > 0)
if (__builtin_expect (relmaps[m] == thisp, 0))
goto move;
{
/* If a cycle exists with a link time dependency,
preserve the latter. */
struct link_map **runp = thisp->l_initfini;
if (runp != NULL)
while (*runp != NULL)
if (__builtin_expect (*runp++ == maps[k], 0))
goto ignore;
goto move;
}
ignore:;
}
--k;