Annotation of coherent/d/PS2_KERNEL/i286/dump.c, revision 1.1

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

unix.superglobalmegacorp.com

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