about summary refs log tree commit diff
path: root/sysdeps/mach
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2001-03-24 14:36:00 +0000
committerMark Kettenis <kettenis@gnu.org>2001-03-24 14:36:00 +0000
commit8443afdc7ccfb5b56468e6beea99142ccdf8ebc4 (patch)
tree35dd4edcddaf48c27f0a6eee72e5c40cd6d95043 /sysdeps/mach
parentcb2072400d3ce10b23a08cc962664e275ff6da74 (diff)
downloadglibc-8443afdc7ccfb5b56468e6beea99142ccdf8ebc4.tar.gz
glibc-8443afdc7ccfb5b56468e6beea99142ccdf8ebc4.tar.xz
glibc-8443afdc7ccfb5b56468e6beea99142ccdf8ebc4.zip
* sysdeps/mach/hurd/i386/init-first.c: Include <assert.h>. (_dl_argv): Declare. (init) [SHARED]: Readjust _dl_argv if we switched to a new stack.
2001-03-24  Mark Kettenis  <kettenis@gnu.org>

	* sysdeps/mach/hurd/i386/init-first.c: Include <assert.h>.
	(_dl_argv): Declare.
	(init) [SHARED]: Readjust _dl_argv if we switched to a new stack.
Diffstat (limited to 'sysdeps/mach')
-rw-r--r--sysdeps/mach/hurd/i386/init-first.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c
index b26a9da7dc..4e1b6bc835 100644
--- a/sysdeps/mach/hurd/i386/init-first.c
+++ b/sysdeps/mach/hurd/i386/init-first.c
@@ -1,5 +1,5 @@
 /* Initialization code run first thing by the ELF startup code.  For i386/Hurd.
-   Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc.
+   Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,6 +17,7 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <assert.h>
 #include <hurd.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -42,6 +43,7 @@ int __libc_multiple_libcs = 1;
 
 extern int __libc_argc;
 extern char **__libc_argv;
+extern char **_dl_argv;
 
 void *(*_cthread_init_routine) (void); /* Returns new SP to use.  */
 void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__));
@@ -165,6 +167,13 @@ init (int *data)
       newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data,
 		      (char *) d - (char *) data);
 
+#ifdef SHARED
+      /* And readjust the dynamic linker's idea of where the argument
+         vector lives.  */
+      assert (_dl_argv == argv);
+      _dl_argv = (void *) ((int *) newsp + 1);
+#endif
+
       /* Set up the Hurd startup data block immediately following
 	 the argument and environment pointers on the new stack.  */
       od = (newsp + ((char *) d - (char *) data));