diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-08-26 18:03:49 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-08-26 18:03:49 +0000 |
commit | 6075607b9abba5ae10b87a9913f2a26548021272 (patch) | |
tree | 7072999d05ec4068a5f71737f7a53c5660becb27 /sysdeps/powerpc/elf/libc-start.c | |
parent | 00a2f9aa41a4f2a441c3b9787ca1a7701632de5f (diff) | |
download | glibc-6075607b9abba5ae10b87a9913f2a26548021272.tar.gz glibc-6075607b9abba5ae10b87a9913f2a26548021272.tar.xz glibc-6075607b9abba5ae10b87a9913f2a26548021272.zip |
Update.
1998-08-26 17:48 Ulrich Drepper <drepper@cygnus.com> * elf/dl-close.c (_dl_close): Move map->l_nsearchlist value into local variable so that map can be freed. Reported by Philippe Troin <phil@fifi.org>. * elf/dl-open.c (dl_open_worker): Correct test for extending global scope array. Patch by Philippe Troin <phil@fifi.org>. 1998-08-26 Geoff Keating <geoffk@ozemail.com.au> * sysdeps/powerpc/register-dump.h: Rewrite. Much nicer this way. Don't call writev() with a 100-element vector. * sysdeps/generic/segfault.c (catch_segfault): Skip top-level NULL return address. * sysdeps/powerpc/elf/libc-start.c: Sync up with generic version. In particular, set __libc_stack_end. * sysdeps/powerpc/elf/start.S: Allow _init and _fini to be undefined. Fix copyright notice. 1998-08-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/Makefile (gmp-objs): New variable. ($(objpfx)atest-exp, $(objpfx)atest-sincos, $(objpfx)atest-exp2): Depend on it. (tests): Add atest-exp atest-sincos atest-exp2. (tests-static): Remove atest-exp atest-sincos atest-exp2. * elf/rtld.c (dl_main): Unload map file before jumping to user code.
Diffstat (limited to 'sysdeps/powerpc/elf/libc-start.c')
-rw-r--r-- | sysdeps/powerpc/elf/libc-start.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/sysdeps/powerpc/elf/libc-start.c b/sysdeps/powerpc/elf/libc-start.c index 535eab2a64..e90553a154 100644 --- a/sysdeps/powerpc/elf/libc-start.c +++ b/sysdeps/powerpc/elf/libc-start.c @@ -25,6 +25,7 @@ extern void __libc_init_first (int argc, char **argv, char **envp); extern int _dl_starting_up; weak_extern (_dl_starting_up) extern int __libc_multiple_libcs; +extern void *__libc_stack_end; struct startup_info { @@ -67,13 +68,17 @@ __libc_start_main (int argc, char **argv, char **envp, rtld_fini = NULL; } - /* Register the destructor of the dynamic linker if there is any. */ - if (rtld_fini != NULL) - atexit (rtld_fini); + /* Store something that has some relationship to the end of the + stack, for backtraces. This variable should be thread-specific. */ + __libc_stack_end = stack_on_entry + 4; /* Set the global _environ variable correctly. */ __environ = envp; + /* Register the destructor of the dynamic linker if there is any. */ + if (rtld_fini != NULL) + atexit (rtld_fini); + /* Call the initializer of the libc. */ #ifdef PIC if (_dl_debug_impcalls) @@ -81,15 +86,17 @@ __libc_start_main (int argc, char **argv, char **envp, #endif __libc_init_first (argc, argv, envp); - /* Call the initializer of the program. */ + /* Register the destructor of the program, if any. */ + if (stinfo->fini) + atexit (stinfo->fini); + + /* Call the initializer of the program, if any. */ #ifdef PIC if (_dl_debug_impcalls) _dl_debug_message (1, "\ninitialize program: ", argv[0], "\n\n", NULL); #endif - stinfo->init (argc, argv, __environ, auxvec); - - /* Register the destructor of the program. */ - atexit (stinfo->fini); + if (stinfo->init) + stinfo->init (argc, argv, __environ, auxvec); #ifdef PIC if (_dl_debug_impcalls) |