summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJason Thorpe <thorpej@netbsd.org>2002-05-11 21:22:51 +0000
committerJason Thorpe <thorpej@netbsd.org>2002-05-11 21:22:51 +0000
commit0d2ba81a353ac0366d40c6c3389f29a0769c8bc5 (patch)
tree3f9ada8ef1ad5b7457df0225db7f405a94d42be1 /gdb
parent1929cda9fbdd5f60c846cc707a6963799a67ec27 (diff)
downloadgdb-0d2ba81a353ac0366d40c6c3389f29a0769c8bc5.tar.gz
* i386nbsd-nat.c: Delete file. Move fetch_core_registers and
fetch_elfcore_registers to... * i386nbsd-tdep.c: ...here. (i386nbsd_use_struct_convention): Rename to... (i386nbsd_aout_use_struct_convention): ...this. (i386nbsd_supply_reg): New function. (i386nbsd_fill_reg): New function. (fetch_core_registers): Use i386nbsd_supply_reg. (fetch_elfcore_registers): Likewise. (_initialize_i386nbsd_tdep): New function. * config/i386/nbsd.mh (NATDEPFILES): Remove i386nbsd-nat.o. * config/i386/nbsdelf.mh (NATDEPFILES): Likewise. * config/i386/nbsdelf.mt (TDEPFILES): Add i386nbsd-tdep.o. * config/i386/tm-nbsd.h (i386nbsd_use_struct_convention): Rename to... (i386nbsd_aout_use_struct_convention): ...this.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog18
-rw-r--r--gdb/config/i386/nbsd.mh2
-rw-r--r--gdb/config/i386/nbsdelf.mh2
-rw-r--r--gdb/config/i386/nbsdelf.mt2
-rw-r--r--gdb/config/i386/tm-nbsd.h4
-rw-r--r--gdb/i386nbsd-nat.c132
-rw-r--r--gdb/i386nbsd-tdep.c127
7 files changed, 148 insertions, 139 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1540004997f..03e84a1e883 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,23 @@
2002-05-11 Jason Thorpe <thorpej@wasabisystems.com>
+ * i386nbsd-nat.c: Delete file. Move fetch_core_registers and
+ fetch_elfcore_registers to...
+ * i386nbsd-tdep.c: ...here.
+ (i386nbsd_use_struct_convention): Rename to...
+ (i386nbsd_aout_use_struct_convention): ...this.
+ (i386nbsd_supply_reg): New function.
+ (i386nbsd_fill_reg): New function.
+ (fetch_core_registers): Use i386nbsd_supply_reg.
+ (fetch_elfcore_registers): Likewise.
+ (_initialize_i386nbsd_tdep): New function.
+ * config/i386/nbsd.mh (NATDEPFILES): Remove i386nbsd-nat.o.
+ * config/i386/nbsdelf.mh (NATDEPFILES): Likewise.
+ * config/i386/nbsdelf.mt (TDEPFILES): Add i386nbsd-tdep.o.
+ * config/i386/tm-nbsd.h (i386nbsd_use_struct_convention): Rename to...
+ (i386nbsd_aout_use_struct_convention): ...this.
+
+2002-05-11 Jason Thorpe <thorpej@wasabisystems.com>
+
* shnbsd-nat.c (fetch_inferior_registers): Use shnbsd_supply_reg.
(store_inferior_registers): Use shnbsd_fill_reg.
* shnbsd-tdep.c (sh_nbsd_supply_registers,
diff --git a/gdb/config/i386/nbsd.mh b/gdb/config/i386/nbsd.mh
index fdab53cd739..27ca3ba2db6 100644
--- a/gdb/config/i386/nbsd.mh
+++ b/gdb/config/i386/nbsd.mh
@@ -6,7 +6,7 @@
# continuation character (backslash) to extend a commented line. As a
# consequence, BSD make considers subsequent tab-indented lines to be
# "unassociated shell commands".
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386bsd-nat.o i386nbsd-nat.o solib.o solib-sunos.o
+NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386bsd-nat.o solib.o solib-sunos.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsd.h
diff --git a/gdb/config/i386/nbsdelf.mh b/gdb/config/i386/nbsdelf.mh
index 0dda7d65b54..b536255670a 100644
--- a/gdb/config/i386/nbsdelf.mh
+++ b/gdb/config/i386/nbsdelf.mh
@@ -1,4 +1,4 @@
# Host: Intel 386 running NetBSD
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386bsd-nat.o i386nbsd-nat.o solib.o solib-svr4.o solib-legacy.o
+NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386bsd-nat.o solib.o solib-svr4.o solib-legacy.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsdelf.h
diff --git a/gdb/config/i386/nbsdelf.mt b/gdb/config/i386/nbsdelf.mt
index 1bccd32f4a0..9ae5b0dddd4 100644
--- a/gdb/config/i386/nbsdelf.mt
+++ b/gdb/config/i386/nbsdelf.mt
@@ -1,3 +1,3 @@
# Target: Intel 386 running NetBSD
-TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o
+TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o
TM_FILE= tm-nbsdelf.h
diff --git a/gdb/config/i386/tm-nbsd.h b/gdb/config/i386/tm-nbsd.h
index ff67a5e62ea..8f1295efe6e 100644
--- a/gdb/config/i386/tm-nbsd.h
+++ b/gdb/config/i386/tm-nbsd.h
@@ -27,9 +27,9 @@
#include "i386/tm-i386.h"
#include "config/tm-nbsd.h"
-extern use_struct_convention_fn i386nbsd_use_struct_convention;
+extern use_struct_convention_fn i386nbsd_aout_use_struct_convention;
#define USE_STRUCT_CONVENTION(gcc_p, type) \
- i386nbsd_use_struct_convention(gcc_p, type)
+ i386nbsd_aout_use_struct_convention(gcc_p, type)
#define JB_ELEMENT_SIZE sizeof(int) /* jmp_buf[_JBLEN] is array of ints */
diff --git a/gdb/i386nbsd-nat.c b/gdb/i386nbsd-nat.c
deleted file mode 100644
index f8934cc24a7..00000000000
--- a/gdb/i386nbsd-nat.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Native-dependent code for NetBSD/i386, for GDB.
- Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001, 2002
- Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "defs.h"
-#include <sys/types.h>
-#include <sys/ptrace.h>
-#include <machine/reg.h>
-#include <machine/frame.h>
-#include "inferior.h"
-#include "gdbcore.h"
-#include "regcache.h"
-
-#ifndef HAVE_GREGSET_T
-typedef struct reg gregset_t;
-#endif
-
-#ifndef HAVE_FPREGSET_T
-typedef struct fpreg fpregset_t;
-#endif
-
-#include "gregset.h"
-
-/* Prototypes for i387_supply_fsave etc. */
-#include "i387-tdep.h"
-
-struct md_core
-{
- struct reg intreg;
- char freg[108];
-};
-
-static void
-fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
- CORE_ADDR ignore)
-{
- struct md_core *core_reg = (struct md_core *) core_reg_sect;
-
- /* We get everything from one section. */
- if (which != 0)
- return;
-
- /* Integer registers. */
- supply_gregset (&core_reg->intreg);
-
- /* Floating point registers. */
- i387_supply_fsave (core_reg->freg);
-}
-
-static void
-fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size, int which,
- CORE_ADDR ignore)
-{
- gregset_t gregset;
-
- switch (which)
- {
- case 0: /* Integer registers. */
- if (core_reg_size != sizeof (struct reg))
- warning ("Wrong size register set in core file.");
- else
- {
- memcpy (&gregset, core_reg_sect, sizeof (gregset));
- supply_gregset (&gregset);
- }
- break;
-
- case 2: /* Floating point registers. */
- if (core_reg_size != 108)
- warning ("Wrong size FP register set in core file.");
- else
- i387_supply_fsave (core_reg_sect);
- break;
-
- case 3: /* "Extended" floating point registers. This is gdb-speak
- for SSE/SSE2. */
- if (core_reg_size != 512)
- warning ("Wrong size XMM register set in core file.");
- else
- i387_supply_fxsave (core_reg_sect);
- break;
-
- default:
- /* Don't know what kind of register request this is; just ignore it. */
- break;
- }
-}
-
-/* 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 */
-};
-
-static struct core_fns i386nbsd_elfcore_fns =
-{
- bfd_target_elf_flavour, /* core_flavour */
- default_check_format, /* check_format */
- default_core_sniffer, /* core_sniffer */
- fetch_elfcore_registers, /* core_read_registers */
- NULL /* next */
-};
-
-void
-_initialize_i386nbsd_nat (void)
-{
- add_core_fns (&i386nbsd_core_fns);
- add_core_fns (&i386nbsd_elfcore_fns);
-}
diff --git a/gdb/i386nbsd-tdep.c b/gdb/i386nbsd-tdep.c
index 7174d4d433e..02ba77c7be9 100644
--- a/gdb/i386nbsd-tdep.c
+++ b/gdb/i386nbsd-tdep.c
@@ -1,5 +1,5 @@
/* Target-dependent code for NetBSD/i386, for GDB.
- Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001
+ Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of GDB.
@@ -21,12 +21,135 @@
#include "defs.h"
#include "gdbtypes.h"
+#include "gdbcore.h"
+#include "regcache.h"
+#include "i387-tdep.h"
+
+/* Map a GDB register number to an offset in the reg structure. */
+static int regmap[] =
+{
+ ( 0 * 4), /* %eax */
+ ( 1 * 4), /* %ecx */
+ ( 2 * 4), /* %edx */
+ ( 3 * 4), /* %ebx */
+ ( 4 * 4), /* %esp */
+ ( 5 * 4), /* %epb */
+ ( 6 * 4), /* %esi */
+ ( 7 * 4), /* %edi */
+ ( 8 * 4), /* %eip */
+ ( 9 * 4), /* %eflags */
+ (10 * 4), /* %cs */
+ (11 * 4), /* %ss */
+ (12 * 4), /* %ds */
+ (13 * 4), /* %es */
+ (14 * 4), /* %fs */
+ (15 * 4), /* %gs */
+};
+
+#define SIZEOF_STRUCT_REG (16 * 4)
+
+static void
+i386nbsd_supply_reg (char *regs, int regno)
+{
+ int i;
+
+ for (i = 0; i <= 15; i++)
+ if (regno == i || regno == -1)
+ supply_register (i, regs + regmap[i]);
+}
+
+static void
+fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
+ CORE_ADDR ignore)
+{
+ char *regs, *fsave;
+
+ /* We get everything from one section. */
+ if (which != 0)
+ return;
+
+ if (core_reg_size < (SIZEOF_STRUCT_REG + 108))
+ {
+ warning ("Wrong size register set in core file.");
+ return;
+ }
+
+ regs = core_reg_sect;
+ fsave = core_reg_sect + SIZEOF_STRUCT_REG;
+
+ /* Integer registers. */
+ i386nbsd_supply_reg (regs, -1);
+
+ /* Floating point registers. */
+ i387_supply_fsave (fsave);
+}
+
+static void
+fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size, int which,
+ CORE_ADDR ignore)
+{
+ switch (which)
+ {
+ case 0: /* Integer registers. */
+ if (core_reg_size != SIZEOF_STRUCT_REG)
+ warning ("Wrong size register set in core file.");
+ else
+ i386nbsd_supply_reg (core_reg_sect, -1);
+ break;
+
+ case 2: /* Floating point registers. */
+ if (core_reg_size != 108)
+ warning ("Wrong size FP register set in core file.");
+ else
+ i387_supply_fsave (core_reg_sect);
+ break;
+
+ case 3: /* "Extended" floating point registers. This is gdb-speak
+ for SSE/SSE2. */
+ if (core_reg_size != 512)
+ warning ("Wrong size XMM register set in core file.");
+ else
+ i387_supply_fxsave (core_reg_sect);
+ break;
+
+ default:
+ /* Don't know what kind of register request this is; just ignore it. */
+ break;
+ }
+}
+
+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 */
+};
+
+static struct core_fns i386nbsd_elfcore_fns =
+{
+ bfd_target_elf_flavour, /* core_flavour */
+ default_check_format, /* check_format */
+ default_core_sniffer, /* core_sniffer */
+ fetch_elfcore_registers, /* core_read_registers */
+ NULL /* next */
+};
+
+/* FIXME: should be multi-arch'd */
int
-i386nbsd_use_struct_convention (int gcc_p, struct type *type)
+i386nbsd_aout_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);
}
+
+void
+_initialize_i386nbsd_tdep (void)
+{
+ add_core_fns (&i386nbsd_core_fns);
+ add_core_fns (&i386nbsd_elfcore_fns);
+}