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