about summary refs log tree commit diff
path: root/sysdeps/powerpc/elf
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-08-26 18:03:49 +0000
committerUlrich Drepper <drepper@redhat.com>1998-08-26 18:03:49 +0000
commit6075607b9abba5ae10b87a9913f2a26548021272 (patch)
tree7072999d05ec4068a5f71737f7a53c5660becb27 /sysdeps/powerpc/elf
parent00a2f9aa41a4f2a441c3b9787ca1a7701632de5f (diff)
downloadglibc-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')
-rw-r--r--sysdeps/powerpc/elf/libc-start.c23
-rw-r--r--sysdeps/powerpc/elf/start.S11
2 files changed, 26 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)
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)