From 6c98e37e1805b8cc072ec5d32788f4b0dcc72ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 5 Feb 2012 10:51:40 +0000 Subject: [PATCH] make sure to save absmi registers before longjmp. --- C/errors.c | 3 +++ C/exec.c | 3 +++ C/qlyr.c | 3 +++ C/sysbits.c | 3 +++ 4 files changed, 12 insertions(+) diff --git a/C/errors.c b/C/errors.c index e577e3b71..04b130481 100644 --- a/C/errors.c +++ b/C/errors.c @@ -1822,6 +1822,9 @@ E); if (LOCAL_PrologMode & UserCCallMode) { if (!(EX = Yap_StoreTermInDB(Yap_MkApplTerm(fun, 2, nt), 0))) { /* fat chance */ +#if PUSH_REGS + restore_absmi_regs(&Yap_standard_regs); +#endif siglongjmp(LOCAL_RestartEnv,1); } } else { diff --git a/C/exec.c b/C/exec.c index e554545bd..168d6c43c 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1473,6 +1473,9 @@ JumpToEnv(Term t USES_REGS) { /* just keep the throwed object away, we don't need to care about it */ if (!(LOCAL_BallTerm = Yap_StoreTermInDB(t, 0))) { /* fat chance */ +#if PUSH_REGS + restore_absmi_regs(&Yap_standard_regs); +#endif siglongjmp(LOCAL_RestartEnv,1); } /* careful, previous step may have caused a stack shift, diff --git a/C/qlyr.c b/C/qlyr.c index 2ef03469d..9d99ef8d5 100644 --- a/C/qlyr.c +++ b/C/qlyr.c @@ -999,6 +999,9 @@ p_read_program( USES_REGS1 ) /* back to the top level we go */ Yap_CloseSlots(PASS_REGS1); +#if PUSH_REGS + restore_absmi_regs(&Yap_standard_regs); +#endif siglongjmp(LOCAL_RestartEnv, 3); return TRUE; } diff --git a/C/sysbits.c b/C/sysbits.c index e455591be..c11f7c04b 100644 --- a/C/sysbits.c +++ b/C/sysbits.c @@ -1564,6 +1564,9 @@ InteractSIGINT(int ch) { /* in case someone mangles the P register */ } LOCAL_PrologMode &= ~AsyncIntMode; +#if PUSH_REGS + restore_absmi_regs(&Yap_standard_regs); +#endif siglongjmp(LOCAL_RestartEnv,1); return -1; case 'b':