Annotation of coherent/b/bin/db/db.h, revision 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.