Annotation of coherent/b/bin/db/db2.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * db/db2.c
                      3:  * A debugger.
                      4:  * Segmentation maps.
                      5:  */
                      6: 
                      7: #include "db.h"
                      8: 
                      9: /*
                     10:  * Return the segment map in which the address in segment 's' falls.
                     11:  */
                     12: MAP *
                     13: map_addr(s, addr) int s; ADDR_T addr;
                     14: {
                     15:        register MAP *mp;
                     16: 
                     17:        for (mp = seg_map[s]; mp != (MAP *)NULL; mp = mp->m_next) {
                     18:                if (mp->m_base <= addr && addr < mp->m_bend)
                     19:                        break;
                     20:        }
                     21: #if    0
                     22:        if (mp == NULL)
                     23:                printf("map_addr failed, s=%d addr=%lX\n", s, addr);
                     24: #endif
                     25:        return mp;
                     26: }
                     27: 
                     28: /*
                     29:  * Clear the segment map for segment 's' until 'endp'.
                     30:  * 'endp' allows leaving pure data while clearing impure data.
                     31:  */
                     32: void
                     33: map_clear(s, endp) int s; MAP *endp;
                     34: {
                     35:        register MAP *mp, *nmp;
                     36: 
                     37:        dbprintf(("map_clear(%d, %X):\n", s, endp));
                     38:        for (mp = seg_map[s]; mp != endp; mp = nmp) {
                     39:                dbprintf((" map_clear clearing %X\n", mp));
                     40:                nmp = mp->m_next;
                     41:                nfree(mp);
                     42:        }
                     43:        seg_map[s] = mp;
                     44: }
                     45: 
                     46: /*
                     47:  * Clear all maps.
                     48:  * The maps can share the same information, e.g. after ISPACE = DSPACE,
                     49:  * hence the silly equality check kludge below.
                     50:  */
                     51: void
                     52: map_init()
                     53: {
                     54:        register int n;
                     55: 
                     56:        dbprintf(("map_init()\n"));
                     57:        for (n = 0; n < NSEGS; n++) {
                     58:                while (n < NSEGS - 1 && seg_map[n] == seg_map[n+1])
                     59:                        seg_map[n++] = (MAP *)NULL;
                     60:                map_clear(n, (MAP *)NULL);
                     61:        }
                     62: }
                     63: 
                     64: /*
                     65:  * Print a segmentation map for the :m request.
                     66:  */
                     67: void
                     68: map_print()
                     69: {
                     70:        register MAP *mp;
                     71:        register int n;
                     72: 
                     73:        for (n = 0; n < NSEGS; n++) {
                     74:                for (mp = seg_map[n]; mp != (MAP *)NULL; mp = mp->m_next) {
                     75:                        if (testint())
                     76:                                return;
                     77:                        if (mp == seg_map[n]) {
                     78:                                printx("%s", seg_name[n]);
                     79:                                while (n < NSEGS-1 && seg_map[n+1]==mp)
                     80:                                        printx(" == %s", seg_name[++n]);
                     81:                                printx(":\n");
                     82:                        }
                     83:                        printx("[");
                     84:                        printx(addr_fmt, mp->m_base);
                     85:                        printx(", ");
                     86:                        printx(addr_fmt, mp->m_bend);
                     87:                        printx("] => ");
                     88:                        printx(addr_fmt, mp->m_offt);
                     89:                        printx(" (%d)", mp->m_segi);
                     90:                        if (mp->m_flag == MAP_CHILD)
                     91:                                printx(" [child]\n");
                     92:                        else
                     93:                                printx(" \"%s\"\n", (mp->m_flag == MAP_PROG) ? lfn : cfn);
                     94:                }
                     95:        }
                     96: }
                     97: 
                     98: /*
                     99:  * Initialize an element of a segment map.
                    100:  */
                    101: void
                    102: map_set(s, base, size, offt, flag) int s; ADDR_T base, size; off_t offt; int flag;
                    103: {
                    104:        register MAP *mp;
                    105: 
                    106:        dbprintf(("map_set(s=%d base=%lX size=%lX offt=%lX flag=%d)\n", s, base, size, offt, flag));
                    107:        if (size == (ADDR_T)0)
                    108:                return;                         /* ignore empty segments */
                    109:        mp = (MAP *)nalloc(sizeof(MAP), "segment map");
                    110:        mp->m_next = seg_map[s];
                    111:        seg_map[s] = mp;                        /* link into list */
                    112:        mp->m_base = base;
                    113:        mp->m_bend = base + size;
                    114:        mp->m_offt = offt;
                    115:        mp->m_segi = s;
                    116:        mp->m_flag = flag;
                    117: }
                    118: 
                    119: /* end of db/db2.c */

unix.superglobalmegacorp.com

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