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