Specify REFR on the link-edit step: ' //LNKEDT EXEC PGM=IEWL, ' ' // PARM='NOLIST,XREF,LET,NCAL,RENT,REFR,REUS', ' CP
On 05/09/2019 22:48, Charles Mills wrote: > 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:[email protected]] On > Behalf Of Jesse 1 Robinson > Sent: Thursday, September 5, 2019 2:06 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 > . > ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
