Table of Contents

DMMIDM Source

References

Source Listing

DMMIDM.ASSEMBLE.txt
  1. IDM TITLE 'DMMIDM (IPCS) VM/370 - RELEASE 6' 00001000
  2. * 00002000
  3. * MODULE NAME: DMMIDM 00003000
  4. * 00004000
  5. * 00005000
  6. * FUNCTION: WHEN CALLED DETERMINES FAILING OR CALLING MODULE 00006000
  7. * NAME AND DISPLACEMENT WIHTIN THE MODULE. 00007000
  8. * 00008000
  9. * ATTRIBUTES: NON-REENTRANT 00009000
  10. * NON-REUSABLE 00010000
  11. * 00011000
  12. * ENTRY POINTS: DMMIDM 00012000
  13. * 00013000
  14. * 00014000
  15. * ENTRY CONDITIONS: AT ENTRY REG.1 POINTS TO A PARAMETER LIST. 00015000
  16. * PLIST DS F FAILING ADDRESS OR BASE 00016000
  17. * ADDRESS OF MODULE 00017000
  18. * DS F REGISTER 14 ADDRESS FOR 00018000
  19. * NON-PROGRAM CHECK CONDITION 00019000
  20. * 00020000
  21. * EXIT CONDITIONS: THE FAILING OR CALLING MODULE AND DISPLAC. 00021000
  22. * HAS BEEN RESOLVED AND MOVED TO THE REPORT. 00022000
  23. * IF POSSIBLE AN ENTRY POINT NAME IS ALSO 00023000
  24. * DETERMINED. 00024000
  25. * 00025000
  26. * CALLS TO OTHER ROUTINES: DMMGRC - TO READ REQ.RECORD INTO 00026000
  27. * THE WORK BUFFER 00027000
  28. * DMMTRN - TO TRANSLATE THE DISPLACEMENT 00028000
  29. * FORM BINARY TO ZONED FORMAT 00029000
  30. * 00030000
  31. * 00031000
  32. * EXTERNAL REFERENCES: DMPINREC - DUMP INFORMATION RECORD 00032000
  33. * WRKBUF - WORK BUFFER 00033000
  34. * SHARECON - SHARED CONSTANT AREA 00034000
  35. * EXTMAP1 - COMPRESSED LOAD MOD MAP 00035000
  36. * 00036000
  37. * 00037000
  38. * TABLES/WORKAREAS: 00038000
  39. * 00039000
  40. * 00040000
  41. * REGISTER USAGE: R13 - SAVE AREA 00041000
  42. * R12 - BASE 00042000
  43. * R10 - DUMP INFORMATION RECORD 00043000
  44. * R9 - WORK BUFFER 00044000
  45. * R7 - SHARED CONSTANT AREA 00045000
  46. * R6 - COMPRESSED LOAD MOD MAP 00046000
  47. * R2 - R5 WORK REGISTERS 00047000
  48. * R1 - PARAMETER REGISTER 00048000
  49. * 00049000
  50. * 00050000
  51. * NOTES: A 200 BYTE PATCH AREA EXISTS AT LABEL 'PATCH' 00051000
  52. * 00052000
  53. * 00053000
  54. * OPERATION: THERE ARE FOUR DIFFERENT CONDITIONS UNDER WHICH 00054000
  55. * DMMIDM CAN BE ENTERED. THEY ARE AS FOLLOWS: 00055000
  56. * 00056000
  57. * 1. FROM THE PRG.CHK RTN. WITH THE 00057000
  58. * FAILING ADDRESS WITHIN THE FIXED 00058000
  59. * NUCLEUS. 00059000
  60. * 2. FROM THE PROGRAM CHECK ROUTINE WITH 00060000
  61. * THE FAILING ADDRESS IN A PAGEABLE 00061000
  62. * MODULE. 00062000
  63. * 3. FROM THE CODED ABEND ROUTINE WITH 00063000
  64. * BASE REGISTER ADDR.(FROM ONE OF THE 00064000
  65. * SAVEAREAS BALR,FREE OR SAVEAREA) 00065000
  66. * WITHIN THE FIXED NUCLEUS. 00066000
  67. * 4. FROM THE CODED ABEND ROUTINE WITH 00067000
  68. * BASE REG ADDR. IN A PAGED MODULE. 00068000
  69. * CONDITION 1 00069000
  70. * USING THE FAILURE ADDRESS SEARCH THE COMPRESSED LOAD MOD 00070000
  71. * MAP FOR A MODULE NAME IN THE FAILURE ADDRESS RANGE. THIS 00071000
  72. * WILL BE THE ENTRY POINT NAME AND IS MOVED TO THE PROBLEM 00072000
  73. * REPORT. THE FIRST SIX CHARACTERS IS THE MODULE NAME AND IS 00073000
  74. * ALSO MOVED TO THE PROBLEM REPORT. THE COMPRESSED LOAD IS 00074000
  75. * NOW SEARCHED BACKWARDS TO FIND THE MODULE STARTING ADDRESS. 00075000
  76. * THE STARTING ADDRESS IS SUBTRACTED FROM THE FAILURE ADDRESS 00076000
  77. * TO DETERMINE THE DISPL. WITHIN THE MODULE OF THE FAILURE 00077000
  78. * AND THE DISPLACEMENT IS MOVED TO THE PROBLEM REPORT. 00078000
  79. * 00079000
  80. * CONDITION 2 00080000
  81. * REGISTER 12 ADDRESS, FROM THE REGISTERS AT ABEND, IS PASSED 00081000
  82. * TO ROUTINE DMMGRC TO READ THE FAILING PAGE INTO THE WORK 00082000
  83. * BUFFER. THE MODULE NAME IS MOVED TO THE PROBLEM REPORT. 00083000
  84. * THE ADDRESS IN REGISTER 12 IS SUBTRACTED FROM THE FAILING 00084000
  85. * ADDRESS TO GET THE DISPLACEMENT WITHIN THE MODULE OF THE 00085000
  86. * FAILURE. THE DISPLACEMENT IS MOVED TO THE PROBLEM REPORT. 00086000
  87. * 00087000
  88. * CONDITION 3 00088000
  89. * ENTERED WITH REGISTER 12 AND 14, OF THE MODULE CALLING THE 00089000
  90. * ABENDING ROUTINE, IN THE PARAMETER LIST. THE MODULE NAME 00090000
  91. * IS DETERMINED USING REGISTER 12 AND A COMPRESSED LOAD 00091000
  92. * MOD MAP SEARCH. THE DISPLACEMENT WITHIN THE CALLER IS 00092000
  93. * FOUND BY SUBTRACTING THE ADDRESS IN REGISTER 12 FROM THE 00093000
  94. * ADDRESS IN REGISTER 14. 00094000
  95. * 00095000
  96. * CONDITION 4 00096000
  97. * REGISTER 12 OF THE CALLING MODULE IS PASSED TO DMMGRC 00097000
  98. * TO READ IN THE PAGE. THE MODULE NAME IS MOVED TO THE 00098000
  99. * PROBLEM REPORT. THE DISPLACEMENT WITHIN THE CALLER IS 00099000
  100. * FOUND BY SUBTRACTING THE ADDRESS IN REGISTER 12 FROM THE 00100000
  101. * ADDRESS IN REGISTER 14. 00101000
  102. * 00102000
  103. * 00103000
  104. * 00104000
  105. * ERROR MESSAGES: 00105000
  106. * 00106000
  107. * 00107000
  108. EJECT 00108000
  109. ENTRY EXTMAP1 @VA04250 00109000
  110. DMMIDM CSECT @VA04250 00110000
  111. USING DMMIDM,R15 TEMPORARY ADDRESSABILITY @VA04250 00111000
  112. B START BRANCH AROUND EYECATCHER @VA04250 00112000
  113. DS 0D @VA04250 00113000
  114. MODNAME DC C'DMMIDM ' MODULE NAME @VA04250 00114000
  115. RELLEV DC C'REL4LEV0' RELEASE AND LEVEL @V4075A1 00115000
  116. START STM R14,R12,12(R13) STORE CALLER'S REGISTERS @VA04250 00116000
  117. DROP R15 @VA04250 00117000
  118. LR R12,R15 LOAD OUR BASE REG @VA04250 00118000
  119. USING DMMIDM,R12 ESTABLISH OUR ADDRESSABILITY @VA04250 00119000
  120. ST R13,SAVEAREA+8 CALLER'S SAVEAREA POINTER @VA04250 00120000
  121. LA R13,SAVEAREA POINT TO OUR SAVEAREA @VA04250 00121000
  122. L R10,VINREC DUMP INFOR. RECORD POINTER @VA04250 00122000
  123. USING DMPINREC,R10 ESTABLISH ADDRESSABILITY @VA04250 00123000
  124. EXTRN WRKBUF @VA04250 00124000
  125. L R9,=A(WRKBUF) POINT TO 4K WORK BUFFER @VA04250 00125000
  126. USING WRKBUF,R9 @VA04250 00126000
  127. L R7,VEXCON POINT TO SHARED CONSTANTS @VA04250 00127000
  128. USING SHARECON,R7 ADDRESS OF SHRD CONSTANT @VA04250 00128000
  129. L R6,=A(EXTMAP1) ADDRESS OF MOD MAP BUFFER @VA04250 00129000
  130. USING EXTMAP1,R6 @VA04250 00130000
  131. TM TYPESW,CPABSW IS THIS A CODED ABEND @VA04250 00131000
  132. BO MODABND YES,GET THE SECOND PARAMETER @VA04250 00132000
  133. L R2,0(R1) ADDR. FAIL OR BASE FROM PARM @VA04250 00133000
  134. ST R2,FAILADD SAVE PROGRAM CHK ADDRESS @VA04250 00134000
  135. B MODREAL BRANCH AROUND NEXT LOAD @VA04250 00135000
  136. MODABND MVC VMMOD(L'VMCALL),VMCALL CHNG MOD.KEY TO CALLER @VA04250 00136000
  137. L R2,REG14(R1) R14 ADDRESS FROM PARM LIST @VA04250 00137000
  138. ST R1,PARMFLD SAVE PARM ADDRESS @VA04250 00138000
  139. LA R2,0(,R2) RESET HIGH ORDER BYTE @VA04250 00139000
  140. MODREAL L R3,REALEND HIGH ADDR OF FIXED NUCLEUS @VA04250 00140000
  141. CR R2,R3 COMP. SRCH ADDR. TO REALEND @VA04250 00141000
  142. BH MODPAGE NOT FIXED PAGE-GO READ PAGE @VA04250 00142000
  143. LA R5,FIRSTADD GET FIRST ADDRESS ENTRY @VA04250 00143000
  144. MODCOMP L R4,0(,R5) LOAD MAP ADDRESS ENTRY @VA04250 00144000
  145. CR R2,R4 COMP MAP ADDR TO FAIL ADD @VA04250 00145000
  146. BE MODFND IF EQUAL MODULE FOUND @VA04250 00146000
  147. BL MODPAST IF R2 LOW - PAST MOD ENTRY @VA04250 00147000
  148. LA R5,NXTENTRY(,R5) BUMP TO NEXT MAP ENTRY @VA04250 00148000
  149. B MODCOMP AND GO CHECK FOR MATCH @VA04250 00149000
  150. MODPAST LA R3,TWENTY SET R3 TO COUNT OF TWENTY @VA04250 00150000
  151. SR R5,R3 BACK UP TO PREVIOUS ENTRY @VA04250 00151000
  152. B MODMOVE GO SET UP TO MOVE MOD NAME @VA04250 00152000
  153. MODFND LA R3,EIGHT SET R3 TO COUNT OF EIGHT @VA04250 00153000
  154. SR R5,R3 USE THIS ENTRY FOR NAME @VA04250 00154000
  155. MODMOVE MVC MODNAM(SIX),0(R5) MOVE MODNAME TO WORKAREA @VA04250 00155000
  156. MVC VMENTRY1,0(R5) THIS IS E.P.-MOVE TO REPORT @VA04250 00156000
  157. LH R4,KEY GET PRESENT KEY LENGTH @VA04250 00157000
  158. LA R3,TWENTY GET ENTRY KEY LENGTH @VA04250 00158000
  159. AR R4,R3 ADD NEW LENGTH @VA04250 00159000
  160. STH R4,KEY STORE NEW LENGTH @VA04250 00160000
  161. MVC VMMOD1,0(R5) MOVE MOD NAME TO REPORT @VA04250 00161000
  162. LH R4,KEY GET CURRENT KEY LENGTH @VA04250 00162000
  163. LA R3,MODKYLEN MODULE KEY LENGTH @VA04250 00163000
  164. AR R4,R3 ADD NEW LENGTH @VA04250 00164000
  165. STH R4,KEY UPDATE KEYLENGTH @VA04250 00165000
  166. LA R3,TWELVE SET R3 TO COUNT OF 12 @VA04250 00166000
  167. MODSTART SR R5,R3 SEE IF PRIOR ENTRY SAME MOD @VA04250 00167000
  168. CLC MODNAM,0(R5) COMPARE ENTRY TO SAVED NAME @VA04250 00168000
  169. BE MODSTART KEEP GOING BACK @VA04250 00169000
  170. L R3,STRTADDR(R5) WE HAVE STARTING ADDRESS @VA04250 00170000
  171. SR R2,R3 SUBT. SRCH ADDR FROM START @VA04250 00171000
  172. LA R2,0(,R2) RESET HIGH BYTE @VA04250 00172000
  173. STH R2,MODTRN SAVE DISPLACEMENT @VA04250 00173000
  174. ST R2,MODDISP SAVE DISP FOR CALLER @VA04250 00174000
  175. LA R2,MODTRN GET DISPLACEMENT ADDRESS @VA04250 00175000
  176. ST R2,TRNPARM1 DATA ADDRESS FOR TRN @VA04250 00176000
  177. LA R3,TWO SET BYTE COUNT FOR TRANSLATE @VA04250 00177000
  178. ST R3,TRNPARM BYTE COUNT FOR TRN @VA04250 00178000
  179. CALL DMMTRN GO TRANSLATE DISPLACEMENT @VA04250 00179000
  180. LR R5,R1 TRANSLATED DATA ADDRESS @VA04250 00180000
  181. MVC VMDISP1,0(R5) MOVE DISPLACEMENT TO REPORT @VA04250 00181000
  182. LH R4,KEY GET CURRENT KEY LENGTH @VA04250 00182000
  183. LA R3,KYDISP DISPLACEMENT KEY LENGTH @VA04250 00183000
  184. AR R4,R3 ADD NEW LENGTH @VA04250 00184000
  185. STH R4,KEY STORE NEW KEY LENGTH @VA04250 00185000
  186. B MODRET RETURN TO CALLER @VA04250 00186000
  187. MODPAGE TM TYPESW,PRGCKSW WAS IT A PROGRAM CHECK @VA04250 00187000
  188. BO MODPRGCK YES, GO PROCESS PROGRAM CHK @VA04250 00188000
  189. LA R1,PARMFLD GET PARM FIELD ADDRESS @VA04250 00189000
  190. L R2,0(,R1) @VA04250 00190000
  191. L R2,0(,R2) GET R12 ADDRESS @VA04250 00191000
  192. ST R2,GRCPARM RECORD ADDRESS FOR GRC @VA04250 00192000
  193. CALL DMMGRC CALL GETREC TO READ IN PAGE @VA04250 00193000
  194. LR R2,R1 RECORD ADDRESS FROM GRC @VA04250 00194000
  195. CLC MODPREFX,0(R2) CHECK FOR MODULE NAME @VA04250 00195000
  196. BE MODGOOD MOVE MOD NAME TO REPORT @VA04250 00196000
  197. B MODRET OTHERWISE RETURN TO CALLER @VA04250 00197000
  198. MODGOOD MVC VMMOD1,0(R2) MOVE MODULE NAME TO REPORT @VA04250 00198000
  199. LA R4,MODKYLEN LENGTH OF MODULE KEY @VA04250 00199000
  200. LH R3,KEY CURRENT KEY LENGTH @VA04250 00200000
  201. AR R4,R3 ADD NEW KEY LENGTH @VA04250 00201000
  202. STH R4,KEY UPDATE KEY LENGTH @VA04250 00202000
  203. LA R1,PARMFLD GET PARM FIELD ADDRESS @VA04250 00203000
  204. L R1,0(,R1) R12 ADDRESS FROM PARM @VA04250 00204000
  205. L R3,PARMR14(R1) GET R14 ADDR. FROM PARM @VA04250 00205000
  206. L R2,0(,R1) R12 ADDRESS FROM PARM @VA04250 00206000
  207. SR R3,R2 SUBT. SEARCH ADDR. FROM R14 @VA04250 00207000
  208. STH R3,MODTRN SET UP TO TRANSLATE DISP @VA04250 00208000
  209. LA R2,MODTRN GET DISP SAVE ADDRESS @VA04250 00209000
  210. ST R2,TRNPARM1 DATA ADDRESS FOR TRN @VA04250 00210000
  211. LA R3,TWO SET BYTE COUNT FOR TRANSLATE @VA04250 00211000
  212. ST R3,TRNPARM BYTE COUNT FOR TRN @VA04250 00212000
  213. CALL DMMTRN CALL TRANSLATE ROUTINE @VA04250 00213000
  214. LR R5,R1 TRANSLATED DATA ADDRESS @VA04250 00214000
  215. MVC VMDISP1,0(R5) MOVE DISPLACEMENT TO REPORT @VA04250 00215000
  216. LH R4,DISPLN LENGTH OF DISPL. KEY @VA04250 00216000
  217. LH R3,KEY CURRENT KEY LENGTH @VA04250 00217000
  218. AR R4,R3 NEW LENGTH @VA04250 00218000
  219. STH R4,KEY UPDATE KEY FIELD @VA04250 00219000
  220. MODRET L R13,SAVEAREA+8 GET SAVE AREA ADDRESS @VA04250 00220000
  221. LM R14,R12,12(R13) RESTORE THE REGISTERS @VA04250 00221000
  222. BR R14 RETURN TO CALLER @VA04250 00222000
  223. MODPRGCK L R2,DMPGPRS+R12DISP GET R12 FROM GENERAL REGS @VA04250 00223000
  224. ST R2,GRCPARM RECORD ADDRESS FOR GRC @VA04250 00224000
  225. CALL DMMGRC CALL RECORD READ ROUTINE @VA04250 00225000
  226. LR R2,R1 RECORD ADDRESS FROM GRC @VA04250 00226000
  227. CLC MODPREFX,0(R2) IS IT 'DMK' @VA04250 00227000
  228. BNE MODRET @VA04250 00228000
  229. MVC VMMOD1,0(R2) MOVE MODULE NAME TO REPORT @VA04250 00229000
  230. LA R4,MODKYLEN LENGTH OF MODULE KEYWORD @VA04250 00230000
  231. LH R3,KEY CURRENT KEY LENGTH @VA04250 00231000
  232. AR R4,R3 NEW LENGTH @VA04250 00232000
  233. STH R4,KEY UPDATE KEY LENGTH @VA04250 00233000
  234. L R4,FAILADD FAILING ADDRESS FROM PC PSW @VA04250 00234000
  235. L R3,DMPGPRS+R12DISP GET REG 12 FROM DMP INFO REC @VA04250 00235000
  236. SR R4,R3 CALCULATE DISPLACEMENT @VA04250 00236000
  237. L R3,MAXDISP SET R3 TO MAX DISPL. @VA04250 00237000
  238. LA R4,0(R4) CLEAR HIGH BYTE @VA04250 00238000
  239. CR R4,R3 IS MAX EXCEEDED? @VA04250 00239000
  240. BL DISPLOW NO,USE IT @VA04250 00240000
  241. LA R5,DSPINVAL GET ? MARKS FOR INVALID DISP @VA04250 00241000
  242. B MOVEDISP AND MOVE INTO REPORT @VA04250 00242000
  243. DISPLOW ST R4,MODDISP SAVE DISPLACEMENT @VA04250 00243000
  244. STH R4,MODTRN @VA04250 00244000
  245. LA R4,MODTRN @VA04250 00245000
  246. ST R4,TRNPARM1 DATA ADDRESS FOR TRN @VA04250 00246000
  247. LA R3,TWO SET BYTE COUNT FOR TRANSLATE @VA04250 00247000
  248. ST R3,TRNPARM BYTE COUNT FOR TRN @VA04250 00248000
  249. CALL DMMTRN @VA04250 00249000
  250. LR R5,R1 TRANSLATED DATA @VA04250 00250000
  251. MOVEDISP MVC VMDISP1,0(R5) MOVE DISPLACEMENT TO REPORT @VA04250 00251000
  252. LH R4,KEY GET CURRENT KEY LENGTH @VA04250 00252000
  253. LA R3,KYDISP DISPLACEMENT KEY LENGTH @VA04250 00253000
  254. AR R4,R3 CALC NEW KEY LENGTH @VA04250 00254000
  255. STH R4,KEY UPDATE KEY LENGTH @VA04250 00255000
  256. B MODRET @VA04250 00256000
  257. ***************************************** 00257000
  258. * CONSTANTS SAVEAREAS AND EQUATES 00258000
  259. MAXDISP DC X'00001001' MAX DISPLACEMENT + 1 @VA04250 00259000
  260. DSPINVAL DC CL4'????' DISPLACEMENT NOT VALID IND. @VA04250 00260000
  261. ***************************************** 00261000
  262. FAILADD DS F PROGRAM CHECK ADDRESS @VA04250 00262000
  263. MODNAM DS CL6 LABEL AT EYECATHCER @VA04250 00263000
  264. PARMFLD DS F SAVE AREA-INPUT PARM FIELD @VA04250 00264000
  265. MODTRN DS F DATA FIELD FOR TRANS. PARM @VA04250 00265000
  266. VMCALL DC C'VMCALLER' KEYWORD FOR CALLING MODULE @VA04250 00266000
  267. SAVEAREA DS 18F OUR SAVEAREA @VA04250 00267000
  268. VEXCON DC V(SHARECON) POINTER TO SHARED CONSTANTS @VA04250 00268000
  269. VINREC DC V(EXTINREC) INPUT RECORD BUFFER @VA04250 00269000
  270. MODPREFX DC C'DMK' MODULE PREFIX @VA04250 00270000
  271. PATCH DC 50F'0' PATCH AREA @VA04250 00271000
  272. TWO EQU 2 TWO FOR LOAD ADDRESS ETC. @VA04250 00272000
  273. FOUR EQU 4 FOUR FOR LOAD ADDRESS ETC. @VA04250 00273000
  274. SIX EQU 6 6 FOR LOAD ADDRESS ETC. @VA04250 00274000
  275. EIGHT EQU 8 8 FOR LOAD ADDRESS ETC. @VA04250 00275000
  276. TWELVE EQU 12 12 FOR LOAD ADDRESS ETC. @VA04250 00276000
  277. KYDISP EQU 15 DISPLACEMENT INTO KEYWORD @VA04250 00277000
  278. MODKYLEN EQU 19 KEYWORD DATA LENGTH @VA04250 00278000
  279. TWENTY EQU 20 20 FOR LOAD ADDRESS ETC. @VA04250 00279000
  280. R12DISP EQU 48 LOCATION OF R12 IN SAVE AREA @VA04250 00280000
  281. PARMR14 EQU 4 PARM FIELD DISPL. FOR R14 @VA04250 00281000
  282. LTORG @VA04250 00282000
  283. EXTMAP1 DS 1024F @VA04250 00283000
  284. EXTMAP2 DS 1024F @VA04250 00284000
  285. EXTMAP3 DS 1024F @VA04250 00285000
  286. EXTMAP4 DS 1024F @VA08089 00285300
  287. EXTMAP5 DS 1024F @VA08089 00285600
  288. REGEQU @VA04250 00286000
  289. COPY EXCONST @VA04250 00287000
  290. COPY DMPBLOKS @VA04250 00288000
  291. REG14 EQU 4 REG 14 ADDRESS LOCATION IN PARM @VA04250 00289000
  292. FIRSTADD EQU EXTMAP1+8 FIRST MAP ADDRESS @VA04250 00290000
  293. NXTENTRY EQU 12 ADDRESS INCREMENT IN LOAD MAP @VA04250 00291000
  294. STRTADDR EQU 20 DECREMENT VALUE FOR LOAD MAP @VA04250 00292000
  295. END 00293000