aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-open.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r--elf/dl-open.c6
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);
}