diff options
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r-- | elf/dl-open.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c index 90c1180a8c..4e390d9abd 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -37,6 +37,7 @@ #include <dl-dst.h> #include <dl-prop.h> +#include <dl-delayed-reloc.h> /* We must be careful not to leave us in an inconsistent state. Thus we catch any error and re-raise it after cleaning up. */ @@ -327,6 +328,9 @@ dl_open_worker (void *a) while (l != NULL); _dl_sort_maps (maps, nmaps, NULL, false); + struct dl_delayed_reloc_global delayed_relocations; + _dl_delayed_reloc_init (&delayed_relocations); + int relocation_in_progress = 0; for (unsigned int i = nmaps; i-- > 0; ) @@ -494,6 +498,7 @@ TLS generation counter wrapped! Please report this.")); } } + _dl_delayed_reloc_apply (); _dl_relocate_apply_relro (new); /* Notify the debugger all new objects have been relocated. */ @@ -611,6 +616,7 @@ no more namespaces available for dlmopen()")); if ((mode & __RTLD_AUDIT) == 0) GL(dl_tls_dtv_gaps) = true; + _dl_delayed_reloc_clear (); _dl_close_worker (args.map, true); } |