aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-10-26 19:24:58 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-10-26 19:24:58 -0400
commitc6e84dc4845c7da5bf2d477a531a23b9dee5b907 (patch)
tree81de1ef043a16cda0e79ff53416e4ac500c795d7 /gcc
parentb030d598109a6a7060cd00c7422ae4564ede0f0c (diff)
downloadgcc-c6e84dc4845c7da5bf2d477a531a23b9dee5b907.zip
gcc-c6e84dc4845c7da5bf2d477a531a23b9dee5b907.tar.gz
gcc-c6e84dc4845c7da5bf2d477a531a23b9dee5b907.tar.bz2
(__unwind_function): Provide a default definition for implementations
that don't yet have a function unwinder. From-SVN: r10524
Diffstat (limited to 'gcc')
-rw-r--r--gcc/libgcc2.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index ab13f44..d266a4a 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -2349,18 +2349,16 @@ __unwind_function(void *ptr)
/* This is a test routine, as we have to dynamically probe to find out
what to pop for certain, this is just a guess. */
asm("leal -16(%ebp),%esp");
- asm("pop %eax"); /* really for popl %ebx */
- asm("pop %eax"); /* really for popl %esi */
- asm("pop %eax"); /* really for popl %edi */
+ asm("pop %ebx");
+ asm("pop %esi");
+ asm("pop %edi");
asm("movl %ebp,%esp");
asm("popl %ebp");
asm("movl %ecx,0(%esp)");
asm("ret");
}
-#endif
-
-#if #machine(rs6000)
+#elif #machine(rs6000)
__unwind_function(void *ptr)
{
asm("mr 31,1");
@@ -2376,9 +2374,7 @@ __unwind_function(void *ptr)
asm("# br");
asm("mtctr 3;bctr # b 3");
}
-#endif /* rs6000 */
-
-#if #machine(powerpc)
+#elif #machine(powerpc)
__unwind_function(void *ptr)
{
asm("mr 31,1");
@@ -2394,6 +2390,11 @@ __unwind_function(void *ptr)
asm("# br");
asm("mtctr 3;bctr # b 3");
}
+#else
+__unwind_function(void *ptr)
+{
+ abort ();
+}
#endif /* powerpc */
#endif /* L_eh */