| commit 71bcfa62451dfaa015326d3524f2a0e2d09d80ed |
| Author: David Kilroy <David.Kilroy@arm.com> |
| Date: Wed Feb 12 14:30:31 2020 -0300 |
| |
| elf: avoid redundant sort in dlopen |
| |
| l_initfini is already sorted by dependency in _dl_map_object_deps(), |
| so avoid sorting again in dl_open_worker(). |
| |
| Tested by running the testsuite on x86_64. |
| |
| diff --git a/elf/dl-open.c b/elf/dl-open.c |
| index d31356f7e17dfb14..980a28c836ca9a7a 100644 |
| |
| |
| @@ -614,9 +614,10 @@ dl_open_worker (void *a) |
| if (GLRO(dl_lazy)) |
| reloc_mode |= mode & RTLD_LAZY; |
| |
| - /* Sort the objects by dependency for the relocation process. This |
| - allows IFUNC relocations to work and it also means copy |
| - relocation of dependencies are if necessary overwritten. */ |
| + /* Objects must be sorted by dependency for the relocation process. |
| + This allows IFUNC relocations to work and it also means copy |
| + relocation of dependencies are if necessary overwritten. |
| + __dl_map_object_deps has already sorted l_initfini for us. */ |
| unsigned int nmaps = 0; |
| unsigned int j = 0; |
| struct link_map *l = new->l_initfini[0]; |
| @@ -639,7 +640,6 @@ dl_open_worker (void *a) |
| l = new->l_initfini[++j]; |
| } |
| while (l != NULL); |
| - _dl_sort_maps (maps, nmaps, NULL, false); |
| |
| int relocation_in_progress = 0; |
| |