|
|
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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.