aboutsummaryrefslogtreecommitdiff
path: root/elf/rtld.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-01-24 08:36:13 +0000
committerUlrich Drepper <drepper@redhat.com>2004-01-24 08:36:13 +0000
commite8648a5a87fd0c472cb6002df8111b9a8ec3fba6 (patch)
tree87992735d4b94569a7938455ff304b630b66b8f0 /elf/rtld.c
parent75631a576303d3bf23c0db077dcf5dc15c863063 (diff)
downloadglibc-e8648a5a87fd0c472cb6002df8111b9a8ec3fba6.tar
glibc-e8648a5a87fd0c472cb6002df8111b9a8ec3fba6.tar.gz
glibc-e8648a5a87fd0c472cb6002df8111b9a8ec3fba6.tar.bz2
glibc-e8648a5a87fd0c472cb6002df8111b9a8ec3fba6.zip
Update.
2004-01-22 Jakub Jelinek <jakub@redhat.com> * elf/dl-reloc.c (_dl_relocate_object): Move PT_GNU_RELRO protection into... (_dl_protect_relro): New routine. * sysdeps/generic/ldsodefs.h (_dl_protect_relro): New prototype. * elf/rtld.c (_dl_start_final): Copy l_relro_addr and l_relro_size from bootstrap_map. (_dl_main): Don't set GL(_dl_loaded)->l_relro_{addr,size} here. Call _dl_protect_relro for libraries if prelinking.
Diffstat (limited to 'elf/rtld.c')
-rw-r--r--elf/rtld.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 62c997a00c..3a8ede8579 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -224,6 +224,8 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
memcpy (GL(dl_rtld_map).l_info, info->l.l_info,
sizeof GL(dl_rtld_map).l_info);
GL(dl_rtld_map).l_mach = info->l.l_mach;
+ GL(dl_rtld_map).l_relro_addr = info->l.l_relro_addr;
+ GL(dl_rtld_map).l_relro_size = info->l.l_relro_size;
#endif
_dl_setup_hash (&GL(dl_rtld_map));
GL(dl_rtld_map).l_opencount = 1;
@@ -794,11 +796,6 @@ of this helper program; chances are you did not intend to run this program.\n\
GL(dl_stack_flags) = ph->p_flags;
break;
}
- else if (ph->p_type == PT_GNU_RELRO)
- {
- GL(dl_loaded)->l_relro_addr = ph->p_vaddr;
- GL(dl_loaded)->l_relro_size = ph->p_memsz;
- }
if (__builtin_expect (mode, normal) == verify)
{
@@ -1676,7 +1673,11 @@ cannot allocate TLS data structures for initial thread");
/* Mark all the objects so we know they have been already relocated. */
for (l = GL(dl_loaded); l != NULL; l = l->l_next)
- l->l_relocated = 1;
+ {
+ l->l_relocated = 1;
+ if (l->l_relro_size)
+ _dl_protect_relro (l);
+ }
_dl_sysdep_start_cleanup ();
}