IDM TITLE 'DMMIDM (IPCS) VM/370 - RELEASE 6' 00001000 * 00002000 * MODULE NAME: DMMIDM 00003000 * 00004000 * 00005000 * FUNCTION: WHEN CALLED DETERMINES FAILING OR CALLING MODULE 00006000 * NAME AND DISPLACEMENT WIHTIN THE MODULE. 00007000 * 00008000 * ATTRIBUTES: NON-REENTRANT 00009000 * NON-REUSABLE 00010000 * 00011000 * ENTRY POINTS: DMMIDM 00012000 * 00013000 * 00014000 * ENTRY CONDITIONS: AT ENTRY REG.1 POINTS TO A PARAMETER LIST. 00015000 * PLIST DS F FAILING ADDRESS OR BASE 00016000 * ADDRESS OF MODULE 00017000 * DS F REGISTER 14 ADDRESS FOR 00018000 * NON-PROGRAM CHECK CONDITION 00019000 * 00020000 * EXIT CONDITIONS: THE FAILING OR CALLING MODULE AND DISPLAC. 00021000 * HAS BEEN RESOLVED AND MOVED TO THE REPORT. 00022000 * IF POSSIBLE AN ENTRY POINT NAME IS ALSO 00023000 * DETERMINED. 00024000 * 00025000 * CALLS TO OTHER ROUTINES: DMMGRC - TO READ REQ.RECORD INTO 00026000 * THE WORK BUFFER 00027000 * DMMTRN - TO TRANSLATE THE DISPLACEMENT 00028000 * FORM BINARY TO ZONED FORMAT 00029000 * 00030000 * 00031000 * EXTERNAL REFERENCES: DMPINREC - DUMP INFORMATION RECORD 00032000 * WRKBUF - WORK BUFFER 00033000 * SHARECON - SHARED CONSTANT AREA 00034000 * EXTMAP1 - COMPRESSED LOAD MOD MAP 00035000 * 00036000 * 00037000 * TABLES/WORKAREAS: 00038000 * 00039000 * 00040000 * REGISTER USAGE: R13 - SAVE AREA 00041000 * R12 - BASE 00042000 * R10 - DUMP INFORMATION RECORD 00043000 * R9 - WORK BUFFER 00044000 * R7 - SHARED CONSTANT AREA 00045000 * R6 - COMPRESSED LOAD MOD MAP 00046000 * R2 - R5 WORK REGISTERS 00047000 * R1 - PARAMETER REGISTER 00048000 * 00049000 * 00050000 * NOTES: A 200 BYTE PATCH AREA EXISTS AT LABEL 'PATCH' 00051000 * 00052000 * 00053000 * OPERATION: THERE ARE FOUR DIFFERENT CONDITIONS UNDER WHICH 00054000 * DMMIDM CAN BE ENTERED. THEY ARE AS FOLLOWS: 00055000 * 00056000 * 1. FROM THE PRG.CHK RTN. WITH THE 00057000 * FAILING ADDRESS WITHIN THE FIXED 00058000 * NUCLEUS. 00059000 * 2. FROM THE PROGRAM CHECK ROUTINE WITH 00060000 * THE FAILING ADDRESS IN A PAGEABLE 00061000 * MODULE. 00062000 * 3. FROM THE CODED ABEND ROUTINE WITH 00063000 * BASE REGISTER ADDR.(FROM ONE OF THE 00064000 * SAVEAREAS BALR,FREE OR SAVEAREA) 00065000 * WITHIN THE FIXED NUCLEUS. 00066000 * 4. FROM THE CODED ABEND ROUTINE WITH 00067000 * BASE REG ADDR. IN A PAGED MODULE. 00068000 * CONDITION 1 00069000 * USING THE FAILURE ADDRESS SEARCH THE COMPRESSED LOAD MOD 00070000 * MAP FOR A MODULE NAME IN THE FAILURE ADDRESS RANGE. THIS 00071000 * WILL BE THE ENTRY POINT NAME AND IS MOVED TO THE PROBLEM 00072000 * REPORT. THE FIRST SIX CHARACTERS IS THE MODULE NAME AND IS 00073000 * ALSO MOVED TO THE PROBLEM REPORT. THE COMPRESSED LOAD IS 00074000 * NOW SEARCHED BACKWARDS TO FIND THE MODULE STARTING ADDRESS. 00075000 * THE STARTING ADDRESS IS SUBTRACTED FROM THE FAILURE ADDRESS 00076000 * TO DETERMINE THE DISPL. WITHIN THE MODULE OF THE FAILURE 00077000 * AND THE DISPLACEMENT IS MOVED TO THE PROBLEM REPORT. 00078000 * 00079000 * CONDITION 2 00080000 * REGISTER 12 ADDRESS, FROM THE REGISTERS AT ABEND, IS PASSED 00081000 * TO ROUTINE DMMGRC TO READ THE FAILING PAGE INTO THE WORK 00082000 * BUFFER. THE MODULE NAME IS MOVED TO THE PROBLEM REPORT. 00083000 * THE ADDRESS IN REGISTER 12 IS SUBTRACTED FROM THE FAILING 00084000 * ADDRESS TO GET THE DISPLACEMENT WITHIN THE MODULE OF THE 00085000 * FAILURE. THE DISPLACEMENT IS MOVED TO THE PROBLEM REPORT. 00086000 * 00087000 * CONDITION 3 00088000 * ENTERED WITH REGISTER 12 AND 14, OF THE MODULE CALLING THE 00089000 * ABENDING ROUTINE, IN THE PARAMETER LIST. THE MODULE NAME 00090000 * IS DETERMINED USING REGISTER 12 AND A COMPRESSED LOAD 00091000 * MOD MAP SEARCH. THE DISPLACEMENT WITHIN THE CALLER IS 00092000 * FOUND BY SUBTRACTING THE ADDRESS IN REGISTER 12 FROM THE 00093000 * ADDRESS IN REGISTER 14. 00094000 * 00095000 * CONDITION 4 00096000 * REGISTER 12 OF THE CALLING MODULE IS PASSED TO DMMGRC 00097000 * TO READ IN THE PAGE. THE MODULE NAME IS MOVED TO THE 00098000 * PROBLEM REPORT. THE DISPLACEMENT WITHIN THE CALLER IS 00099000 * FOUND BY SUBTRACTING THE ADDRESS IN REGISTER 12 FROM THE 00100000 * ADDRESS IN REGISTER 14. 00101000 * 00102000 * 00103000 * 00104000 * ERROR MESSAGES: 00105000 * 00106000 * 00107000 EJECT 00108000 ENTRY EXTMAP1 @VA04250 00109000 DMMIDM CSECT @VA04250 00110000 USING DMMIDM,R15 TEMPORARY ADDRESSABILITY @VA04250 00111000 B START BRANCH AROUND EYECATCHER @VA04250 00112000 DS 0D @VA04250 00113000 MODNAME DC C'DMMIDM ' MODULE NAME @VA04250 00114000 RELLEV DC C'REL4LEV0' RELEASE AND LEVEL @V4075A1 00115000 START STM R14,R12,12(R13) STORE CALLER'S REGISTERS @VA04250 00116000 DROP R15 @VA04250 00117000 LR R12,R15 LOAD OUR BASE REG @VA04250 00118000 USING DMMIDM,R12 ESTABLISH OUR ADDRESSABILITY @VA04250 00119000 ST R13,SAVEAREA+8 CALLER'S SAVEAREA POINTER @VA04250 00120000 LA R13,SAVEAREA POINT TO OUR SAVEAREA @VA04250 00121000 L R10,VINREC DUMP INFOR. RECORD POINTER @VA04250 00122000 USING DMPINREC,R10 ESTABLISH ADDRESSABILITY @VA04250 00123000 EXTRN WRKBUF @VA04250 00124000 L R9,=A(WRKBUF) POINT TO 4K WORK BUFFER @VA04250 00125000 USING WRKBUF,R9 @VA04250 00126000 L R7,VEXCON POINT TO SHARED CONSTANTS @VA04250 00127000 USING SHARECON,R7 ADDRESS OF SHRD CONSTANT @VA04250 00128000 L R6,=A(EXTMAP1) ADDRESS OF MOD MAP BUFFER @VA04250 00129000 USING EXTMAP1,R6 @VA04250 00130000 TM TYPESW,CPABSW IS THIS A CODED ABEND @VA04250 00131000 BO MODABND YES,GET THE SECOND PARAMETER @VA04250 00132000 L R2,0(R1) ADDR. FAIL OR BASE FROM PARM @VA04250 00133000 ST R2,FAILADD SAVE PROGRAM CHK ADDRESS @VA04250 00134000 B MODREAL BRANCH AROUND NEXT LOAD @VA04250 00135000 MODABND MVC VMMOD(L'VMCALL),VMCALL CHNG MOD.KEY TO CALLER @VA04250 00136000 L R2,REG14(R1) R14 ADDRESS FROM PARM LIST @VA04250 00137000 ST R1,PARMFLD SAVE PARM ADDRESS @VA04250 00138000 LA R2,0(,R2) RESET HIGH ORDER BYTE @VA04250 00139000 MODREAL L R3,REALEND HIGH ADDR OF FIXED NUCLEUS @VA04250 00140000 CR R2,R3 COMP. SRCH ADDR. TO REALEND @VA04250 00141000 BH MODPAGE NOT FIXED PAGE-GO READ PAGE @VA04250 00142000 LA R5,FIRSTADD GET FIRST ADDRESS ENTRY @VA04250 00143000 MODCOMP L R4,0(,R5) LOAD MAP ADDRESS ENTRY @VA04250 00144000 CR R2,R4 COMP MAP ADDR TO FAIL ADD @VA04250 00145000 BE MODFND IF EQUAL MODULE FOUND @VA04250 00146000 BL MODPAST IF R2 LOW - PAST MOD ENTRY @VA04250 00147000 LA R5,NXTENTRY(,R5) BUMP TO NEXT MAP ENTRY @VA04250 00148000 B MODCOMP AND GO CHECK FOR MATCH @VA04250 00149000 MODPAST LA R3,TWENTY SET R3 TO COUNT OF TWENTY @VA04250 00150000 SR R5,R3 BACK UP TO PREVIOUS ENTRY @VA04250 00151000 B MODMOVE GO SET UP TO MOVE MOD NAME @VA04250 00152000 MODFND LA R3,EIGHT SET R3 TO COUNT OF EIGHT @VA04250 00153000 SR R5,R3 USE THIS ENTRY FOR NAME @VA04250 00154000 MODMOVE MVC MODNAM(SIX),0(R5) MOVE MODNAME TO WORKAREA @VA04250 00155000 MVC VMENTRY1,0(R5) THIS IS E.P.-MOVE TO REPORT @VA04250 00156000 LH R4,KEY GET PRESENT KEY LENGTH @VA04250 00157000 LA R3,TWENTY GET ENTRY KEY LENGTH @VA04250 00158000 AR R4,R3 ADD NEW LENGTH @VA04250 00159000 STH R4,KEY STORE NEW LENGTH @VA04250 00160000 MVC VMMOD1,0(R5) MOVE MOD NAME TO REPORT @VA04250 00161000 LH R4,KEY GET CURRENT KEY LENGTH @VA04250 00162000 LA R3,MODKYLEN MODULE KEY LENGTH @VA04250 00163000 AR R4,R3 ADD NEW LENGTH @VA04250 00164000 STH R4,KEY UPDATE KEYLENGTH @VA04250 00165000 LA R3,TWELVE SET R3 TO COUNT OF 12 @VA04250 00166000 MODSTART SR R5,R3 SEE IF PRIOR ENTRY SAME MOD @VA04250 00167000 CLC MODNAM,0(R5) COMPARE ENTRY TO SAVED NAME @VA04250 00168000 BE MODSTART KEEP GOING BACK @VA04250 00169000 L R3,STRTADDR(R5) WE HAVE STARTING ADDRESS @VA04250 00170000 SR R2,R3 SUBT. SRCH ADDR FROM START @VA04250 00171000 LA R2,0(,R2) RESET HIGH BYTE @VA04250 00172000 STH R2,MODTRN SAVE DISPLACEMENT @VA04250 00173000 ST R2,MODDISP SAVE DISP FOR CALLER @VA04250 00174000 LA R2,MODTRN GET DISPLACEMENT ADDRESS @VA04250 00175000 ST R2,TRNPARM1 DATA ADDRESS FOR TRN @VA04250 00176000 LA R3,TWO SET BYTE COUNT FOR TRANSLATE @VA04250 00177000 ST R3,TRNPARM BYTE COUNT FOR TRN @VA04250 00178000 CALL DMMTRN GO TRANSLATE DISPLACEMENT @VA04250 00179000 LR R5,R1 TRANSLATED DATA ADDRESS @VA04250 00180000 MVC VMDISP1,0(R5) MOVE DISPLACEMENT TO REPORT @VA04250 00181000 LH R4,KEY GET CURRENT KEY LENGTH @VA04250 00182000 LA R3,KYDISP DISPLACEMENT KEY LENGTH @VA04250 00183000 AR R4,R3 ADD NEW LENGTH @VA04250 00184000 STH R4,KEY STORE NEW KEY LENGTH @VA04250 00185000 B MODRET RETURN TO CALLER @VA04250 00186000 MODPAGE TM TYPESW,PRGCKSW WAS IT A PROGRAM CHECK @VA04250 00187000 BO MODPRGCK YES, GO PROCESS PROGRAM CHK @VA04250 00188000 LA R1,PARMFLD GET PARM FIELD ADDRESS @VA04250 00189000 L R2,0(,R1) @VA04250 00190000 L R2,0(,R2) GET R12 ADDRESS @VA04250 00191000 ST R2,GRCPARM RECORD ADDRESS FOR GRC @VA04250 00192000 CALL DMMGRC CALL GETREC TO READ IN PAGE @VA04250 00193000 LR R2,R1 RECORD ADDRESS FROM GRC @VA04250 00194000 CLC MODPREFX,0(R2) CHECK FOR MODULE NAME @VA04250 00195000 BE MODGOOD MOVE MOD NAME TO REPORT @VA04250 00196000 B MODRET OTHERWISE RETURN TO CALLER @VA04250 00197000 MODGOOD MVC VMMOD1,0(R2) MOVE MODULE NAME TO REPORT @VA04250 00198000 LA R4,MODKYLEN LENGTH OF MODULE KEY @VA04250 00199000 LH R3,KEY CURRENT KEY LENGTH @VA04250 00200000 AR R4,R3 ADD NEW KEY LENGTH @VA04250 00201000 STH R4,KEY UPDATE KEY LENGTH @VA04250 00202000 LA R1,PARMFLD GET PARM FIELD ADDRESS @VA04250 00203000 L R1,0(,R1) R12 ADDRESS FROM PARM @VA04250 00204000 L R3,PARMR14(R1) GET R14 ADDR. FROM PARM @VA04250 00205000 L R2,0(,R1) R12 ADDRESS FROM PARM @VA04250 00206000 SR R3,R2 SUBT. SEARCH ADDR. FROM R14 @VA04250 00207000 STH R3,MODTRN SET UP TO TRANSLATE DISP @VA04250 00208000 LA R2,MODTRN GET DISP SAVE ADDRESS @VA04250 00209000 ST R2,TRNPARM1 DATA ADDRESS FOR TRN @VA04250 00210000 LA R3,TWO SET BYTE COUNT FOR TRANSLATE @VA04250 00211000 ST R3,TRNPARM BYTE COUNT FOR TRN @VA04250 00212000 CALL DMMTRN CALL TRANSLATE ROUTINE @VA04250 00213000 LR R5,R1 TRANSLATED DATA ADDRESS @VA04250 00214000 MVC VMDISP1,0(R5) MOVE DISPLACEMENT TO REPORT @VA04250 00215000 LH R4,DISPLN LENGTH OF DISPL. KEY @VA04250 00216000 LH R3,KEY CURRENT KEY LENGTH @VA04250 00217000 AR R4,R3 NEW LENGTH @VA04250 00218000 STH R4,KEY UPDATE KEY FIELD @VA04250 00219000 MODRET L R13,SAVEAREA+8 GET SAVE AREA ADDRESS @VA04250 00220000 LM R14,R12,12(R13) RESTORE THE REGISTERS @VA04250 00221000 BR R14 RETURN TO CALLER @VA04250 00222000 MODPRGCK L R2,DMPGPRS+R12DISP GET R12 FROM GENERAL REGS @VA04250 00223000 ST R2,GRCPARM RECORD ADDRESS FOR GRC @VA04250 00224000 CALL DMMGRC CALL RECORD READ ROUTINE @VA04250 00225000 LR R2,R1 RECORD ADDRESS FROM GRC @VA04250 00226000 CLC MODPREFX,0(R2) IS IT 'DMK' @VA04250 00227000 BNE MODRET @VA04250 00228000 MVC VMMOD1,0(R2) MOVE MODULE NAME TO REPORT @VA04250 00229000 LA R4,MODKYLEN LENGTH OF MODULE KEYWORD @VA04250 00230000 LH R3,KEY CURRENT KEY LENGTH @VA04250 00231000 AR R4,R3 NEW LENGTH @VA04250 00232000 STH R4,KEY UPDATE KEY LENGTH @VA04250 00233000 L R4,FAILADD FAILING ADDRESS FROM PC PSW @VA04250 00234000 L R3,DMPGPRS+R12DISP GET REG 12 FROM DMP INFO REC @VA04250 00235000 SR R4,R3 CALCULATE DISPLACEMENT @VA04250 00236000 L R3,MAXDISP SET R3 TO MAX DISPL. @VA04250 00237000 LA R4,0(R4) CLEAR HIGH BYTE @VA04250 00238000 CR R4,R3 IS MAX EXCEEDED? @VA04250 00239000 BL DISPLOW NO,USE IT @VA04250 00240000 LA R5,DSPINVAL GET ? MARKS FOR INVALID DISP @VA04250 00241000 B MOVEDISP AND MOVE INTO REPORT @VA04250 00242000 DISPLOW ST R4,MODDISP SAVE DISPLACEMENT @VA04250 00243000 STH R4,MODTRN @VA04250 00244000 LA R4,MODTRN @VA04250 00245000 ST R4,TRNPARM1 DATA ADDRESS FOR TRN @VA04250 00246000 LA R3,TWO SET BYTE COUNT FOR TRANSLATE @VA04250 00247000 ST R3,TRNPARM BYTE COUNT FOR TRN @VA04250 00248000 CALL DMMTRN @VA04250 00249000 LR R5,R1 TRANSLATED DATA @VA04250 00250000 MOVEDISP MVC VMDISP1,0(R5) MOVE DISPLACEMENT TO REPORT @VA04250 00251000 LH R4,KEY GET CURRENT KEY LENGTH @VA04250 00252000 LA R3,KYDISP DISPLACEMENT KEY LENGTH @VA04250 00253000 AR R4,R3 CALC NEW KEY LENGTH @VA04250 00254000 STH R4,KEY UPDATE KEY LENGTH @VA04250 00255000 B MODRET @VA04250 00256000 ***************************************** 00257000 * CONSTANTS SAVEAREAS AND EQUATES 00258000 MAXDISP DC X'00001001' MAX DISPLACEMENT + 1 @VA04250 00259000 DSPINVAL DC CL4'????' DISPLACEMENT NOT VALID IND. @VA04250 00260000 ***************************************** 00261000 FAILADD DS F PROGRAM CHECK ADDRESS @VA04250 00262000 MODNAM DS CL6 LABEL AT EYECATHCER @VA04250 00263000 PARMFLD DS F SAVE AREA-INPUT PARM FIELD @VA04250 00264000 MODTRN DS F DATA FIELD FOR TRANS. PARM @VA04250 00265000 VMCALL DC C'VMCALLER' KEYWORD FOR CALLING MODULE @VA04250 00266000 SAVEAREA DS 18F OUR SAVEAREA @VA04250 00267000 VEXCON DC V(SHARECON) POINTER TO SHARED CONSTANTS @VA04250 00268000 VINREC DC V(EXTINREC) INPUT RECORD BUFFER @VA04250 00269000 MODPREFX DC C'DMK' MODULE PREFIX @VA04250 00270000 PATCH DC 50F'0' PATCH AREA @VA04250 00271000 TWO EQU 2 TWO FOR LOAD ADDRESS ETC. @VA04250 00272000 FOUR EQU 4 FOUR FOR LOAD ADDRESS ETC. @VA04250 00273000 SIX EQU 6 6 FOR LOAD ADDRESS ETC. @VA04250 00274000 EIGHT EQU 8 8 FOR LOAD ADDRESS ETC. @VA04250 00275000 TWELVE EQU 12 12 FOR LOAD ADDRESS ETC. @VA04250 00276000 KYDISP EQU 15 DISPLACEMENT INTO KEYWORD @VA04250 00277000 MODKYLEN EQU 19 KEYWORD DATA LENGTH @VA04250 00278000 TWENTY EQU 20 20 FOR LOAD ADDRESS ETC. @VA04250 00279000 R12DISP EQU 48 LOCATION OF R12 IN SAVE AREA @VA04250 00280000 PARMR14 EQU 4 PARM FIELD DISPL. FOR R14 @VA04250 00281000 LTORG @VA04250 00282000 EXTMAP1 DS 1024F @VA04250 00283000 EXTMAP2 DS 1024F @VA04250 00284000 EXTMAP3 DS 1024F @VA04250 00285000 EXTMAP4 DS 1024F @VA08089 00285300 EXTMAP5 DS 1024F @VA08089 00285600 REGEQU @VA04250 00286000 COPY EXCONST @VA04250 00287000 COPY DMPBLOKS @VA04250 00288000 REG14 EQU 4 REG 14 ADDRESS LOCATION IN PARM @VA04250 00289000 FIRSTADD EQU EXTMAP1+8 FIRST MAP ADDRESS @VA04250 00290000 NXTENTRY EQU 12 ADDRESS INCREMENT IN LOAD MAP @VA04250 00291000 STRTADDR EQU 20 DECREMENT VALUE FOR LOAD MAP @VA04250 00292000 END 00293000