diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-10-26 19:24:58 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-10-26 19:24:58 -0400 |
commit | c6e84dc4845c7da5bf2d477a531a23b9dee5b907 (patch) | |
tree | 81de1ef043a16cda0e79ff53416e4ac500c795d7 /gcc | |
parent | b030d598109a6a7060cd00c7422ae4564ede0f0c (diff) | |
download | gcc-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.c | 19 |
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 */ |