diff options
Diffstat (limited to 'sysdeps/mach/hurd/i386/init-first.c')
-rw-r--r-- | sysdeps/mach/hurd/i386/init-first.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c index 15c9deab55..a50e41892a 100644 --- a/sysdeps/mach/hurd/i386/init-first.c +++ b/sysdeps/mach/hurd/i386/init-first.c @@ -132,12 +132,20 @@ init (int *data) struct hurd_startup_data *d; unsigned long int threadvars[_HURD_THREADVAR_MAX]; - /* Provide temporary storage for thread-specific variables on the startup - stack so the cthreads initialization code can use them for malloc et al, - or so we can use malloc below for the real threadvars array. */ + /* Provide temporary storage for thread-specific variables on the + startup stack so the cthreads initialization code can use them + for malloc et al, or so we can use malloc below for the real + threadvars array. */ memset (threadvars, 0, sizeof threadvars); __hurd_threadvar_stack_offset = (unsigned long int) threadvars; + /* Since the cthreads initialization code uses malloc, and the + malloc initialization code needs to get at the environment, make + sure we can find it. We'll need to do this again later on since + switching stacks changes the location where the environment is + stored. */ + __environ = envp; + while (*envp) ++envp; d = (void *) ++envp; |