about summary refs log tree commit diff
path: root/sysdeps/generic/segfault.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-02-07 21:21:33 +0000
committerUlrich Drepper <drepper@redhat.com>1999-02-07 21:21:33 +0000
commit48f6496e3fdb55c66088c5122779d400f2b3ac39 (patch)
tree113b269feb61866faad367f3fa0cc71def662237 /sysdeps/generic/segfault.c
parente1f601e87837e586eb6acc1de087aedbc85ea7d4 (diff)
downloadglibc-48f6496e3fdb55c66088c5122779d400f2b3ac39.tar.gz
glibc-48f6496e3fdb55c66088c5122779d400f2b3ac39.tar.xz
glibc-48f6496e3fdb55c66088c5122779d400f2b3ac39.zip
Update.
1999-02-07  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-lookup.c: Increment _dl_num_relocations in the four entry
	point functions, not do_lookup since the later can be called more
	than once.
Diffstat (limited to 'sysdeps/generic/segfault.c')
-rw-r--r--sysdeps/generic/segfault.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/sysdeps/generic/segfault.c b/sysdeps/generic/segfault.c
index 502b239602..848dae43dc 100644
--- a/sysdeps/generic/segfault.c
+++ b/sysdeps/generic/segfault.c
@@ -1,5 +1,5 @@
 /* Catch segmentation faults and print backtrace.
-   Copyright (C) 1998 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -61,9 +61,15 @@ extern void *__libc_stack_end;
 # define INNER_THAN <
 #endif
 
+/* By default assume the `next' pointer in struct layout points to the
+   next struct layout.  */
+#ifndef ADVANCE_STACK_FRAME
+# define ADVANCE_STACK_FRAME(next) ((struct layout *) (next))
+#endif
+
 struct layout
 {
-  struct layout *next;
+  void *next;
   void *return_address;
 };
 
@@ -118,7 +124,7 @@ catch_segfault (int signal, SIGCONTEXT ctx)
     {
       ++cnt;
 
-      current = current->next;
+      current = ADVANCE_STACK_FRAME (current->next);
     }
 
   arr = alloca (cnt * sizeof (void *));
@@ -133,7 +139,7 @@ catch_segfault (int signal, SIGCONTEXT ctx)
     {
       arr[cnt++] = current->return_address;
 
-      current = current->next;
+      current = ADVANCE_STACK_FRAME (current->next);
     }
 
   /* If the last return address was NULL, assume that it doesn't count.  */
@@ -179,7 +185,7 @@ install_handler (void)
 	    sa.sa_flags |= SA_ONSTACK;
 	}
     }
-  
+
   if (sigs == NULL)
     sigaction (SIGSEGV, &sa, NULL);
   else if (sigs[0] == '\0')