aboutsummaryrefslogtreecommitdiff
path: root/elf/rtld.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-01-24 18:32:30 +0100
committerFlorian Weimer <fweimer@redhat.com>2017-01-24 18:32:30 +0100
commitdefaba407d488d348eb1849cc9b57d2269e5cf9d (patch)
tree02d6304fe6aaa3c144b302963b70a39eb3824afb /elf/rtld.c
parentfeb6d6b394bd0ebd74d3f4370394dfb94b1f011a (diff)
downloadglibc-fw/bug21041.tar.xz
glibc-fw/bug21041.zip
WIP delayed IFUNC relocationfw/bug21041
Diffstat (limited to 'elf/rtld.c')
-rw-r--r--elf/rtld.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 16119e8c31..cb9d330d66 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -41,6 +41,7 @@
#include <tls.h>
#include <stap-probe.h>
#include <stackinfo.h>
+#include <dl-ifunc.h>
#include <assert.h>
@@ -2114,10 +2115,11 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
HP_TIMING_ACCUM_NT (relocate_time, add);
}
- /* Activate RELRO protection. In the prelink case, this was already
- done earlier. */
+ /* Perform delayed IFUNC relocations and activate RELRO protection.
+ In the prelink case, this was already done earlier. */
if (! prelinked)
{
+ _dl_ifunc_apply_relocations (main_map);
/* Make sure that this covers the dynamic linker as well.
TODO: rtld_multiple_ref is always true because libc.so needs
the dynamic linker internally. */