 |
The Question is:
using: Compaq C++ V6.2-048 for OpenVMS Alpha V7.3
I'm trying to get back control after a stack overflow using sigstack() and
sigaction().
The call to sigstack() return 0, errno is 0.
But the call seems to have no effect.
An automatic variable of the signal handler
has a similar address as a normal auto variable.
It is *not* located within the area passed to
sigstack().
The same program runs fine at solaris OS.
Doc for sigstack() mention: "VAX only".
But what is the alternative for alpha systems?
sigaltstack() is unavailable too.
The Answer is :
Per the C documentation, sigstack is not implemented on OpenVMS Alpha.
Please contact the support center, as details of the stack overflow
problem and the particular error sequence(s) and the C code involved
will all be of central interest here.
Details of signal handling and related programming are included in the
C programming documentation and in the OpenVMS Programming Concepts
manual. OpenVMS does provide full signal handling capabilities, and
the C signal-related routines are typically built on the underlying
OpenVMS signal handling implementation.
For generic signal handling, you will want to have variables allocated
in static storage, in an external, or otherwise declared in a call
frame that is always present during the particular signaling. (Exit
handlers have the additional requirement that there are effectively
no call frames active when the exit handler is running, so the data
must be stored in an external or a static or similar construct.)
For information on programming and re-entrancy -- various of the data
issues raised here are the same as those of re-entrancy -- please see
topic (1661) and other topics referenced there.
 |
|
|
 |
|