Annotation of 43BSDReno/bin/adb/common_source/print.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)print.c    5.3 (Berkeley) 4/9/89";
        !             3: #endif
        !             4: 
        !             5: /*
        !             6:  * adb - printing routines
        !             7:  */
        !             8: 
        !             9: #include "defs.h"
        !            10: #include <sys/file.h>
        !            11: 
        !            12: extern char LONGFIL[];
        !            13: extern char NOTOPEN[];
        !            14: extern char BADMOD[];
        !            15: 
        !            16: int    infile;                 /* XXX */
        !            17: int    outfile;                /* XXX */
        !            18: 
        !            19: off_t  lseek();
        !            20: 
        !            21: /* general printing routines ($) */
        !            22: 
        !            23: printtrace(modif)
        !            24:        int modif;
        !            25: {
        !            26:        int stack, i;
        !            27: 
        !            28:        switch (modif) {
        !            29: 
        !            30:        case '<':
        !            31:                if (ecount == 0) {
        !            32:                        while (readchar() != '\n')
        !            33:                                /* void */;
        !            34:                        unreadc();
        !            35:                        break;
        !            36:                }
        !            37:                if (rdc() == '<')
        !            38:                        stack = 1;
        !            39:                else {
        !            40:                        stack = 0;
        !            41:                        unreadc();
        !            42:                }
        !            43:                /* FALLTHROUGH */
        !            44: 
        !            45:        case '>': {
        !            46:                char file[64];
        !            47:                char Ifile[128];
        !            48:                extern char *Ipath;
        !            49:                int index;
        !            50:                char *strcpy(), *strcat();
        !            51: 
        !            52:                index = 0;
        !            53:                if (rdc() != '\n') {
        !            54:                        do {
        !            55:                                file[index++] = lastc;
        !            56:                                if (index >= 63)
        !            57:                                        error(LONGFIL);
        !            58:                        } while (readchar() != '\n');
        !            59:                        file[index] = 0;
        !            60:                        if (modif == '<') {
        !            61:                                if (Ipath) {
        !            62:                                        (void) strcpy(Ifile, Ipath);
        !            63:                                        (void) strcat(Ifile, "/");
        !            64:                                        (void) strcat(Ifile, file);
        !            65:                                }
        !            66:                                if (strcmp(file, "-") != 0) {
        !            67:                                        iclose(stack, 0);
        !            68:                                        infile = open(file, 0);
        !            69:                                        if (infile < 0)
        !            70:                                                infile = open(Ifile, 0);
        !            71:                                } else
        !            72:                                        (void) lseek(infile, 0L, 0);
        !            73:                                if (infile < 0) {
        !            74:                                        infile = 0;
        !            75:                                        error(NOTOPEN);
        !            76:                                        /* NOTREACHED */
        !            77:                                }
        !            78:                                var[9] = ecount;
        !            79:                        } else {
        !            80:                                oclose();
        !            81:                                outfile = open(file, O_CREAT|O_WRONLY, 0644);
        !            82:                                (void) lseek(outfile, 0L, 2);
        !            83:                        }
        !            84:                } else {
        !            85:                        if (modif == '<')
        !            86:                                iclose(-1, 0);
        !            87:                        else
        !            88:                                oclose();
        !            89:                }
        !            90:                unreadc();
        !            91:                break;
        !            92:        }
        !            93: 
        !            94:        case 'p':
        !            95:                if (!kernel)
        !            96:                        prints("not debugging kernel\n");
        !            97:                else {
        !            98:                        if (gavedot)
        !            99:                                setpcb(dot);
        !           100:                        getpcb();
        !           101:                }
        !           102:                break;
        !           103: 
        !           104:        case 'd':
        !           105:                if (gavedot) {
        !           106:                        i = edot;
        !           107:                        if (!(i >= 2 && i <= 16 || i <= -2 && i >= -16)) {
        !           108:                                adbprintf("illegal radix %d base ten",
        !           109:                                    (expr_t)i);
        !           110:                                break;
        !           111:                        }
        !           112:                        radix = i;
        !           113:                }
        !           114:                adbprintf("radix=%D base ten", (expr_t)radix);
        !           115:                break;
        !           116: 
        !           117:        case 'q':
        !           118:        case 'Q':
        !           119:        case '%':
        !           120:                done(0);
        !           121: 
        !           122:        case 'w':
        !           123:        case 'W':
        !           124:                maxcol = gavedot ? edot : MAXCOL;
        !           125:                break;
        !           126: 
        !           127:        case 's':
        !           128:        case 'S':
        !           129:                maxoff = gavedot ? edot : MAXOFF;
        !           130:                break;
        !           131: 
        !           132:        case 'v':
        !           133:        case 'V':
        !           134:                prints("variables\n");
        !           135:                for (i = 0; i <= 35; i++)
        !           136:                        if (var[i])
        !           137:                                adbprintf("%c = %R\n",
        !           138:                                    i > 9 ? i + 'a' - 10 : i + '0',
        !           139:                                    var[i]);
        !           140:                break;
        !           141: 
        !           142:        case 'm':
        !           143:        case 'M':
        !           144:                printmap("? map", &txtmap);
        !           145:                printmap("/ map", &datmap);
        !           146:                break;
        !           147: 
        !           148:        case 0:
        !           149:        case '?':
        !           150:                if (pid)
        !           151:                        adbprintf("pcs id = %D\n", (expr_t)pid);
        !           152:                else
        !           153:                        prints("no process\n");
        !           154:                sigprint();
        !           155:                flushbuf();
        !           156:                /* FALLTHROUGH */
        !           157: 
        !           158:        case 'r':
        !           159:        case 'R':
        !           160:                printregs();
        !           161:                return;
        !           162: 
        !           163:        case 'c':
        !           164:        case 'C':
        !           165:                printstack(modif == 'C', gavecount ? (int)ecount : -1);
        !           166:                break;
        !           167: 
        !           168:        case 'e':
        !           169:        case 'E':
        !           170:                /* print externals */
        !           171:                printsyms(modif == 'E');
        !           172:                break;
        !           173: 
        !           174: 
        !           175:        case 'b':
        !           176:        case 'B':
        !           177:                /* print breakpoints */
        !           178:                printbkpts();
        !           179:                break;
        !           180: 
        !           181:        default:
        !           182:                error(BADMOD);
        !           183:        }
        !           184: }
        !           185: 
        !           186: printmap(s, m)
        !           187:        char *s;
        !           188:        register struct map *m;
        !           189: {
        !           190: 
        !           191:        adbprintf("%s%12t`%s'\n", s, m->ufd < 0 ? "-" :
        !           192:                m->ufd == corefile.fd ? corefile.name : symfile.name);
        !           193:        adbprintf("b1 = %-16Re1 = %-16Rf1 = %-16R\n",
        !           194:            m->m1.b, m->m1.e, m->m1.f);
        !           195:        adbprintf("b2 = %-16Re2 = %-16Rf2 = %-16R\n",
        !           196:            m->m2.b, m->m2.e, m->m2.f);
        !           197: }
        !           198: 
        !           199: /*
        !           200:  * Print global data and bss symbols, and if texttoo, text symbols too.
        !           201:  */
        !           202: printsyms(texttoo)
        !           203:        int texttoo;
        !           204: {
        !           205:        register struct nlist *sp;
        !           206: 
        !           207:        if (symtab == NULL)
        !           208:                return;
        !           209:        for (sp = symtab; sp < esymtab; sp++) {
        !           210:                if ((sp->n_type & N_EXT) == 0)
        !           211:                        continue;
        !           212:                switch (sp->n_type) {
        !           213: 
        !           214:                case N_TEXT|N_EXT:
        !           215:                        if (texttoo)
        !           216:                                adbprintf("%s:%12t@ %R\n",
        !           217:                                          sp->n_un.n_name,
        !           218:                                          (expr_t)sp->n_value);
        !           219:                        break;
        !           220: 
        !           221:                case N_DATA|N_EXT:
        !           222:                case N_BSS|N_EXT:
        !           223:                        adbprintf("%s:%12t", sp->n_un.n_name);
        !           224:                        prfrom((addr_t)sp->n_value, '\n');
        !           225:                        break;
        !           226:                }
        !           227:        }
        !           228: }
        !           229: 
        !           230: /*
        !           231:  * Print the value stored in some location, or `?' if it cannot be read,
        !           232:  * then the character c (usually '\n' or ',').
        !           233:  */
        !           234: prfrom(a, c)
        !           235:        addr_t a;
        !           236:        int c;
        !           237: {
        !           238:        expr_t v;
        !           239: 
        !           240:        errflag = NULL;
        !           241:        if (adbread(SP_DATA, a, &v, sizeof(v)) == sizeof(v) && errflag == NULL)
        !           242:                adbprintf("%R\%c", v, c);
        !           243:        else {
        !           244:                errflag = NULL;
        !           245:                adbprintf("?%c", c);
        !           246:        }
        !           247: }
        !           248: 
        !           249: #ifdef busted
        !           250: /*
        !           251:  * Print a local symbol (called from printstack()).
        !           252:  * Local symbols end with ':', so cannot use %s format.
        !           253:  */
        !           254: printlsym(cp)
        !           255:        register char *cp;
        !           256: {
        !           257: 
        !           258:        while (*cp && *cp != ':')
        !           259:                printc(*cp++);
        !           260: }
        !           261: #endif
        !           262: 
        !           263: printregs()
        !           264: {
        !           265:        register struct reglist *p;
        !           266:        expr_t v;
        !           267:        extern struct reglist reglist[];
        !           268: 
        !           269:        for (p = reglist; p->r_name != NULL; p++) {
        !           270:                v = getreg(p);
        !           271:                adbprintf("%s%6t%R\%16t", p->r_name, v);
        !           272:                valpr(v, ispace_reg(p) ? SP_INSTR : SP_DATA);
        !           273:                printc('\n');
        !           274:        }
        !           275:        printpc();
        !           276: }
        !           277: 
        !           278: printpc()
        !           279: {
        !           280: 
        !           281:        dot = getpc();
        !           282:        pdot();
        !           283:        printins(SP_INSTR);
        !           284:        printc('\n');
        !           285: }

unix.superglobalmegacorp.com

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