make sure to save absmi registers before longjmp.
This commit is contained in:
parent
e6fb330f58
commit
6c98e37e18
@ -1822,6 +1822,9 @@ E);
|
|||||||
if (LOCAL_PrologMode & UserCCallMode) {
|
if (LOCAL_PrologMode & UserCCallMode) {
|
||||||
if (!(EX = Yap_StoreTermInDB(Yap_MkApplTerm(fun, 2, nt), 0))) {
|
if (!(EX = Yap_StoreTermInDB(Yap_MkApplTerm(fun, 2, nt), 0))) {
|
||||||
/* fat chance */
|
/* fat chance */
|
||||||
|
#if PUSH_REGS
|
||||||
|
restore_absmi_regs(&Yap_standard_regs);
|
||||||
|
#endif
|
||||||
siglongjmp(LOCAL_RestartEnv,1);
|
siglongjmp(LOCAL_RestartEnv,1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
3
C/exec.c
3
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 */
|
/* just keep the throwed object away, we don't need to care about it */
|
||||||
if (!(LOCAL_BallTerm = Yap_StoreTermInDB(t, 0))) {
|
if (!(LOCAL_BallTerm = Yap_StoreTermInDB(t, 0))) {
|
||||||
/* fat chance */
|
/* fat chance */
|
||||||
|
#if PUSH_REGS
|
||||||
|
restore_absmi_regs(&Yap_standard_regs);
|
||||||
|
#endif
|
||||||
siglongjmp(LOCAL_RestartEnv,1);
|
siglongjmp(LOCAL_RestartEnv,1);
|
||||||
}
|
}
|
||||||
/* careful, previous step may have caused a stack shift,
|
/* careful, previous step may have caused a stack shift,
|
||||||
|
3
C/qlyr.c
3
C/qlyr.c
@ -999,6 +999,9 @@ p_read_program( USES_REGS1 )
|
|||||||
/* back to the top level we go */
|
/* back to the top level we go */
|
||||||
Yap_CloseSlots(PASS_REGS1);
|
Yap_CloseSlots(PASS_REGS1);
|
||||||
|
|
||||||
|
#if PUSH_REGS
|
||||||
|
restore_absmi_regs(&Yap_standard_regs);
|
||||||
|
#endif
|
||||||
siglongjmp(LOCAL_RestartEnv, 3);
|
siglongjmp(LOCAL_RestartEnv, 3);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1564,6 +1564,9 @@ InteractSIGINT(int ch) {
|
|||||||
/* in case someone mangles the P register */
|
/* in case someone mangles the P register */
|
||||||
}
|
}
|
||||||
LOCAL_PrologMode &= ~AsyncIntMode;
|
LOCAL_PrologMode &= ~AsyncIntMode;
|
||||||
|
#if PUSH_REGS
|
||||||
|
restore_absmi_regs(&Yap_standard_regs);
|
||||||
|
#endif
|
||||||
siglongjmp(LOCAL_RestartEnv,1);
|
siglongjmp(LOCAL_RestartEnv,1);
|
||||||
return -1;
|
return -1;
|
||||||
case 'b':
|
case 'b':
|
||||||
|
Reference in New Issue
Block a user