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

1.1       root        1: /*
                      2:  * db/i386/i386db.h
                      3:  * A debugger.
                      4:  * i386-specific header file.
                      5:  * i386/mdb.h contains definitions used by machine-independent code.
                      6:  * i386/mdbdefs.h defines externals referenced by machine-independent code.
                      7:  * i386/i386db.h contains definitions used only by machine-dependent code.
                      8:  */
                      9: 
                     10: #include "db.h"
                     11: 
                     12: /* Macros. */
                     13: #define        rup(x)  (((x) + 0xF) & ~0xF)    /* round up to 16-byte boundary */
                     14: #define        get_code(nbytes) getb(segn, ibp, (nbytes))
                     15: 
                     16: /*
                     17:  * Registers from the user area after a core dump.
                     18:  * get_regs() reads data to one of these with one getb() call for :r,
                     19:  * so the members must correspond to the offsets in <sys/ptrace.h>.
                     20:  */
                     21: typedef        struct  ureg    {
                     22:        ADDR_T  ur_gs;
                     23:        ADDR_T  ur_fs;
                     24:        ADDR_T  ur_es;
                     25:        ADDR_T  ur_ds;
                     26:        ADDR_T  ur_di;
                     27:        ADDR_T  ur_si;
                     28:        ADDR_T  ur_bp;
                     29:        ADDR_T  ur_fill;                /* sp */
                     30:        ADDR_T  ur_bx;
                     31:        ADDR_T  ur_dx;
                     32:        ADDR_T  ur_cx;
                     33:        ADDR_T  ur_ax;
                     34:        ADDR_T  ur_trapno;
                     35:        ADDR_T  ur_err;
                     36:        ADDR_T  ur_ip;
                     37:        ADDR_T  ur_cs;
                     38:        ADDR_T  ur_fw;                  /* efl */
                     39:        ADDR_T  ur_sp;                  /* uesp */
                     40:        ADDR_T  ur_ss;
                     41:        ADDR_T  ur_sig;
                     42:        struct  _fpstate ur_fpstate;
                     43: } UREG;
                     44: #define        UREG_BASE       PTRACE_GS       /* pseudo-offset of ureg base for ptrace() */
                     45: #define        UREG_GEN_SIZE   (sizeof(UREG)-sizeof(struct _fpstate))
                     46: #define        UREG_ALL_SIZE   (sizeof(UREG))
                     47: 
                     48: /*
                     49:  * Register names and corresponding ptrace() offsets.
                     50:  * The flags are used in printing the register info for :r.
                     51:  */
                     52: typedef        struct  regname {
                     53:        int     r_flag;
                     54:        char    *r_name;
                     55:        int     r_offset;
                     56: } REGNAME;
                     57: #define        NGREGS  16              /* number of general registers */
                     58: #define        NREGS   24              /* total number of registers */
                     59: #define        RF_16   1               /* 16-bit value */
                     60: #define        RF_1632 2               /* 16- or 32-bit value */
                     61: #define        RF_NDP  3               /* NDP register */
                     62: 
                     63: /*
                     64:  * NDP miscellaneous opcode table.
                     65:  */
                     66: typedef        struct  ndpmtab {
                     67:        int     ndpm_val;               /* 2-byte value */
                     68:        char    *ndpm_op;               /* name */
                     69: } NDPMTAB;
                     70: 
                     71: /*
                     72:  * i386 opcodes.
                     73:  * Most are needed for the code which plants return breakpoints and
                     74:  * prints tracebacks.
                     75:  */
                     76: #define        ADDSP1  0x83                    /* add %esp, $imm byte 1        */
                     77: #define        ADDSP2  0xC4                    /* add %esp, $imm byte 2        */
                     78: #define        CALL    0xE8                    /* call                         */
                     79: #define        ENTER   0xC8                    /* enter                        */
                     80: #define        ICALL1  0xFF                    /* icall byte 1                 */
                     81: #define        IC2MSK  0x38                    /* icall byte 2 mask (reg)      */
                     82: #define        ICALL2  0x10                    /* icall byte 2 (masked)        */
                     83: #define        INT     0xCD                    /* int (COH286 syscall)         */
                     84: #define        LCALL   0x9A                    /* lcall (COH386 syscall)       */
                     85: #define        LEAVE   0xC9                    /* leave                        */
                     86: #define        POPECX  0x59                    /* pop %ecx                     */
                     87: #define        PUSHEBP 0x55                    /* push %ebp                    */
                     88: #define        PUSHESI 0x56                    /* push %esi                    */
                     89: #define        TRAP    0xCC                    /* int 3                        */
                     90: 
                     91: /*
                     92:  * Functions.
                     93:  * i386/mdbdefs.h defines additional routines
                     94:  * which are referenced by machine-independent code.
                     95:  */
                     96: /* i386db1.c */
                     97: extern int     get_fp_reg      __((struct _fpreg *fpregp, double *dp));
                     98: extern int     get_sized       __((int s, ADDR_T *lp));
                     99: extern ADDR_T  get_sp          __((void));
                    100: 
                    101: /* i386db2.c */
                    102: extern int     ad_size         __((void));
                    103: extern int     adj_op_size     __((int c2));
                    104: extern char    *format         __((char *isp, char *dest));
                    105: extern int     genRegIndex     __((int c2));
                    106: #if    0
                    107: extern int     get_code        __((int nbytes));
                    108: #endif
                    109: extern int     get_modRM       __((void));
                    110: extern int     get_nbytes      __((int mysize));
                    111: extern int     get_sib         __((void));
                    112: extern int     getValData      __((int is_signed, int mysize));
                    113: extern ADDR_T  get_value       __((int mysize, int is_signed, int flag));
                    114: extern int     op_size         __((void));
                    115: extern void    out_addr        __((ADDR_T v));
                    116: extern void    out_disp        __((int fmt, int is_signed, ADDR_T val));
                    117: extern void    out_modRM       __((int dispsize, int fmt, int addrsize, int is_signed));
                    118: extern void    out_modRM16     __((int c2));
                    119: extern void    out_modRM32     __((int c2));
                    120: extern void    output          __((char *src));
                    121: extern void    out_segpre      __((void));
                    122: extern void    out_sib         __((int dispsize, int m));
                    123: 
                    124: /*
                    125:  * Global symbols.
                    126:  * i386/mdbdefs.h defines additional globals
                    127:  * which are referenced by machine-independent code.
                    128:  */
                    129: /* i386db0.c */
                    130: extern int     NDP_flag;               /* NDP instructions are usable  */
                    131: extern ADDR_T  sys_add;                /* Address of op after syscall  */
                    132: extern BIN     sys_in;                 /* Instruction after sys call   */
                    133: extern UREG    ureg;                   /* Child program registers      */
                    134: 
                    135: /*
                    136:  * Tables.
                    137:  */
                    138: /* i386db0.c */
                    139: extern char    *formtab[4][4];         /* Formats                      */
                    140: extern REGNAME reg_name[];             /* Register names               */
                    141: #if    0
                    142: extern char    *sysitab[];             /* System calls                 */
                    143: #endif
                    144: /* i386db3.c */
                    145: extern char    *op_map_1[];            /* Instruction map 1            */
                    146: extern char    *op_map_2[];            /* Instruction map 2            */
                    147: extern char    *grp_map[9][8];         /* Instruction groups           */
                    148: extern char    *NDP_op[8][8];          /* NDP opcode table m!=3        */
                    149: extern char    *NDP_op_3[8][8];        /* NDP opcode table m==3        */
                    150: extern NDPMTAB NDP_misc_op[];          /* NDP misc opcode table m==3   */
                    151: extern char    *segReg[];              /* Segment registers            */
                    152: extern char    *genReg[3][8];          /* General registers            */
                    153: extern char    *ctrlReg[];             /* Control registers            */
                    154: extern char    *dbgReg[];              /* Debug registers              */
                    155: extern char    *tstReg[];              /* Test registers               */
                    156: extern char    *NDPReg[];              /* NDP registers                */
                    157: extern char    *modRMtab[2][8];        /* modR/M indirect addressing   */
                    158: extern char    *sibtab[4][8];          /* SIB indexed addressing       */
                    159: 
                    160: /* end of db/i386/i386db.h */

unix.superglobalmegacorp.com

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