RENT will (sometimes) catch violations of refreshability; it does not catch 
violation of reentrancy other than (some) self modifying code. The OP's problem 
is a reentrancy violation[1] that the assembler does not and cannot catch.

[1] Well, technically the two exits are different routines, but it's still a 
failure
    to serialize.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3


________________________________________
From: IBM Mainframe Discussion List <[email protected]> on behalf of 
Jesse 1 Robinson <[email protected]>
Sent: Thursday, September 5, 2019 5:05 PM
To: [email protected]
Subject: Re: MPF Exit calling System REXX - S0C4 abend

System exits in general need to be reentrant. You should add the RENT option on 
the ASM step as well to make sure you don't have any violations, which will 
likely lead to S0C4 in otherwise sound code.

-----Original Message-----
From: IBM Mainframe Discussion List <[email protected]> On Behalf Of 
Sebastian Welton
Sent: Thursday, September 5, 2019 6:21 AM
To: [email protected]
Subject: (External):Re: MPF Exit calling System REXX - S0C4 abend

Definitely, see below (formatting is probably stuffed I'm afraid), compiled 
using the standard ASMAC found in PROCLIB (no overriding ASMAOPT or other 
parameters) and link with RENT, INCLUDE(ASMAOBJ) and SETCODE AC(0). I have now 
found out where the original came from and am doing further research on it as 
well, thanks.

Sebastian.

GENMSGTR TITLE 'GENMSGTR'
GENMSGTR CSECT
GENMSGTR RMODE 31
GENMSGTR AMODE ANY
R0       EQU   0                       REGISTER 0
R1       EQU   1                       REGISTER 1
R2       EQU   2                       REGISTER 2
R3       EQU   3                       REGISTER 3
R4       EQU   4                       REGISTER 4
R5       EQU   5                       REGISTER 5
R6       EQU   6                       REGISTER 6
R7       EQU   7                       REGISTER 7
R8       EQU   8                       REGISTER 8
R9       EQU   9                       REGISTER 9
R10      EQU   10                      REGISTER 10
R11      EQU   11                      REGISTER 11
R12      EQU   12                      REGISTER 12
R13      EQU   13                      REGISTER 13
R14      EQU   14                      REGISTER 14
R15      EQU   15                      REGISTER 15
         STM   R14,R12,12(R13)         SAVE CALLERS REGS
         USING GENMSGTR,R12            ADDRESSABILITY
         LR    R12,R15                 SET BASE ADDRESS
         LR    R2,R1                   SAVE PARAMETER REGISTER
         L     R1,=A(@DSECTE-@DSECT)   CALCULATE STORAGE LENGTH
         STORAGE OBTAIN,LENGTH=(R1)    GET SOME VS
         ST    R1,8(,R13)              FORWARD POINTER
         ST    R13,4(,R1)              BACKWARD POINTER
         LR    R13,R1                  POINT TO SAVE AREA
         LR    R1,R2                   RESTORE PARAMETER REGISTER
         B     EYEBALLE                SKIP CONSTANTS
EYEBALL  DS    0H
         DC    C'=====> GENMSGTR D=&SYSDATE T=&SYSTIME ROB ===='
EYEBALLE DS    0H
         USING @DSECT,R13              ADDRESSABILITY
         SR    R11,R11                 CLEAR RETURN CODE
*
         L     R9,0(,R1)               POINT TO CTXT
         USING CTXT,R9                 ADDRESSABILITY
         L     R8,CTXTTXPN             WAS THERE A MESSAGE?
         LTR   R8,R8                   SINGLE OR FIRST LINE WTO?
         BNZ   RETURN                  NO - EXIT
         L     R8,CTXTTXPJ             POINT TO MAJOR
         USING CTXTATTR,R8             ADDRESSABILITY
         LA    R7,@ARGLST              POINT TO AXREXX ARG LIST
         USING AXRARGLST,R7            ADDRESSABILITY
         MVI   @ARGLST,X'00'
         MVC   @ARGLST+1(AXRARGLST_LEN),@ARGLST
         MVC   AXRARGLSTID,=A(AXRARGLSTACRO) MOVE IN EYECATCHER
         LA    R1,AXRARGLSTCURVER      VERSION 0
         ST    R1,AXRARGLSTVER         SAVE VERSION
         LA    R1,1                    SINGLE ARGUMENT
         STH   R1,AXRARGLSTNUMBER      SAVE NUMBER OF ARGUMENTS
         SLR   R1,R1                   CLEAR ERROR FLAG
         STH   R1,AXRARGLSTENTRYINERROR SAVE ERROR FLAG
         ST    R1,AXRARGLSTRSV2        SAVE RESERVED VALUE
         LA    R6,@ARG1                POINT TO ARGUMENT 1
         USING AXRARGENTRY,R6          ADDRESSABILITY
         MVI   @ARG1,X'00'
         MVC   @ARG1+1(AXRARGENTRY_LEN),@ARG1
         SLR   R1,R1                   CLEAR ADDRESS HIGH
         ST    R1,AXRARGADDRHIGH       SAVE ADDRESS HIGH
         LA    R1,CTXTTMSG             POINT TO WTO
         ST    R1,AXRARGADDRLOW        SAVE ADDRESS
         LA    R1,L'CTXTTMSG           POINT TO LENGTH OF WTO
         ST    R1,AXRARGLENGTH         SAVE LENGTH
         MVI   AXRARGTYPE,AXRARGTYPECHAR SET ARGUMENT TYPE TO CHAR
         OI    AXRARGINPUTFLGS1,AXRARGINPUT FLAG INPUT ARGUMENT
         AXREXX REQUEST=EXECUTE,                                       X
               SECURITY=BYAXRUSER,                                     X
               TSO=YES,                                                X
               SYNC=NO,                                                X
               NAME=VNAME,                                             X
               REXXARGS=@ARGLST,                                       X
               MF=(E,AXREXXL)          INITIATE SYSTEM REXX PGM
         LTR   R15,R15                 HOW DID WE DO?
         BZ    RETURN                  GREAT!
         ABEND 1,REASON=(R0)           ABEND REASON IS REXX REASON
         LA    R11,8                   SET BAD RETURN CODE
*
RETURN   DS    0H
         LR    R1,R13                  POINT TO AREA TO BE FREED
         L     R13,4(,R13)             RSTR CALLING PROGS SAVE AREA
         L     R0,=A(@DSECTE-@DSECT)   GET STORAGE LENGTH
         STORAGE RELEASE,LENGTH=(R0),ADDR=(R1) FREE UP THE VS
         LR    R15,R11                 MOVE RETURN CODE TO R15
         L     R14,12(,R13)            RESTORE CALLERS R14
         LM    R0,R12,20(R13)          RESTORE CALLERS R0-R12
         BR    R14                     RETURN TO CALLER
*              STORAGE DEFINITIONS                                    *
         DS    0D
VNAME    DC    CL8'GENMSGRX    NAME OF SYSTEM REXX PROGRAM
*
         LTORG ,
*              DUMMY SECTIONS                                         *
@DSECT   DSECT
@DSECTSA DS    18F
*------*
@ARGLST  DS    CL(AXRARGLST_LEN)      ARGLIST LENGTH
@ARG1    DS    CL(AXRARGENTRY_LEN)    ARGENTRY LENGTH
RC       DS    1F
*------*
@DSECTE  EQU   *
*
         AXREXX  MF=(L,AXREXXL)
*
         AXRZARG DSECT=YES,AXRARGLST=YES,AXRARGENTRY=YES,AXRDIAG=YES
*
         IEZVX100
*
         END


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to