]>
Commit | Line | Data |
---|---|---|
fe875de8 MT |
1 | commit 48b67d71ec677d1b3168e52a68b644784cead604 |
2 | Author: Andreas Schwab <schwab@redhat.com> | |
3 | Date: Wed Sep 14 12:12:25 2011 +0200 | |
4 | ||
5 | Also relocate in dependency order when doing symbol dependency testing | |
6 | ||
7 | diff --git a/elf/rtld.c b/elf/rtld.c | |
8 | index 764140d..324d979 100644 | |
9 | --- a/elf/rtld.c | |
10 | +++ b/elf/rtld.c | |
11 | @@ -2027,24 +2027,21 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", | |
12 | { | |
13 | /* We have to do symbol dependency testing. */ | |
14 | struct relocate_args args; | |
15 | - struct link_map *l; | |
16 | + unsigned int i; | |
17 | ||
18 | args.reloc_mode = GLRO(dl_lazy) ? RTLD_LAZY : 0; | |
19 | ||
20 | - l = main_map; | |
21 | - while (l->l_next != NULL) | |
22 | - l = l->l_next; | |
23 | - do | |
24 | + i = main_map->l_searchlist.r_nlist; | |
25 | + while (i-- > 0) | |
26 | { | |
27 | + struct link_map *l = main_map->l_initfini[i]; | |
28 | if (l != &GL(dl_rtld_map) && ! l->l_faked) | |
29 | { | |
30 | args.l = l; | |
31 | _dl_receive_error (print_unresolved, relocate_doit, | |
32 | &args); | |
33 | } | |
34 | - l = l->l_prev; | |
35 | } | |
36 | - while (l != NULL); | |
37 | ||
38 | if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK) | |
39 | && rtld_multiple_ref) |