Mail Archives: djgpp-workers/2001/01/08/02:19:07
On Sun, 7 Jan 2001, Alain Magloire wrote:
> > > By this do you mean, on many other OS implementations, the signal handler
> > > is run on a separate stack. There are good reasons for doing it this way.
> >
> > Of course, there are good reasons to do that. Except that in DJGPP,
> > these reasons don't exist.
>
> Well one of the obvious reason, is if you reach your stack limit and
> been hit by a SIGVEC or something, running the handler on an alternate
> stack will allow you to recuperate.
DJGPP does that, too. (I didn't describe all the intricacies of the GPF
exception handler.) The exception handler always starts on an alternate
locked stack, but once it determines that the GPF was caused by the
interrupt handler's resetting the data segment limit, it switches to the
normal stack.
So, to clarify: signal handlers for _real_ problems, such as SIGSEGV or
SIGILL, run in semi-special context, and cannot return to the original
code. But signal handlers for SIGINT, the timer, and other events which
are translated into fake GPFs, run in normal application context.
- Raw text -