From 6075607b9abba5ae10b87a9913f2a26548021272 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 26 Aug 1998 18:03:49 +0000 Subject: Update. 1998-08-26 17:48 Ulrich Drepper * elf/dl-close.c (_dl_close): Move map->l_nsearchlist value into local variable so that map can be freed. Reported by Philippe Troin . * elf/dl-open.c (dl_open_worker): Correct test for extending global scope array. Patch by Philippe Troin . 1998-08-26 Geoff Keating * 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 * 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. --- sysdeps/powerpc/elf/libc-start.c | 23 +++++++++++++++-------- sysdeps/powerpc/elf/start.S | 11 +++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) (limited to 'sysdeps/powerpc/elf') 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) diff --git a/sysdeps/powerpc/elf/start.S b/sysdeps/powerpc/elf/start.S index 94cb423629..a52ac8b64d 100644 --- a/sysdeps/powerpc/elf/start.S +++ b/sysdeps/powerpc/elf/start.S @@ -7,6 +7,15 @@ published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + In addition to the permissions in the GNU Library General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The Library General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU @@ -22,6 +31,8 @@ /* These are the various addresses we require. */ .section ".rodata" .align 2 + weak_extern(_init) + weak_extern(_fini) L(start_addresses): .long _SDA_BASE_ .long JUMPTARGET(main) -- cgit v1.2.3