From aba4491c44353c4dae5d3f33d7284c3ec063842a Mon Sep 17 00:00:00 2001
From: Marcus Comstedt <marcus@mc.pp.se>
Date: Thu, 20 Sep 2001 00:30:40 +0200
Subject: [PATCH] F_ESCAPE_CATCH bugfix (see [Bug 2293])

Rev: src/code/ppc32.c:1.12
---
 src/code/ppc32.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/code/ppc32.c b/src/code/ppc32.c
index 86949e1746..d9482d95b4 100644
--- a/src/code/ppc32.c
+++ b/src/code/ppc32.c
@@ -1,5 +1,5 @@
 /*
- * $Id: ppc32.c,v 1.11 2001/08/16 21:35:41 marcus Exp $
+ * $Id: ppc32.c,v 1.12 2001/09/19 22:30:40 marcus Exp $
  *
  * Machine code generator for 32 bit PowerPC
  *
@@ -338,6 +338,15 @@ void ppc32_mark(void)
   INCR_MARK_SP_REG(sizeof(struct svalue *));
 }
 
+static void ppc32_escape_catch(void)
+{
+  extern void *do_escape_catch_label;
+  void *pc;
+  __asm__("\tmflr %0" : "=r" (pc));
+  Pike_fp->pc = pc;
+  goto *do_escape_catch_label;
+}
+
 void ins_f_byte(unsigned int b)
 {
   void *addr;
@@ -400,6 +409,10 @@ void ins_f_byte(unsigned int b)
     SET_REG(PPC_REG_ARG1, 2);
     addr = (void *)f_add;
     break;
+
+  case F_ESCAPE_CATCH - F_OFFSET:
+    addr = (void *)ppc32_escape_catch;
+    break;
   }
 #endif
   
-- 
GitLab