I am trying to get an ESTAEX recovery routine to call an LE C routine. Why?
I want to do some diagnosis and cleanup following an ABEND. Why not use LE
conditions and/or C signals? I do, but LE's ESTAE(X) is (apparently) TERM=NO
and does not catch certain ABENDs such as operator cancel. Why cancel rather
than stop? Yes, I support stop, but on a "polling" basis, so should the
(rather complex) code get in some application loop it never checks for stop.
Customers do what they do, and sometimes what they do is cancel a program.
Okay, on to the problem at hand. I have the ESTAEX recovery routine calling
an assembler routine. The idea is that the assembler routine will become LE
conformant and then call the C code. The assembler entry point begins with
ESTAE2LE CEEENTRY PPA=CEEPPA, +
AUTO=0, +
NAB=NO, +
MAIN=NO, +
BASE=R11
It is ABENDing with a 4088/63. The doc says
Stack segment owning the next-available-byte (NAB) could not be found or a
DSA
backchain pointer did not contain a valid 31-bit addressable address. A
storage overlay problem has probably occurred. DSA backchain pointers must
contain valid addresses that can be accessed as is while in 31-bit
addressing mode. For instance, a 24-bit address that was obtained by using
the BAL or BALR assembler instruction will contain the ILC, CC, and Program
Mask in the uppermost byte of this address, thus making it an invalid
address in 31-bit mode.
I doubt that a storage overlay has occurred (but anything is possible, of
course). There should be no 24/31-bit issues -- all code is and has always
been 31-bit. I tried clearing the ESTAEX-provided save area backchain to
zeros but it made no difference. I suspect the problem is that ESTAEX just
does not provide any backchain but LE needs one if MAIN=NO.
Anyone have any thoughts or clever suggestions?
Thanks,
Charles
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN