And of course, specifying RENT does not make the code reentrant. It's a help. 
It flags some violations, and that's a help, but it misses a lot, and does not 
"do" anything to your code, unlike the RENT option in higher-level languages. 
IBM macros are fond of the form

BAL 1,*+8
DC  A(0)
ST  n,0(0,1)

And while that is a violation and will lead to a S0C4 (generally) during 
execution, the assembler RENT option will not flag it. (It also drives the 
i-cache logic crazy and is a performance killer, but that is different topic.)

Charles


-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Jesse 1 Robinson
Sent: Thursday, September 5, 2019 2:06 PM
To: IBM-MAIN@LISTSERV.UA.EDU
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 <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of 
Sebastian Welton
Sent: Thursday, September 5, 2019 6:21 AM
To: IBM-MAIN@LISTSERV.UA.EDU
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 lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to