* nlm/i386.c, nlm/i386.h: New files that contain i386 specific code.
authorJ.T. Conklin <jtc@acorntoolworks.com>
Fri, 19 Aug 1994 00:06:47 +0000 (00:06 +0000)
committerJ.T. Conklin <jtc@acorntoolworks.com>
Fri, 19 Aug 1994 00:06:47 +0000 (00:06 +0000)
gdb/ChangeLog
gdb/nlm/i386.c [new file with mode: 0644]
gdb/nlm/i386.h [new file with mode: 0644]

index 9325d410a63fdef88c112a4c4fbe78080ea65638..c099f95c5c34164227faf8c7675f0d49e7677338 100644 (file)
@@ -1,3 +1,7 @@
+Thu Aug 18 17:01:35 1994  J.T. Conklin  (jtc@rtl.cygnus.com)
+
+       * nlm/i386.c, nlm/i386.h: New files that contain i386 specific code.
+
 Thu Aug 18 14:39:46 1994  Stan Shebs  (shebs@andros.cygnus.com)
 
        * README: Grammar improvements, clarifications, updates.
diff --git a/gdb/nlm/i386.c b/gdb/nlm/i386.c
new file mode 100644 (file)
index 0000000..68132ce
--- /dev/null
@@ -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, &regs[0 * 4 * 2], 4 * 8, 0);
+
+  /* Copy EIP & PS */
+  mem2hex (&frame->ExceptionPC, &regs[8 * 4 * 2], 4 * 2, 0);
+
+  /* Copy CS, SS, DS */
+  mem2hex (&frame->ExceptionCS, &regs[10 * 4 * 2], 4 * 3, 0);
+
+  /* Copy ES */
+  mem2hex (&frame->ExceptionES, &regs[13 * 4 * 2], 4 * 1, 0);
+
+  /* Copy FS & GS */
+  mem2hex (&frame->ExceptionFS, &regs[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 (&regs[0 * 4 * 2], &frame->ExceptionEAX, 4 * 8, 0);
+
+  /* Copy EIP & PS */
+  hex2mem (&regs[8 * 4 * 2], &frame->ExceptionPC, 4 * 2, 0);
+
+  /* Copy CS, SS, DS */
+  hex2mem (&regs[10 * 4 * 2], &frame->ExceptionCS, 4 * 3, 0);
+
+  /* Copy ES */
+  hex2mem (&regs[13 * 4 * 2], &frame->ExceptionES, 4 * 1, 0);
+
+  /* Copy FS & GS */
+  hex2mem (&regs[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 (file)
index 0000000..155702b
--- /dev/null
@@ -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