![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
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.
|