aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ.T. Conklin <jtc@acorntoolworks.com>2000-03-24 23:06:57 +0000
committerJ.T. Conklin <jtc@acorntoolworks.com>2000-03-24 23:06:57 +0000
commit76a22209881eadfdaaa655a2b31ca1ab1c1869da (patch)
tree7c58d6756f0d0d0fca1ecf15564c1958918fe565
parentc1790a9d97bbf05879cca1e5cfaa9e151927375e (diff)
downloadgdb-76a22209881eadfdaaa655a2b31ca1ab1c1869da.zip
gdb-76a22209881eadfdaaa655a2b31ca1ab1c1869da.tar.gz
gdb-76a22209881eadfdaaa655a2b31ca1ab1c1869da.tar.bz2
2000-03-24 J.T. Conklin <jtc@redback.com>
* i386/tm-nbsd.h (USE_STRUCT_CONVENTION): Define. * i386nbsd-nat.c (i386nbsd_use_struct_convention): New function. (fetch_core_registers): Read fp registers. (i386nbsd_core_fns, _initialize_i386nbsd_nat): Added.
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/config/i386/tm-nbsd.h5
-rw-r--r--gdb/i386nbsd-nat.c52
3 files changed, 61 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2e8b4ca..65f6e2c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2000-03-24 J.T. Conklin <jtc@redback.com>
+
+ * i386/tm-nbsd.h (USE_STRUCT_CONVENTION): Define.
+ * i386nbsd-nat.c (i386nbsd_use_struct_convention): New function.
+ (fetch_core_registers): Read fp registers.
+ (i386nbsd_core_fns, _initialize_i386nbsd_nat): Added.
+
2000-03-24 Jonathan Larmour <jlarmour@redhat.co.uk>
* arm-tdep.c (thumb_skip_prologue): Take function end addr argument
diff --git a/gdb/config/i386/tm-nbsd.h b/gdb/config/i386/tm-nbsd.h
index 3be47b0..66002ed 100644
--- a/gdb/config/i386/tm-nbsd.h
+++ b/gdb/config/i386/tm-nbsd.h
@@ -26,6 +26,11 @@
#include "i386/tm-i386bsd.h"
#include "tm-nbsd.h"
+extern use_struct_convention_fn i386nbsd_use_struct_convention;
+#define USE_STRUCT_CONVENTION(gcc_p, type) \
+ i386nbsd_use_struct_convention(gcc_p, type)
+
+
#define JB_ELEMENT_SIZE sizeof(int) /* jmp_buf[_JBLEN] is array of ints */
#define JB_PC 0 /* Setjmp()'s return PC saved here */
diff --git a/gdb/i386nbsd-nat.c b/gdb/i386nbsd-nat.c
index 76a75ae..5c5a1f3 100644
--- a/gdb/i386nbsd-nat.c
+++ b/gdb/i386nbsd-nat.c
@@ -148,11 +148,20 @@ store_inferior_registers (regno)
ptrace (PT_SETFPREGS, inferior_pid,
(PTRACE_ARG3_TYPE) &inferior_fpregisters, 0);
}
-
+
+int
+i386nbsd_use_struct_convention (int gcc_p, struct type *type)
+{
+ return !(TYPE_LENGTH (type) == 1
+ || TYPE_LENGTH (type) == 2
+ || TYPE_LENGTH (type) == 4
+ || TYPE_LENGTH (type) == 8);
+}
+
struct md_core
{
struct reg intreg;
- struct fpreg freg;
+ struct env387 freg;
};
void
@@ -167,6 +176,43 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, ignore)
/* integer registers */
memcpy (&registers[REGISTER_BYTE (0)], &core_reg->intreg,
sizeof (struct reg));
+
/* floating point registers */
- /* XXX */
+ RF (FP0_REGNUM, core_reg->freg.regs[0]);
+ RF (FP0_REGNUM + 1, core_reg->freg.regs[1]);
+ RF (FP0_REGNUM + 2, core_reg->freg.regs[2]);
+ RF (FP0_REGNUM + 3, core_reg->freg.regs[3]);
+ RF (FP0_REGNUM + 4, core_reg->freg.regs[4]);
+ RF (FP0_REGNUM + 5, core_reg->freg.regs[5]);
+ RF (FP0_REGNUM + 6, core_reg->freg.regs[6]);
+ RF (FP0_REGNUM + 7, core_reg->freg.regs[7]);
+
+ RF (FCTRL_REGNUM, core_reg->freg.control);
+ RF (FSTAT_REGNUM, core_reg->freg.status);
+ RF (FTAG_REGNUM, core_reg->freg.tag);
+ RF (FCS_REGNUM, core_reg->freg.code_seg);
+ RF (FCOFF_REGNUM, core_reg->freg.eip);
+ RF (FDS_REGNUM, core_reg->freg.operand_seg);
+ RF (FDOFF_REGNUM, core_reg->freg.operand);
+ RF (FOP_REGNUM, core_reg->freg.opcode);
+
+ registers_fetched ();
+}
+
+/* Register that we are able to handle i386nbsd core file formats.
+ FIXME: is this really bfd_target_unknown_flavour? */
+
+static struct core_fns i386nbsd_core_fns =
+{
+ bfd_target_unknown_flavour, /* core_flavour */
+ default_check_format, /* check_format */
+ default_core_sniffer, /* core_sniffer */
+ fetch_core_registers, /* core_read_registers */
+ NULL /* next */
+};
+
+void
+_initialize_i386nbsd_nat ()
+{
+ add_core_fns (&i386nbsd_core_fns);
}