Annotation of 43BSDReno/sys/kdb/kdb_trap.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1986, 1989 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)kdb_trap.c  7.8 (Berkeley) 5/3/90
                      7:  */
                      8: 
                      9: /*
                     10:  * Trap handler - command loop entry point.
                     11:  */
                     12: #include "../kdb/defs.h"
                     13: 
                     14: char   *kdbNOEOR;
                     15: 
                     16: int    kdbexecuting;
                     17: char   *kdblp;
                     18: 
                     19: char   kdblastc;
                     20: 
                     21: ADDR   kdbuserpc;
                     22: int    kdblastcom;
                     23: 
                     24: ADDR   kdbmaxoff = MAXOFF;
                     25: long   kdbmaxpos = MAXPOS;
                     26: 
                     27: /*
                     28:  * Kdb trap handler; entered on all fatal
                     29:  * and/or debugger related traps or faults.
                     30:  */
                     31: kdb(type, code, curproc, kstack)
                     32:        int type, code;
                     33:        struct proc *curproc;
                     34:        int kstack;
                     35: {
                     36: 
                     37:        kdbvar[kdbvarchk('t')] = type;
                     38:        kdbvar[kdbvarchk('c')] = code;
                     39:        kdbvar[kdbvarchk('p')] = (int)curproc;
                     40:        if (kdbexecuting)
                     41:                kdbdelbp();
                     42:        kdbexecuting = 0;
                     43:        if (kstack)
                     44:                kdbprintf("(from kernel stack)\n"); /* after delbp() */
                     45:        kdbprinttrap((long)type, (long)code);
                     46:        kdbuserpc = kdbdot = kdbpcb.pcb_pc;
                     47:        switch (setexit()) {
                     48: 
                     49:        case SINGLE:
                     50:                setsstep();             /* hardware single step */
                     51:                /* fall thru... */
                     52:        case CONTIN:
                     53:                return (1);
                     54:        case PANIC:
                     55:                return (0);
                     56:        case 0:
                     57:                if (kdbnextpcs(type))
                     58:                        kdbprintf("breakpoint%16t");
                     59:                else
                     60:                        kdbprintf("stopped at%16t");
                     61:                kdbprintpc();
                     62:                break;
                     63:        }
                     64:        if (kdbexecuting)
                     65:                kdbdelbp();
                     66:        kdbexecuting = 0;
                     67:        for (;;) {
                     68:                kdbflushbuf();
                     69:                if (kdberrflg) {
                     70:                        kdbprintf("%s\n", kdberrflg);
                     71:                        kdberrflg = 0;
                     72:                }
                     73:                if (kdbmkfault) {
                     74:                        kdbmkfault=0;
                     75:                        kdbprintc('\n');
                     76:                        kdbprintf(DBNAME);
                     77:                }
                     78:                kdbwrite("kdb> ", 5);
                     79:                kdblp=0; (void) kdbrdc(); kdblp--;
                     80:                (void) kdbcommand((char *)0, kdblastcom);
                     81:                if (kdblp && kdblastc!='\n')
                     82:                        kdberror(kdbNOEOR);
                     83:        }
                     84: }
                     85: 
                     86: /*
                     87:  * If there has been an error or a fault, take the error.
                     88:  */
                     89: kdbchkerr()
                     90: {
                     91:        if (kdberrflg || kdbmkfault)
                     92:                kdberror(kdberrflg);
                     93: }
                     94: 
                     95: /*
                     96:  * An error occurred; save the message for
                     97:  * later printing, and reset to main command loop.
                     98:  */
                     99: kdberror(n)
                    100:        char *n;
                    101: {
                    102: 
                    103:        kdberrflg = n;
                    104:        reset(ERROR);
                    105: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.