diff --git a/slof/entry.S b/slof/entry.S index d3d29f8..5372de3 100644 --- a/slof/entry.S +++ b/slof/entry.S @@ -215,5 +215,5 @@ C_ENTRY(call_c) mtctr r6 bctr - +.global the_system_stack .lcomm the_system_stack, STACKSIZE, 16 diff --git a/slof/paflof.c b/slof/paflof.c index 624955f..2fc25c8 100644 --- a/slof/paflof.c +++ b/slof/paflof.c @@ -19,6 +19,7 @@ #undef unix #include "paflof.h" +#include #include #include #include @@ -43,6 +44,9 @@ unsigned char hash_table[HASHSIZE*CELLSIZE]; #include ISTR(TARG,c) +static int did_stackwarning; +extern char the_system_stack[]; + // the actual engine long engine(int mode, long param_1, long param_2) { @@ -84,6 +88,11 @@ long engine(int mode, long param_1, long param_2) c_return[1].a = &dummy; } + if ((char *)&ip < the_system_stack && !did_stackwarning) { + puts("ERROR: stack overflow in engine()!"); + did_stackwarning = 1; + } + if (mode & ENGINE_MODE_PARAM_2) { (++dp)->n = param_2; }