diff options
author | J.T. Conklin <jtc@acorntoolworks.com> | 1994-08-19 00:06:47 +0000 |
---|---|---|
committer | J.T. Conklin <jtc@acorntoolworks.com> | 1994-08-19 00:06:47 +0000 |
commit | ef4b379aabdb863aa520a9d66ec4d823e918ab1f (patch) | |
tree | e750a228afb13a5fffb66603ce28bca5b800968a /gdb/nlm | |
parent | f4945271925a907e49f0d0a0b2ef8a9eab3998a2 (diff) | |
download | gdb-ef4b379aabdb863aa520a9d66ec4d823e918ab1f.zip gdb-ef4b379aabdb863aa520a9d66ec4d823e918ab1f.tar.gz gdb-ef4b379aabdb863aa520a9d66ec4d823e918ab1f.tar.bz2 |
* nlm/i386.c, nlm/i386.h: New files that contain i386 specific code.
Diffstat (limited to 'gdb/nlm')
-rw-r--r-- | gdb/nlm/i386.c | 88 | ||||
-rw-r--r-- | gdb/nlm/i386.h | 13 |
2 files changed, 101 insertions, 0 deletions
diff --git a/gdb/nlm/i386.c b/gdb/nlm/i386.c new file mode 100644 index 0000000..68132ce --- /dev/null +++ b/gdb/nlm/i386.c @@ -0,0 +1,88 @@ +#include "i386.h" + +/* Get the registers out of the frame information. */ + +static void +frame_to_registers (frame, regs) + struct StackFrame *frame; + char *regs; +{ + /* Copy EAX -> EDI */ + mem2hex (&frame->ExceptionEAX, ®s[0 * 4 * 2], 4 * 8, 0); + + /* Copy EIP & PS */ + mem2hex (&frame->ExceptionPC, ®s[8 * 4 * 2], 4 * 2, 0); + + /* Copy CS, SS, DS */ + mem2hex (&frame->ExceptionCS, ®s[10 * 4 * 2], 4 * 3, 0); + + /* Copy ES */ + mem2hex (&frame->ExceptionES, ®s[13 * 4 * 2], 4 * 1, 0); + + /* Copy FS & GS */ + mem2hex (&frame->ExceptionFS, ®s[14 * 4 * 2], 4 * 2, 0); +} + +/* Put the registers back into the frame information. */ + +static void +registers_to_frame (regs, frame) + char *regs; + struct StackFrame *frame; +{ + /* Copy EAX -> EDI */ + hex2mem (®s[0 * 4 * 2], &frame->ExceptionEAX, 4 * 8, 0); + + /* Copy EIP & PS */ + hex2mem (®s[8 * 4 * 2], &frame->ExceptionPC, 4 * 2, 0); + + /* Copy CS, SS, DS */ + hex2mem (®s[10 * 4 * 2], &frame->ExceptionCS, 4 * 3, 0); + + /* Copy ES */ + hex2mem (®s[13 * 4 * 2], &frame->ExceptionES, 4 * 1, 0); + + /* Copy FS & GS */ + hex2mem (®s[14 * 4 * 2], &frame->ExceptionFS, 4 * 2, 0); +} + +static void +set_step_traps (frame) + struct StackFrame *frame; +{ + frame->ExceptionSystemFlags |= 0x100; +} + +static void +clear_step_traps (frame) + struct StackFrame *frame; +{ + frame->ExceptionSystemFlags &= ~0x100; +} + +static void +do_status (ptr, frame) + char *ptr; + struct StackFrame *frame; +{ + int sigval; + + sigval = computeSignal (frame->ExceptionNumber); + + sprintf (ptr, "T%02x", sigval); + ptr += 3; + + sprintf (ptr, "%02x:", PC_REGNUM); + ptr = mem2hex (&frame->ExceptionPC, ptr + 3, 4, 0); + *ptr++ = ';'; + + sprintf (ptr, "%02x:", SP_REGNUM); + ptr = mem2hex (&frame->ExceptionESP, ptr + 3, 4, 0); + *ptr++ = ';'; + + sprintf (ptr, "%02x:", FP_REGNUM); + ptr = mem2hex (&frame->ExceptionEBP, ptr + 3, 4, 0); + *ptr++ = ';'; + + *ptr = '\000'; +} diff --git a/gdb/nlm/i386.h b/gdb/nlm/i386.h new file mode 100644 index 0000000..155702b --- /dev/null +++ b/gdb/nlm/i386.h @@ -0,0 +1,13 @@ +/* Register values. All of these values *MUST* agree with tm.h */ +#define SP_REGNUM 4 /* Contains address of top of stack */ +#define PC_REGNUM 8 /* Contains program counter */ +#define FP_REGNUM 5 /* Virtual frame pointer */ +#define NUM_REGS 16 /* Number of machine registers */ +#define REGISTER_BYTES (NUM_REGS * 4) /* Total size of registers array */ + +#define ExceptionPC ExceptionEIP +#define DECR_PC_AFTER_BREAK 1 /* int 3 leaves PC pointing after insn */ +#define BREAKPOINT {0xcc} +#define BREAKPOINT_SIZE (sizeof breakpoint_insn) + +#define StackFrame T_TSS_StackFrame |