about summary refs log tree commit diff
path: root/sysdeps/generic
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-07-02 08:49:09 +0000
committerUlrich Drepper <drepper@redhat.com>2003-07-02 08:49:09 +0000
commitfcdac13afa00ec69b306669106fd6f30055a56ac (patch)
tree8da594163630c773134b1327ed78730ce6dbee80 /sysdeps/generic
parentef8783de8fbe66520383824da0528b5c2a04cda9 (diff)
downloadglibc-fcdac13afa00ec69b306669106fd6f30055a56ac.tar.gz
glibc-fcdac13afa00ec69b306669106fd6f30055a56ac.tar.xz
glibc-fcdac13afa00ec69b306669106fd6f30055a56ac.zip
Update.
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Don't set
	GL(dl_sysinfo) unles GL(dl_sysinfo_dso) is also set.
	* sysdeps/unix/sysv/linux/kernel-features.h: Define
	__ASSUME_VSYSCALL only for 2.5.69 and up since this is when the
	vsyscall DSO was added.
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/dl-sysdep.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c
index 7990f31fdc..89dda27925 100644
--- a/sysdeps/generic/dl-sysdep.c
+++ b/sysdeps/generic/dl-sysdep.c
@@ -93,6 +93,9 @@ _dl_sysdep_start (void **start_argptr,
 #  define set_seen(tag) seen |= M ((tag)->a_type)
 # endif
 #endif
+#ifndef __ASSUME_VSYSCALL
+  ElfW(Word) new_sysinfo = 0;
+#endif
 
   DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, INTUSE(_dl_argv), _environ,
 			  _dl_auxv);
@@ -146,7 +149,11 @@ _dl_sysdep_start (void **start_argptr,
 	break;
 #ifdef NEED_DL_SYSINFO
       case AT_SYSINFO:
+# ifndef __ASSUME_VSYSCALL
+	new_sysinfo = av->a_un.a_val;
+# else
 	GL(dl_sysinfo) = av->a_un.a_val;
+# endif
 	break;
       case AT_SYSINFO_EHDR:
 	GL(dl_sysinfo_dso) = av->a_un.a_ptr;
@@ -167,7 +174,7 @@ _dl_sysdep_start (void **start_argptr,
       /* Fill in the values we have not gotten from the kernel through the
 	 auxiliary vector.  */
 # ifndef HAVE_AUX_XID
-# define SEE(UID, var, uid) \
+#  define SEE(UID, var, uid) \
    if ((seen & M (AT_##UID)) == 0) var ^= __get##uid ()
       SEE (UID, uid, uid);
       SEE (EUID, uid, euid);
@@ -186,6 +193,12 @@ _dl_sysdep_start (void **start_argptr,
     GL(dl_pagesize) = __getpagesize ();
 #endif
 
+#ifndef __ASSUME_VSYSCALL
+  /* Only set the sysinfo value if we also have the vsyscall DSO.  */
+  if (GL(dl_sysinfo_dso) != 0)
+    GL(dl_sysinfo) = new_sysinfo;
+#endif
+
 #ifdef DL_SYSDEP_INIT
   DL_SYSDEP_INIT;
 #endif