[PATCH] Two more vDSO issues
Jakub Jelinek
jakub@redhat.com
Fri Feb 27 16:22:00 GMT 2004
Hi!
1) l->ld needs to be relocated as well (I did not catch this up in my
previous testing, because vDSO was mapped both in the new place and
in the old location)
2) if kernel provides just AT_SYSINFO_EHDR but not AT_SYSINFO, ld.so would
segfault.
2004-02-27 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Adjust l->l_ld of the vDSO by l->l_addr.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Only set
GL(dl_sysinfo) if non-zero.
--- libc/elf/rtld.c.jj 2004-02-27 13:51:54.000000000 +0100
+++ libc/elf/rtld.c 2004-02-27 14:56:05.000000000 +0100
@@ -1246,6 +1246,7 @@ ERROR: ld.so: object '%s' from %s cannot
l->l_map_start = (ElfW(Addr)) GL(dl_sysinfo_dso);
l->l_addr = l->l_map_start - l->l_addr;
l->l_map_end += l->l_addr;
+ l->l_ld = (void *) ((ElfW(Addr)) l->l_ld + l->l_addr);
elf_get_dynamic_info (l, dyn_temp);
_dl_setup_hash (l);
l->l_relocated = 1;
--- libc/sysdeps/generic/dl-sysdep.c.jj 2004-02-27 17:08:24.000000000 +0100
+++ libc/sysdeps/generic/dl-sysdep.c 2004-02-27 17:18:39.992891935 +0100
@@ -201,7 +201,7 @@ _dl_sysdep_start (void **start_argptr,
#if defined NEED_DL_SYSINFO
/* Only set the sysinfo value if we also have the vsyscall DSO. */
- if (GL(dl_sysinfo_dso) != 0)
+ if (GL(dl_sysinfo_dso) != 0 && new_sysinfo)
GL(dl_sysinfo) = new_sysinfo;
#endif
Jakub
More information about the Libc-hacker
mailing list