Annotation of coherent/d/286_KERNEL/USRSRC/286/dump.c, revision 1.1

1.1     ! root        1: /* $Header: /usr/src/sys/i8086/ibm_at/RCS/dump.c,v 1.1 88/03/24 17:33:35 src Exp $
        !             2:  *
        !             3:  * Function to dump Kernel data inforation.
        !             4:  *
        !             5:  * $Log:       /usr/src/sys/i8086/ibm_at/RCS/dump.c,v $
        !             6:  * Revision 1.1        88/03/24  17:33:35      src
        !             7:  * Initial revision
        !             8:  * 
        !             9:  */
        !            10: #include <ascii.h>
        !            11: #include <coherent.h>
        !            12: #include <sys/i8086.h>
        !            13: #include <sys/proc.h>
        !            14: #include <sys/uproc.h>
        !            15: #include <sys/seg.h>
        !            16: 
        !            17: int nodump = 1;
        !            18: 
        !            19: /*
        !            20:  * Note: ip1 is a dummy parameter facilitating access to calling stack frame.
        !            21:  */
        !            22: dumpall( ip1 )
        !            23: int ip1;
        !            24: {
        !            25:        register PROC * pp;
        !            26:        register SEG  * sp;
        !            27:        faddr_t gp;
        !            28:        faddr_t fp;
        !            29:        int s;
        !            30:        extern saddr_t gdtsel;
        !            31:        extern saddr_t uasa, ucs, uds, scs, sds;
        !            32:        extern int nesterr;
        !            33: 
        !            34:        if ( nodump )
        !            35:                return;
        !            36: 
        !            37:        s = sphi();
        !            38: 
        !            39:        printf("\nuasa=%x ucs=%x uds=%x scs=%x sds=%x nesterr=%u\n",
        !            40:                uasa, ucs, uds, scs, sds, nesterr );
        !            41: 
        !            42: 
        !            43:        printf("\nGlobal Descriptor Table:\n");
        !            44:        FP_SEL(gp) = gdtsel;
        !            45:        FP_OFF(gp) = 5; /* offset of flags byte */
        !            46:        FP_SEL(fp) = 0;
        !            47:        FP_OFF(fp) = 0;
        !            48:        do {
        !            49:                if ( ffbyte(gp) )
        !            50:                        vprint(fp);
        !            51:                FP_OFF(gp) += 8;
        !            52:                FP_SEL(fp) += 8;
        !            53:        } while ( FP_SEL(fp) != 0 );
        !            54: 
        !            55:        showevq();
        !            56:        showtim();
        !            57:        putchar( A_FF );
        !            58:        
        !            59:        printf("\nProcesses:\n");
        !            60:        for ( pp = procq.p_nforw; pp != &procq; pp = pp->p_nforw )
        !            61:                showproc( pp );
        !            62:        putchar( A_FF );
        !            63: 
        !            64:        printf( "\nMemory Segments:\n\n" );
        !            65:        for ( sp = segmq.s_forw; sp != &segmq; sp = sp->s_forw )
        !            66:                showseg( sp, "" );
        !            67:        putchar( A_FF );
        !            68: 
        !            69:        if ( segdq.s_forw != &segdq ) {
        !            70:                printf( "\nDisk Segments:\n\n");
        !            71:                for ( sp = segdq.s_forw; sp != &segdq; sp = sp->s_forw )
        !            72:                        showseg( sp, "" );
        !            73:                putchar( A_FF );
        !            74:        }
        !            75: 
        !            76:        printf("\nLocal Stack: sp=%x\n", (&ip1)-1 );
        !            77:        FP_SEL(fp) = sds;
        !            78:        FP_OFF(fp) = (char*)(&u) + 1022;
        !            79:        do {
        !            80:                printf("        %x: %x\n", FP_OFF(fp), ffword(fp) );
        !            81:                FP_OFF(fp)  -= 2;
        !            82:        } while ( FP_OFF(fp) >= (&ip1)-1 );
        !            83:        putchar( A_FF );
        !            84: 
        !            85:        printf("\nUser Stack: ss:sp = %x:%x\n", regl[OSS], regl[OSP] );
        !            86:        FP_SEL(gp) = gdtsel;
        !            87:        FP_OFF(gp) = regl[OSS] & ~7;
        !            88:        if ( ((regl[OSS]&7) == 0) && regl[OSS] && regl[OSP] && ffbyte(gp+5) ) {
        !            89:                FP_SEL(fp) = regl[OSS];
        !            90:                FP_OFF(fp) = regl[OSP] + 120;
        !            91:                if ( FP_OFF(fp) > udl )
        !            92:                        FP_OFF(fp) = udl & ~1;
        !            93:                do {
        !            94:                        printf("        %x: %x\n", FP_OFF(fp), ffword(fp) );
        !            95:                        FP_OFF(fp)  -= 2;
        !            96:                } while ( FP_OFF(fp) >= regl[OSP] );
        !            97:        }
        !            98:        putchar( A_FF );
        !            99: 
        !           100:        putchar( A_LF );
        !           101:        spl( s );
        !           102: }
        !           103: 
        !           104: static
        !           105: showevq()
        !           106: {
        !           107:        register PROC * pp;
        !           108:        register int i;
        !           109: 
        !           110:        printf("\nEvent Queues:\n");
        !           111: 
        !           112:        for ( i = 0; i < nel(linkq); i++ ) {
        !           113: 
        !           114:                if ( linkq[i].p_lforw == linkq[i].p_lback )
        !           115:                        continue;
        !           116: 
        !           117:                pp = linkq[i].p_lforw;
        !           118:                printf("%x:", i );
        !           119: 
        !           120:                do {
        !           121:                        printf("\t%x: lforw=%x lback=%x pid=%d event=%x\n",
        !           122:                                pp,
        !           123:                                pp->p_lforw,
        !           124:                                pp->p_lback,
        !           125:                                pp->p_pid,
        !           126:                                pp->p_event
        !           127:                        );
        !           128:                } while ((pp = pp->p_lforw) != (PROC *) &linkq[i] );
        !           129:        }
        !           130: }
        !           131: 
        !           132: static
        !           133: showtim()
        !           134: {
        !           135:        register TIM * tp;
        !           136:        register int i;
        !           137: 
        !           138:        printf("\nTiming Queues: lbolt=%lx\n", lbolt );
        !           139: 
        !           140:        for ( i = 0; i < nel(timq); i++ ) {
        !           141: 
        !           142:                if ( ! (tp = timq[i]) )
        !           143:                        continue;
        !           144: 
        !           145:                printf("%x:", i );
        !           146: 
        !           147:                do {
        !           148:                    printf("\t%x: next=%x last=%x func=%x farg=%x lbolt=%lx\n",
        !           149:                        tp,
        !           150:                        tp->t_next,
        !           151:                        tp->t_last,
        !           152:                        tp->t_func,
        !           153:                        tp->t_farg,
        !           154:                        tp->t_lbolt
        !           155:                    );
        !           156:                } while ( tp = tp->t_next );
        !           157:        }
        !           158: }
        !           159: 
        !           160: static
        !           161: showproc( pp )
        !           162: register PROC * pp;
        !           163: {
        !           164:        register int i;
        !           165: 
        !           166:        printf("\n%x:\tnforw=%x nback=%x pid=%d ppid=%d state=%x flags=%x\n",
        !           167:                pp,
        !           168:                pp->p_nforw,            /* Forward pointer */
        !           169:                pp->p_nback,            /* Backward pointer */
        !           170:                pp->p_pid,              /* Process id */
        !           171:                pp->p_ppid,             /* Process id of parent */
        !           172:                pp->p_state,
        !           173:                pp->p_flags
        !           174:        );
        !           175: 
        !           176:        if ( pp->p_polltim.t_last )
        !           177:        printf("\tpolltim@%x: next=%x last=%x func=%x farg=%x lbolt=%lx\n",
        !           178:                &pp->p_polltim,
        !           179:                pp->p_polltim.t_next,
        !           180:                pp->p_polltim.t_last,
        !           181:                pp->p_polltim.t_func,
        !           182:                pp->p_polltim.t_farg,
        !           183:                pp->p_polltim.t_lbolt
        !           184:        );
        !           185: 
        !           186:        if ( pp->p_alrmtim.t_last )
        !           187:        printf("\talrmtim@%x: next=%x last=%x func=%x farg=%x lbolt=%lx\n",
        !           188:                &pp->p_alrmtim,
        !           189:                pp->p_alrmtim.t_next,
        !           190:                pp->p_alrmtim.t_last,
        !           191:                pp->p_alrmtim.t_func,
        !           192:                pp->p_alrmtim.t_farg,
        !           193:                pp->p_alrmtim.t_lbolt
        !           194:        );
        !           195: 
        !           196:        for ( i = 0; i <= NUSEG; i++ ) {
        !           197:        static char * nam[] = {  "UA", "SS", "SI", "PI", "SD",  "PD", "UX" };
        !           198:                if ( pp->p_segp[i] ) {
        !           199:                        printf("\n    %s: ", nam[i] );
        !           200:                        showseg( pp->p_segp[i], "        " );
        !           201:                }
        !           202:        }
        !           203: }
        !           204: 
        !           205: static
        !           206: showseg( sp, prefix )
        !           207: register SEG * sp;
        !           208: char * prefix;
        !           209: {
        !           210:        printf("%x: forw=%x back=%x ip=%x flags=%x urefc=%d lrefc=%d\n",
        !           211:                sp,
        !           212:                sp->s_forw,             /* Forward pointer */
        !           213:                sp->s_back,             /* Backward pointer */
        !           214:                sp->s_ip,               /* Inode pointer for shared text */
        !           215:                sp->s_flags,            /* Flags */
        !           216:                sp->s_urefc,            /* Reference count of segment */
        !           217:                sp->s_lrefc             /* Lock reference count */
        !           218:        );
        !           219: 
        !           220:        printf( "%s    faddr=%X size=%X paddr=%X\n",
        !           221:                prefix,
        !           222:                sp->s_faddr,            /* Memory access selector */
        !           223:                sp->s_size,             /* Size in bytes */
        !           224:                sp->s_paddr             /* Physical base address */
        !           225:        );
        !           226: 
        !           227:        printf("%s    ", prefix);
        !           228:        vprint( sp->s_faddr );
        !           229: }

unix.superglobalmegacorp.com

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