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

Reply via email to