Ilya Zakharevich on Thu, 30 Jul 1998 16:27:14 -0400 (EDT)

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: SEGV on bad recursion

Gerhard Niklasch writes:
> (4) On SunOS/Solaris where Igor originally observed this behavior,
> the C stack sits in a fixed-size (8MBy) memory segment, and fills up
> this segment before the parameter blocks exhaust the default PARI stack,
> and before the other allocations exhaust the available virtual memory.

on your shell command-line.

> (6) However, the signal handler is now faced with an already overflowing
> C stack, and cannot allocate its own stack frame, so the whole affair
> dumps core.  (Actually, the kernel probably notices this before returning
> control to the gp process at user level, and initiates the core dump at
> once.)
> The behavior varies a bit depending on the operating system.  Under Linux,
> there's no hard limit at 8MBy, 

Neither is on Solaris.

> There doesn't appear to be a reliable and portable way to catch the
> problem just before we are beyond recovery.

On OS/2 you do it like this: you put a "guard" page at the end of the
stack (it may be easily found), when this page is touched, you get a
different kind of "signal" (exception, in IBM-speak), which is
catchable (since exceptions are processed on a separate stack?).

Generally speaking, there should be a way to request a separate stack
for a given C function.