aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/mach/hurd/i386/init-first.c50
2 files changed, 39 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 2983b168e4..6acc257c15 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
1998-10-19 Roland McGrath <roland@baalperazim.frob.com>
+ * sysdeps/mach/hurd/i386/init-first.c (posixland_init): New function,
+ broken out of init1.
+ (init1) [PIC]: Call it.
+ (__libc_init_first) [! PIC]: Call it.
+
* nscd/nscd-client.h: New file, broken out of "nscd.h".
* nscd/nscd.h: Move defns needed by clients to "nscd-client.h",
and #include that.
diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c
index 85091c4c6b..bfc2ff5b57 100644
--- a/sysdeps/mach/hurd/i386/init-first.c
+++ b/sysdeps/mach/hurd/i386/init-first.c
@@ -48,6 +48,23 @@ void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__));
Importantly, these are called before anything tries to use malloc. */
DEFINE_HOOK (_hurd_preinit_hook, (void));
+
+/* We call this once the Hurd magic is all set up and we are ready to be a
+ Posixoid program. This does the same things the generic version does. */
+static void internal_function
+posixland_init (int argc, char **argv)
+{
+ __libc_init (argc, argv, __environ);
+
+ /* This is a hack to make the special getopt in GNU libc working. */
+ __getopt_clean_environment (__environ);
+
+#ifdef PIC
+ __libc_global_ctors ();
+#endif
+}
+
+
static void
init1 (int argc, char *arg0, ...)
{
@@ -107,20 +124,14 @@ init1 (int argc, char *arg0, ...)
d->intarray, d->intarraysize);
#ifndef PIC
- __libc_enable_secure = _dl_hurd_data->flags & EXEC_SECURE;
-#endif
-
- __libc_init (argc, argv, __environ);
-
- /* This is a hack to make the special getopt in GNU libc working. */
- __getopt_clean_environment (__environ);
-
-#ifdef PIC
- __libc_global_ctors ();
+ __libc_enable_secure = d->flags & EXEC_SECURE;
+#else
+ posixland_init(argc, argv);
#endif
}
-static void
+
+static inline void
init (int *data)
{
int argc = *data;
@@ -232,15 +243,22 @@ _init (int argc, ...)
void
-__libc_init_first (int argc __attribute__ ((unused)), ...)
+__libc_init_first (int argc, char **argv, char **envp)
+#ifdef PIC
{
+ /* Everything was done in the shared library initializer, _init. */
+}
+#else
+{
+ posixland_init(argc, argv);
}
-
+/* XXX This is all a crock and I am not happy with it.
+ This poorly-named function is called by static-start.S,
+ which should not exist at all. */
void
_hurd_stack_setup (int argc __attribute__ ((unused)), ...)
{
-#ifndef PIC
void doinit (int *data)
{
/* This function gets called with the argument data at TOS. */
@@ -252,7 +270,7 @@ _hurd_stack_setup (int argc __attribute__ ((unused)), ...)
/* Push the user return address after the argument data, and then
jump to `doinit1' (above), so it is as if __libc_init_first's
caller had called `doinit1' with the argument data already on the
- stack. */
+ stack. */
*--data = (&argc)[-1];
asm volatile ("movl %0, %%esp\n" /* Switch to new outermost stack. */
"movl $0, %%ebp\n" /* Clear outermost frame pointer. */
@@ -266,8 +284,8 @@ _hurd_stack_setup (int argc __attribute__ ((unused)), ...)
RUN_HOOK (_hurd_preinit_hook, ());
_hurd_startup ((void **) &argc, &doinit);
-#endif
}
+#endif
/* This function is defined here so that if this file ever gets into