Branch: Tag:

2000-11-20

2000-11-20 01:20:26 by Martin Stjernholm <mast@lysator.liu.se>

Reserve some stack room to give handle_error a fighting chance to report
out-of-stack errors without getting them itself.

Rev: src/backend.c:1.60
Rev: src/interpret.c:1.173
Rev: src/interpret.h:1.68
Rev: src/las.c:1.222
Rev: src/main.c:1.107
Rev: src/program.c:1.282
Rev: src/threads.c:1.145

5:   \*/      /* -  * $Id: interpret.h,v 1.67 2000/09/12 17:06:08 grubba Exp $ +  * $Id: interpret.h,v 1.68 2000/11/20 01:20:24 mast Exp $    */   #ifndef INTERPRET_H   #define INTERPRET_H
30:    char *stack_top;    DO_IF_SECURITY(struct object *current_creds;)    +  int svalue_stack_margin; +  int c_stack_margin; +    #ifdef PROFILING   #ifdef HAVE_GETHRTIME    long long accounted_time;
80:   #endif      #define check_stack(X) do { \ -  if(Pike_sp - Pike_interpreter.evaluator_stack + (X) >= Pike_stack_size) \ +  if(Pike_sp - Pike_interpreter.evaluator_stack + \ +  Pike_interpreter.svalue_stack_margin + (X) >= Pike_stack_size) \    error("Svalue stack overflow. " \    "(%ld of %ld entries on stack, needed %ld more entries)\n", \    PTRDIFF_T_TO_LONG(Pike_sp - Pike_interpreter.evaluator_stack), \
93:    error("Mark stack overflow.\n"); \    }while(0)    - #define check_c_stack(X) do { \ -  ptrdiff_t x_= ((char *)&x_) + STACK_DIRECTION * (X) - Pike_interpreter.stack_top ; \ + #define check_c_stack(X) do { \ +  ptrdiff_t x_= ((char *)&x_) + \ +  STACK_DIRECTION * (Pike_interpreter.c_stack_margin + (X)) - \ +  Pike_interpreter.stack_top ; \    x_*=STACK_DIRECTION; \    if(x_>0) \    low_error("C stack overflow.\n"); \
246:    int arg2);   PMOD_EXPORT void mega_apply(enum apply_type type, INT32 args, void *arg1, void *arg2);   PMOD_EXPORT void f_call_function(INT32 args); + PMOD_EXPORT void call_handle_error(void);   PMOD_EXPORT int apply_low_safe_and_stupid(struct object *o, INT32 offset);   PMOD_EXPORT void safe_apply_low(struct object *o,int fun,int args);   PMOD_EXPORT void safe_apply(struct object *o, char *fun ,INT32 args);