mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-06 06:48:48 +00:00
Added checks that stack-frame didn't move
This commit is contained in:
parent
ce0b369958
commit
ffa0b69841
1 changed files with 57 additions and 6 deletions
|
|
@ -808,11 +808,16 @@ extern void *Bstring (void *p) {
|
||||||
void *s = NULL;
|
void *s = NULL;
|
||||||
|
|
||||||
__pre_gc();
|
__pre_gc();
|
||||||
|
void *before_frame = __builtin_frame_address(0);
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
indent++;
|
indent++;
|
||||||
print_indent();
|
print_indent();
|
||||||
printf("Bstring: call LmakeString %s %p %p %p %i\n", p, &p, p, s, n);
|
printf("Bstring: call LmakeString %s %p %p %p %i\n", p, &p, p, s, n);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
push_extra_root(&p);
|
push_extra_root(&p);
|
||||||
s = LmakeString(BOX(n));
|
s = LmakeString(BOX(n));
|
||||||
|
|
@ -829,8 +834,15 @@ extern void *Bstring (void *p) {
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
indent--;
|
indent--;
|
||||||
#endif
|
#endif
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
__post_gc();
|
__post_gc();
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -875,6 +887,7 @@ extern void *Lstring (void *p) {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void *Bclosure (int bn, void *entry, ...) {
|
extern void *Bclosure (int bn, void *entry, ...) {
|
||||||
|
void *before_frame = __builtin_frame_address(0);
|
||||||
va_list args;
|
va_list args;
|
||||||
int i, ai;
|
int i, ai;
|
||||||
register int *ebp asm("ebp");
|
register int *ebp asm("ebp");
|
||||||
|
|
@ -882,7 +895,15 @@ extern void *Bclosure (int bn, void *entry, ...) {
|
||||||
data *r;
|
data *r;
|
||||||
int n = UNBOX(bn);
|
int n = UNBOX(bn);
|
||||||
|
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
__pre_gc();
|
__pre_gc();
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
indent++;
|
indent++;
|
||||||
print_indent();
|
print_indent();
|
||||||
|
|
@ -917,18 +938,31 @@ extern void *Bclosure (int bn, void *entry, ...) {
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
indent--;
|
indent--;
|
||||||
#endif
|
#endif
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
return r->contents;
|
return r->contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void *Barray (int bn, ...) {
|
extern void *Barray (int bn, ...) {
|
||||||
|
void *before_frame = __builtin_frame_address(0);
|
||||||
va_list args;
|
va_list args;
|
||||||
int i, ai;
|
int i, ai;
|
||||||
data *r;
|
data *r;
|
||||||
int n = UNBOX(bn);
|
int n = UNBOX(bn);
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
__pre_gc();
|
__pre_gc();
|
||||||
|
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
indent++;
|
indent++;
|
||||||
print_indent();
|
print_indent();
|
||||||
|
|
@ -951,6 +985,10 @@ extern void *Barray (int bn, ...) {
|
||||||
indent--;
|
indent--;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
return r->contents;
|
return r->contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -959,6 +997,7 @@ extern memory_chunk heap;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void *Bsexp (int bn, ...) {
|
extern void *Bsexp (int bn, ...) {
|
||||||
|
void *before_frame = __builtin_frame_address(0);
|
||||||
va_list args;
|
va_list args;
|
||||||
int i;
|
int i;
|
||||||
int ai;
|
int ai;
|
||||||
|
|
@ -967,7 +1006,15 @@ extern void *Bsexp (int bn, ...) {
|
||||||
data *d;
|
data *d;
|
||||||
int n = UNBOX(bn);
|
int n = UNBOX(bn);
|
||||||
|
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
__pre_gc();
|
__pre_gc();
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "WARNING!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
indent++;
|
indent++;
|
||||||
|
|
@ -1007,6 +1054,10 @@ extern void *Bsexp (int bn, ...) {
|
||||||
|
|
||||||
__post_gc();
|
__post_gc();
|
||||||
|
|
||||||
|
if (before_frame != __builtin_frame_address(0)) {
|
||||||
|
fprintf(stderr, "ERROR!!!!!!! stack pointer moved\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
return d->contents;
|
return d->contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1347,13 +1398,13 @@ extern int Lread () {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int Lbinoperror (void) {
|
extern int Lbinoperror (void) {
|
||||||
fprintf(stderr, "ERROR: POINTER ARITHMETICS is forbidden; EXIT\n");
|
/* fprintf(stderr, "ERROR: POINTER ARITHMETICS is forbidden; EXIT\n");
|
||||||
exit(1);
|
exit(1);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int Lbinoperror2 (void) {
|
extern int Lbinoperror2 (void) {
|
||||||
fprintf(stderr, "ERROR: Comparing BOXED and UNBOXED value ; EXIT\n");
|
/* fprintf(stderr, "ERROR: Comparing BOXED and UNBOXED value ; EXIT\n");
|
||||||
exit(1);
|
exit(1);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lwrite is an implementation of the "write" construct */
|
/* Lwrite is an implementation of the "write" construct */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue