I have a C++ program that I am testing that is working perfectly in all
regards except one. When I run it with
//CEEOPTS DD *
RPTSTG(ON)
/*
it ABENDs with U4088-63 which is documented as save area chain corruption. I
can run it with TERMTHDACT(DUMP) or with HEAPCHK(ON,10,0,10,10,1024,0)
without error.
I have isolated the ABEND to a call to a self-written assembler function
called ISAUTH. I execute a printf() immediately before the call but not a
printf() after. I am posting below the entire code of ISAUTH. CDSALEN has a
value of x'60C'. I think other than that the code snippet is self-contained.
The assembler module contains many similar small functions. I know at least
5 of them get called without error.
It used to work. What changed? I added some functions and the module grew to
have addressability problems, so I added an IEABRCX DEFINE. I have eyeballed
the code generated by EDCPRLG and it appears correct -- now with a BRC 15
instead of a B. It would be inconvenient to get the IEABRCX back out of
there as a test.
The function is declared in C++ as extern "OS" {bool ISAUTH();}. The other
functions are declared similarly.
AMODE 31/XPLINK(NO)
Does anyone have any clues?
ISAUTH EDCPRLG DSALEN=CDSALEN,BASEREG=NONE
LARL R12,CZAMISC
USING CZAMISC,R12
*
* *** USING CDSASTOR,R13 Use R13 as base for reentrant store
*
* Issue the TESTAUTH
TESTAUTH FCTN=1
*
* TESTAUTH returns 0 = yes, 4 = no
* We return 1 = yes, 0 = no
SRL R15,2 Convert 4 into 1
LCR R15,R15 Convert 1 into -1
AHI R15,1 Convert 1 into 0 and 0 into 1
*
* *** J Ret_R15 Return whatever is in R15
EDCEPIL ,
Charles
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN