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