Annotation of coherent/b/bin/db/db.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * db/db.h
                      3:  * A debugger.
                      4:  * Header file.
                      5:  */
                      6: 
                      7: #define        VERSION "4.1.9"                 /* Version number               */
                      8: 
                      9: /* Use or ignore function prototypes. */
                     10: #ifdef PROTO_OK
                     11: #define        __(args)        args            /* Use prototype info           */
                     12: #else
                     13: #define        __(args)        ()              /* Prototype info disappears    */
                     14: #endif
                     15: 
                     16: #include <stdio.h>
                     17: #include <stdlib.h>
                     18: #include <string.h>
                     19: #include <ctype.h>
                     20: #include <l.out.h>
                     21: #include <coff.h>              /* header bug: must follow l.out.h */
                     22: #include <sys/reg.h>
                     23: #include <ieeefp.h>            /* header bug: must follow <sys/reg.h> */
                     24: #include <sys/types.h>
                     25: #include "mdb.h"
                     26: /* #include "mdbdefs.h"                #included below, after type definitions */
                     27: 
                     28: /*
                     29:  * Print much too much debug output if DEBUG.
                     30:  * Turning the "dbprintf((...));" calls into "printf();" as needed
                     31:  * is more useful in practice.
                     32:  */
                     33: #if    DEBUG
                     34: #define        dbprintf(args)  printf args
                     35: #else
                     36: #define        dbprintf(args)
                     37: #endif
                     38: 
                     39: /* Print ptrace calls if DBPTRACE. */
                     40: #if    DBPTRACE
                     41: #define        ptrace(cmd, id, loc, val)       dbptrace((cmd), (id), (loc), (val))
                     42: #endif
                     43: 
                     44: #define        OLD_CORE        1       /* Support both core formats, just for now */
                     45: 
                     46: #define        PROMPT  "db: "                  /* default interactive prompt   */
                     47: 
                     48: /* Values for file_type. */
                     49: #define        LOUT_FILE       1
                     50: #define        COFF_FILE       2
                     51: #define        IS_LOUT (file_type == LOUT_FILE)
                     52: #define        IS_COFF (file_type == COFF_FILE)
                     53: #define        IS_OBJ  (file_type == LOUT_FILE || file_type == COFF_FILE)
                     54: 
                     55: /* Adjustible manifest constants. */
                     56: #define        ARGSIZE 20                      /* Max number of args for ':e'  */
                     57: #define        CCSSIZE 8                       /* C compiler symbol size       */
                     58: #define COMSIZE        128                     /* Command sequence size        */
                     59: #define DISSIZE        64                      /* Terminal display size        */
                     60: #define FORSIZE        64                      /* Segment format size          */
                     61: #define MISSIZE        256                     /* Miscellaneous buffer size    */
                     62: #define        NHASH   64                      /* Number of SYM hash buckets   */
                     63: #define NBPT   16                      /* Number of breakpoints        */
                     64: #define VALSIZE        10                      /* Number of expressions allowed */
                     65: 
                     66: /* Single step modes. */
                     67: #define SNULL  0                       /* Do nothing, :e               */
                     68: #define SSTEP  1                       /* Single step, :s              */
                     69: #define SCONT  2                       /* Continuous step, :sc         */
                     70: #define SCALL  3                       /* Continuous step at call      */
                     71: #define SWAIT  4                       /* Step to function return      */
                     72: 
                     73: /* Values for reg_flag; larger values must be superset of smaller. */
                     74: #define        R_INVALID       0               /* Registers not read yet       */
                     75: #define        R_SOME          1               /* Registers PC, FP, SP, signo read */
                     76: #define        R_GEN           2               /* General registers read       */
                     77: #define        R_ALL           3               /* Registers all read           */
                     78: 
                     79: /* Breakpoint table. */
                     80: typedef struct b_st    {
                     81:        int     b_flag;                 /* Flag word                    */
                     82:        ADDR_T  b_badd;                 /* Breakpoint address           */
                     83:        ADDR_T  b_rfpt;                 /* Return frame pointer         */
                     84:        ADDR_T  b_sfpt;                 /* Single continue frame pointer */
                     85:        char    *b_bcom;                /* Breakpoint command           */
                     86:        char    *b_rcom;                /* Return command               */
                     87:        BIN     b_bins;                 /* Replaced instruction         */
                     88: } BPT;
                     89: /* Breakpoint flags. */
                     90: #define BBPT   0x01                    /* Ordinary (:b)                */
                     91: #define BRET   0x02                    /* Return (:br)                 */
                     92: #define BSIN   0x04                    /* Single step at call (:sc)    */
                     93: 
                     94: /*
                     95:  * Segment definitions.
                     96:  * This is a vestige of PDP-11 architecture
                     97:  * which has no business living in the machine-independent code.
                     98:  */
                     99: #define NSEGS  3                       /* Number of segments           */
                    100: #define DSEG   0                       /* Data                         */
                    101: #define ISEG   1                       /* Instructions                 */
                    102: #define USEG   2                       /* User                         */
                    103: #define        DSPACE  seg_map[DSEG]           /* Data space                   */
                    104: #define ISPACE seg_map[ISEG]           /* Instruction space            */
                    105: #define USPACE seg_map[USEG]           /* User area                    */
                    106: #define        SEG_NONE -1                     /* None of the above            */
                    107: 
                    108: /*
                    109:  * Segmentation map.
                    110:  * This tells db how to map an address in a given segment
                    111:  * into an offset in the program file, in the core file,
                    112:  * or in the child process.
                    113:  */
                    114: typedef struct map     {
                    115:        struct  map     *m_next;        /* Pointer to next              */
                    116:        ADDR_T  m_base;                 /* Segment base                 */
                    117:        ADDR_T  m_bend;                 /* Segment end                  */
                    118:        off_t   m_offt;                 /* Offset                       */
                    119:        int     m_segi;                 /* Segment index                */
                    120:        int     m_flag;                 /* Flag: program, core, child   */
                    121: } MAP;
                    122: /* Map flags. */
                    123: #define        MAP_PROG        0               /* Segment in program file      */
                    124: #define        MAP_CORE        1               /* Segment in core file         */
                    125: #define        MAP_CHILD       2               /* Segment in child process     */
                    126: 
                    127: /*
                    128:  * Symbol.
                    129:  */
                    130: typedef struct sym     {
                    131:        struct  sym     *s_next;        /* Hash chain link              */
                    132:        ADDR_T          s_addr;         /* Value                        */
                    133:        char            s_segn;         /* Segment                      */
                    134:        char            s_id[1];        /* Name                         */
                    135: } SYM;
                    136: 
                    137: /*
                    138:  * Default file names.
                    139:  */
                    140: #define DEFLT_OBJ      "l.out"         /* object file                  */
                    141: #define DEFLT_OBJ2     "a.out"         /* object file if l.out not found */
                    142: #define DEFLT_AUX      "core"          /* auxiliary file               */
                    143: 
                    144: /*
                    145:  * Value descriptor.
                    146:  * A VAL can represent no value (flag==VNULL);
                    147:  * an lvalue (flag==VSEGN), i.e. a segment and an ADDR_T address; or
                    148:  * a long rvalue (flag==0).
                    149:  * In a few places (e.g. "*<number>?"), an rvalue gets coerced to an lvalue,
                    150:  * with the segment either implied or invented.
                    151:  */
                    152: typedef struct val     {
                    153:        unsigned char   v_flag;         /* Flag word                    */
                    154:        unsigned char   v_segn;         /* Segment number               */
                    155:        long            v_nval;         /* Value                        */
                    156: } VAL;
                    157: /* Value flags. */
                    158: #define VNULL  1                       /* Value is null                */
                    159: #define VSEGN  2                       /* Value has known segment      */
                    160: 
                    161: /*
                    162:  * Input stack.
                    163:  */
                    164: typedef        struct  inp     {
                    165:        struct  inp     *i_next;        /* Pointer to next              */
                    166:        int             i_type;         /* Type of input                */
                    167:        union   {
                    168:                FILE    *i_filp;        /* File pointer                 */
                    169:                char    *i_strp;        /* String pointer               */
                    170:        } i_u;
                    171: } INP;
                    172: /* Input types. */
                    173: #define IFILE  1                       /* File I/O                     */
                    174: #define ICORE  2                       /* Core I/O                     */
                    175: 
                    176: /* Simple routines implemented as macros. */
                    177: #ifdef NOCANON
                    178: #define        getb(segn, bp, n)       getputb((segn), (bp), (n), 0)
                    179: #define        putb(segn, bp, n)       getputb((segn), (bp), (n), 1)
                    180: #endif
                    181: #define        nfree(cp)       free(cp)
                    182: #define        nvalue(vp)      ((vp)->v_flag & VNULL)
                    183: #define        printx          printf
                    184: #define        putx(c)         putchar(c)
                    185: #define        ungetn(c)       ungotc = (c)
                    186: 
                    187: /*
                    188:  * Function prototypes.
                    189:  */
                    190: /* db1.c */
                    191: extern int     main            __((int argc, char *argv[]));
                    192: extern void    arm_sigint      __((void));
                    193: extern void    canlout         __((void));
                    194: extern void    initialize      __((void));
                    195: extern void    leave           __((void));
                    196: extern FILE    *openfile       __((char *name, int rflag));
                    197: extern void    set_core        __((char *name));
                    198: extern void    set_file        __((char *name));
                    199: extern void    set_prog        __((char *name, int flag));
                    200: extern void    setup           __((int argc, char *argv[]));
                    201: extern int     testint         __((void));
                    202: extern void    usage           __((void));
                    203: 
                    204: /* db2.c */
                    205: extern MAP     *map_addr       __((int s, ADDR_T addr));
                    206: extern void    map_clear       __((int s, MAP *endp));
                    207: extern void    map_init        __((void));
                    208: extern void    map_print       __((void));
                    209: extern void    map_set         __((int s, ADDR_T base, ADDR_T size, \
                    210:                                   off_t offt, int flag));
                    211: 
                    212: /* db3.c */
                    213: extern int     command         __((VAL *vp));
                    214: extern char    *conform        __((char *sp, int s, int t1, int t2));
                    215: extern int     display         __((int s, int n));
                    216: extern void    execute         __((char *cmd));
                    217: extern void    flushb          __((ADDR_T addr));
                    218: extern void    helpinfo        __((int flag));
                    219: extern char    *gettime        __((char *sp, int s));
                    220: extern char    *printable      __((char *sp, int c));
                    221: extern void    process         __((void));
                    222: extern void    request         __((void));
                    223: extern int     runfile         __((void));
                    224: extern char    *save_cmd       __((char *buf, char *s));
                    225: extern int     setdata         __((int segn, ADDR_T a));
                    226: extern int     syscall         __((void));
                    227: 
                    228: /* db4.c */
                    229: extern int     bpt_del         __((int t, ADDR_T addr));
                    230: extern void    bpt_init        __((void));
                    231: extern void    bpt_display     __((void));
                    232: extern void    bpt_print       __((int t, ADDR_T a, char *cmd));
                    233: extern int     bpt_set         __((int f, ADDR_T addr, ADDR_T fp, char *cmd));
                    234: 
                    235: /* db5.c */
                    236: extern int     expr            __((VAL *left, int wall));
                    237: extern int     expr_list       __((VAL vlist[]));
                    238: extern int     lextoken        __((VAL *vp));
                    239: extern ADDR_T  lvalue          __((VAL *vp, ADDR_T v));
                    240: #if    0
                    241: extern int     nvalue          __((VAL *vp));
                    242: #endif
                    243: extern int     readval         __((VAL *vp, int c));
                    244: extern int     readvar         __((VAL *vp, int c));
                    245: extern long    rvalue          __((VAL *vp, long v));
                    246: extern void    unlex           __((int c));
                    247: extern int     val_segn        __((VAL *vp));
                    248: 
                    249: /* db6.c */
                    250: extern SYM     *findsym        __((int s, ADDR_T addr));
                    251: extern int     hash            __((char *id));
                    252: extern int     is_special      __((SYM *sp));
                    253: extern int     is_symbol       __((SYM *sp));
                    254: extern void    new_sym         __((char *id, ADDR_T addr, int s));
                    255: extern int     read_coff_sym   __((void));
                    256: extern int     read_lout_sym   __((long symseek));
                    257: extern char    *read_strtab    __((void));
                    258: extern char    *symName        __((SYMENT *sym, char *strtab));
                    259: extern int     symval          __((VAL *vp));
                    260: 
                    261: /* db7.c */
                    262: extern void    add_input       __((int type, char *cp));
                    263: #ifndef        NOCANON
                    264: extern void    canon           __((char *bp, unsigned int n));
                    265: #endif
                    266: extern char    *cvt_addr       __((char *buf, int s, ADDR_T addr));
                    267: #ifndef        NOCANON
                    268: extern int     getb            __((int segn, char *bp, unsigned int n));
                    269: #endif
                    270: extern int     getf            __((FILE *fp, char *bp, int n));
                    271: extern void    getline         __((char *cp));
                    272: extern int     getn            __((void));
                    273: extern int     getputb         __((int segn, char *bp, unsigned int n, int d));
                    274: extern char    *nalloc         __((int n, char *msg));
                    275: #if    0
                    276: extern void    nfree           __((char *cp));
                    277: #endif
                    278: extern void    panic           __((char *arg1, ...));
                    279: extern void    printb          __((ADDR_T addr));
                    280: extern int     printe          __((char *msg));
                    281: extern int     printr          __((char *arg1, ...));
                    282: #if    0
                    283: extern void    printx          __((char *arg1, ...));
                    284: #endif
                    285: extern void    putaddr         __((int s, ADDR_T addr));
                    286: #ifndef        NOCANON
                    287: extern int     putb            __((int segn, char *bp, unsigned int n));
                    288: #endif
                    289: extern int     putf            __((FILE *fp, char *bp, int n));
                    290: #if    0
                    291: extern void    putx            __((int c));
                    292: #endif
                    293: #if    0
                    294: extern void    ungetn          __((int c));
                    295: #endif
                    296: 
                    297: /* db8.c */
                    298: extern int     getp            __((int f, ADDR_T a, char *bp, int n));
                    299: extern void    killc           __((void));
                    300: extern int     putp            __((int f, ADDR_T a, char *bp, int n));
                    301: extern int     runc            __((void));
                    302: extern int     startc          __((char **argv, char *ifn, char *ofn, int aflag));
                    303: extern int     waitc           __((void));
                    304: #if    DBPTRACE
                    305: extern int     dbptrace        __((int cmd, int pid, int loc, int val));
                    306: #endif
                    307: 
                    308: /*
                    309:  * Global variables, defined in db0.c.
                    310:  */
                    311: extern ADDR_T  add;                    /* Address used by getb         */
                    312: extern char    *addr_fmt;              /* ADDR_T format for printf     */
                    313: extern int     aop_size;               /* Default address/operand size */
                    314: extern BPT     bpt[NBPT];              /* Breakpoint table             */
                    315: #ifndef        NOCANON
                    316: extern int     cantype;                /* Canonization type            */
                    317: #endif
                    318: extern char    *cfn;                   /* Core file name               */
                    319: extern FILE    *cfp;                   /* Core file pointer            */
                    320: extern FILEHDR coff_hdr;               /* COFF file header             */
                    321: extern int     cseg;                   /* Current segment              */
                    322: extern ADDR_T  dot;                    /* Current address              */
                    323: extern MAP     *endpure;               /* End of pure area             */
                    324: extern int     execflag;               /* Program is in execution      */
                    325: extern int     file_type;              /* LOUT_FILE or COFF_FILE       */
                    326: extern INP     *inpp;                  /* Input pointer                */
                    327: extern int     intflag;                /* Interrupt count              */
                    328: extern char    *lasterr;               /* Last error                   */
                    329: extern struct ldheader ldh;            /* l.out header                 */
                    330: extern char    *lfn;                   /* l.out file name              */
                    331: extern FILE    *lfp;                   /* l.out file pointer           */
                    332: extern char    miscbuf[MISSIZE];       /* Miscellaneous buffer         */
                    333: extern int     modsize;                /* Size of last display mode    */
                    334: extern long    nsyms;                  /* Number of symbols            */
                    335: extern ADDR_T  old_add;                /* Previous address             */
                    336: extern int     pid;                    /* Current process id           */
                    337: extern char    *prompt;                /* Interactive command prompt   */
                    338: extern int     reg_flag;               /* R_INVALID, R_SOME, R_GEN, R_ALL */
                    339: extern int     rflag;                  /* Read only flag               */
                    340: extern char    seg_format[NSEGS][FORSIZE]; /* Segment formats          */
                    341: extern MAP     *seg_map[NSEGS];        /* Segment descriptors          */
                    342: extern char    *seg_name[NSEGS];       /* Segment names                */
                    343: extern int     sflag;                  /* Don't read symbol table      */
                    344: extern FILE    *sfp;                   /* Symbol table file pointer    */
                    345: extern char    *step_cmd;              /* Command for single step      */
                    346: extern int     step_count;             /* Single step count            */
                    347: extern int     step_mode;              /* Single step mode             */
                    348: extern int     step_prev;              /* Last mode run (if single)    */
                    349: extern SYM     *symhash[NHASH];        /* SYM table hash buckets       */
                    350: extern int     ungotc;                 /* Ungot character              */
                    351: 
                    352: /*
                    353:  * Define functions and globals defined in machine-dependent code.
                    354:  * This must follow the type definitions above.
                    355:  */
                    356: #include "mdbdefs.h"
                    357: 
                    358: /*
                    359:  * Functions and variables in /lib/libc.a.
                    360:  */
                    361: extern char    *ctime();
                    362: extern char    *signame[];             /* Signal names                 */
                    363: 
                    364: /* end of db/db.h */

unix.superglobalmegacorp.com

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