This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Two more vDSO issues


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]