.C .Y.H Debugging crash dumps with SDA .s .c .y.hDebugging crash dumps .x 1. Description of crash a. Line printer goes offline b. Line printer comes online after 3 hours c. System crashes immediately d. A crash dump is taken .s .c .yAnalysis of crash dump .x a. Examine stack to find exception .s .l .c . . SDA> SHOW STACK Current operating stack (INTERRUPT): 8006A378 8000844B ACP$WRITEBLK+0A0 8006A37C 000034B0 8006A380 00000000 8006A384 000BE600 8006A388 00000680 8006A38C 7FFEEC00 CTL$GL_KSPINI 8006A390 7FFEF000 CTL$GL_KSPINI+400 8006A394 7FFEF878 CTL$GL_KSPINI+C78 SP => 8006A398 7FFDC340 8006A39C 8006A3A0 8006A3A0 80004E7D EXE$REFLECT+0D4 8006A3A4 04080009 8006A3A8 00000004 .s .c 8006A3AC 7FFDC368 8006A3B0 FFFFFFFD 8006A3B4 8001774E 8006A3B8 0000074F .$[7m 8006A3BC 00000005 8006A3C0 0000000C 8006A3C4 00000000 8006A3C8 80069E00 8006A3CC 8005D003 8006A3D0 04080000 .$[0m 8006A3D4 80009604 EXE$FORKDSPTH+01C 8006A3D8 00000008 8006A3DC 8005D02C 8006A3E0 00006D16 8006A3E4 000001F0 8006A3E8 00000000 8006A3EC 00000008 8006A3F0 00000662 8006A3F4 00000000 8006A3F8 00001B08 8006A3FC 83C00001 .s .h .c .yAnalysis of crash dump .x a. Examine stack to find exception b. Given PC, find code segment .s .c .l.$[?3h 0297 479 ; 0297 480 ; START NEXT OUTPUT SEQUENCE 0297 481 ; 0297 482 50 54 02 C1 0297 483 10$: ADDL3 #LP_DBR,R4,R0 ;CALCULATE ADDRESS OF DATA BUFFER REGISTER 51 6C A5 3C 029B 484 MOVZWL UCB$W_BOFF(R5),R1 ;GET NUMBER OF CHARACTERS REMAINING 52 8080 8F B0 029F 485 MOVW #^X8080,R2 ;GET CONTROL REGISTER TEST MASK 08 11 02A4 486 BRB 25$ ; 64 52 B3 02A6 487 20$: BITW R2,(R4) ;PRINTER READY OR HAVE PAPER PROBLEM? 08 15 02A9 488 BLEQ 30$ ;IF LEQ NOT READY OR PAPER PROBLEM .$[1;5m 60 83 90 02AB 489 MOVB (R3)+,(R0) ;OUTPUT NEXT CHARACTER .$[0m F5 51 F4 02AE 490 25$: SOBGEQ R1,20$ ;ANY MORE CHARACTERS TO OUTPUT? 70 11 02B1 491 BRB 70$ ; 02B3 492 02B3 493 ; 02B3 494 ; PRINTER IS NOT READY OR HAS PAPER PROBLEM 02B3 495 ; 02B3 496 21 12 02B3 497 30$: BNEQ 40$ ;IF NEQ PAPER PROBLEM 51 01 A1 02B5 498 ADDW3 #1,R1,UCB$W_BOFF(R5) ;SAVE NUMBER OF CHARACTERS REMAINING .s .$[?3l .c .y.hAnalysis of crash dump .x a. Examine stack to find exception b. Given PC, find code segment c. Determine basic cause of exception .s .c .y The character output routine has exceeded buffer bounds causing an access violation. .s .c .yAnalysis of crash dump .x a. Examine stack to find exception b. Given PC, find code segment c. Determine basic cause of exception d. Examine I/O data structures to obtain further information .s .c.l I/O data structures ------------------- LPA0 ---- UCB address: 8005D160 Device status: 0110 online,bsy Characteristics: 08840043 IRP address 80067A60 Device class 43 SVPN 00000000 CRB address 8005D120 Device type 01 SVAPTE 80062720 VCB address 800680A0 DEVBUFSIZ 132 BOFF 0795 FQFL 800039A8 DEVDEPEND 40000082 BCNT 006D FQBL 800039A8 DEVSTS 0001 ERTCNT 0 Fork IPL 8 Device IPL 20 ERTMAX 0 Fork PC 8005D02C Reference count 2 ERRCNT 0 Fork R3 80069DBB Operation count 75972 Owner UIC [ 0, 0] Fork R4 8001774C AMB address 8000087C PID 00010021 .s .c.y.h In addition, the UCB can be examined by individual fields if desired by using the FORMAT command. .s .c.l.x . . SDA> FORMAT G5D160 8005D160 UCB$L_RQFL 800039A8 UCB$L_FQFL 8005D164 UCB$L_RQBL 800039A8 UCB$L_FQBL 8005D168 UCB$W_SIZE 0080 8005D16A UCB$B_TYPE 10 8005D16B UCB$B_FIPL 08 8005D16C UCB$L_FPC 8005D02C UCB$L_ASTQFL 8005D170 UCB$L_FR3 80069DBB UCB$L_ASTQBL 8005D174 UCB$W_MSGMAX 774C UCB$L_FR4 UCB$L_FIRST 8005D176 UCB$W_MSGCNT 8001 .s .c .y.hAnalysis of crash dump .x e. Notice that BOFF is larger than BCNT (buffer size) f. By code examinition, we notice a code section that could possibly wipe out BOFF .s .c.l .$[?3h 02B3 494 ; PRINTER IS NOT READY OR HAS PAPER PROBLEM 02B3 495 ; 21 12 02B3 497 30$: BNEQ 40$ ;IF NEQ PAPER PROBLEM 51 01 A1 02B5 498 ADDW3 #1,R1,UCB$W_BOFF(R5) ;SAVE NUMBER OF CHARACTERS REMAINING 6C A5 02B8 02BA 499 DSBINT ;DISABLE INTERRUPTS 64 40 8F 88 02C0 500 BISB #^X40,LP_CSR(R4) ;SET INTERRUPT ENABLE .$[1;5m 02C4 501 WFIKPCH 40$,#12 ;WAIT FOR INTERRUPT .$[0m 02CE 502 IOFORK ;CREATE A FORK PROCESS C1 11 02D4 503 BRB 10$ ; 02D6 505 ; 02D6 506 ; PRINTER HAS PAPER PROBLEM 02D6 507 ; 7A A5 94 02D6 509 40$: CLRB UCB$B_LP_OFLCNT(R5) ;CLEAR OFFLINE COUNTER .$[1;5m 51 01 A1 02D9 510 ADDW3 #1,R1,UCB$W_BOFF(R5) ;SAVE NUMBER OF CHARACTERS REMAINING .$[0m 6C A5 02DC 64 B4 02DE 511 50$: CLRW LP_CSR(R4) ;DISABLE PRINTER INTERRUPT 02E0 512 SETIPL UCB$B_FIPL(R5) ;LOWER TO FORK LEVEL .s .$[?3l .c