aboutsummaryrefslogtreecommitdiff
path: root/gcc/libgcc2.c
diff options
context:
space:
mode:
authorMichael Meissner <meissner@gcc.gnu.org>1995-03-01 20:30:14 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1995-03-01 20:30:14 +0000
commitbf18d0315ade835286d0c788d669c49d434fb1f5 (patch)
tree7aa1dd831c440632d40a33266751c438c949ec0e /gcc/libgcc2.c
parentb099377f9e59ecee866f43f2be943b8751769039 (diff)
downloadgcc-bf18d0315ade835286d0c788d669c49d434fb1f5.zip
gcc-bf18d0315ade835286d0c788d669c49d434fb1f5.tar.gz
gcc-bf18d0315ade835286d0c788d669c49d434fb1f5.tar.bz2
Clone unwind_function for powerpc
From-SVN: r9103
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r--gcc/libgcc2.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index b8891da..39598ef 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -2298,7 +2298,25 @@ __unwind_function(void *ptr)
asm("# br");
asm("mtctr 3;bctr # b 3");
}
-#endif
+#endif /* rs6000 */
+
+#if #machine(powerpc)
+__unwind_function(void *ptr)
+{
+ asm("mr 31,1");
+ asm("lwz 1,0(1)");
+ asm("lwz 31,-4(1)");
+ asm("# br");
+
+ asm("mr 31,1");
+ asm("lwz 1,0(1)");
+ /* use 31 as a scratch register to restore the link register. */
+ asm("lwz 31, 8(1);mtlr 31 # l lr,8(1)");
+ asm("lwz 31,-4(1)");
+ asm("# br");
+ asm("mtctr 3;bctr # b 3");
+}
+#endif /* powerpc */
#endif /* L_eh */
#ifdef L_pure