fix overflow fixes for p_execute in absmi.c

execute_last was not decreasing depth (thanks to Camacho for finding out).


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@299 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2002-01-16 05:32:17 +00:00
parent 4c63dbee3d
commit 9966ff57c6
2 changed files with 14 additions and 24 deletions

View File

@ -1777,7 +1777,6 @@ absmi(int inp)
NoStackCall:
/* on X86 machines S will not actually be holding the pointer to pred */
SREG = (CELL *) PREG->u.sla.p;
NoStackCallGotS:
#ifdef YAPOR
/* abort_optyap("NoStackCall in function absmi"); */
if (HeapTop > GlobalBase - MinHeapGap)
@ -11168,7 +11167,7 @@ absmi(int inp)
CACHE_Y_AS_ENV(Y);
#ifndef NO_CHECKING
check_stack(NoStackPExec, H);
check_stack(NoStackCall, H);
#endif
BEGD(d0);
d0 = ARG1;
@ -11274,11 +11273,6 @@ absmi(int inp)
ENDD(d0);
ENDCACHE_Y_AS_ENV();
NoStackPExec:
/* on X86 machines S will not actually be holding the pointer to pred */
SREG = (CELL *) pen;
goto NoStackCallGotS;
}
ENDBOp();
@ -11291,7 +11285,7 @@ absmi(int inp)
CACHE_Y_AS_ENV(Y);
#ifndef NO_CHECKING
check_stack(NoStackPWExec, H);
check_stack(NoStackCall, H);
#endif
BEGD(d0);
d0 = ARG1;
@ -11423,12 +11417,6 @@ absmi(int inp)
ENDP(pt1);
ENDD(d0);
ENDCACHE_Y_AS_ENV();
NoStackPWExec:
/* on X86 machines S will not actually be holding the pointer to pred */
SREG = (CELL *) pen;
goto NoStackCallGotS;
}
ENDBOp();
@ -11439,7 +11427,7 @@ absmi(int inp)
CACHE_Y_AS_ENV(Y);
#ifndef NO_CHECKING
check_stack(NoStackPWLExec, H);
check_stack(NoStackCall, H);
#endif
BEGD(d0);
d0 = ARG1;
@ -11522,6 +11510,16 @@ absmi(int inp)
else
d0 = (CELL)B;
PREG = (yamop *) pen->CodeOfPred;
#ifdef DEPTH_LIMIT
if (DEPTH <= MkIntTerm(1)) {/* I assume Module==0 is primitives */
if (pen->ModuleOfPred) {
if (DEPTH == MkIntTerm(0))
FAIL();
else DEPTH = RESET_DEPTH();
}
} else if (pen->ModuleOfPred)
DEPTH -= MkIntConstant(2);
#endif /* DEPTH_LIMIT */
/* do deallocate */
CPREG = (yamop *) E_Y[E_CP];
E_Y = ENV = (CELL *) E_Y[E_E];
@ -11559,11 +11557,6 @@ absmi(int inp)
ENDD(d0);
ENDCACHE_Y_AS_ENV();
NoStackPWLExec:
/* on X86 machines S will not actually be holding the pointer to pred */
SREG = (CELL *) pen;
goto NoStackCallGotS;
}
ENDBOp();

View File

@ -122,10 +122,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
/* if (vsc_count > 500000) exit(0); */
/* if (gc_calls < 1) return;*/
#if defined(__GNUC__)
{
choiceptr myB=B;
YP_fprintf(YP_stderr,"%llu (%p, %p, %p) ", vsc_count, TR, ENV, myB);
}
YP_fprintf(YP_stderr,"%llu (%d) ", vsc_count, IntegerOfTerm(DEPTH));
#endif
/* check_trail_consistency(); */
if (pred == NULL) {