From dfe6eb1f71f73f4652754600136cdd2dcd9cacbc Mon Sep 17 00:00:00 2001 From: Jason Thorpe Date: Sat, 11 May 2002 21:22:51 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 18 +++++ gdb/config/i386/nbsd.mh | 2 +- gdb/config/i386/nbsdelf.mh | 2 +- gdb/config/i386/nbsdelf.mt | 2 +- gdb/config/i386/tm-nbsd.h | 4 +- gdb/i386nbsd-nat.c | 132 ------------------------------------- gdb/i386nbsd-tdep.c | 127 ++++++++++++++++++++++++++++++++++- 7 files changed, 148 insertions(+), 139 deletions(-) delete mode 100644 gdb/i386nbsd-nat.c diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1540004997f..03e84a1e883 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2002-05-11 Jason Thorpe + + * 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 * shnbsd-nat.c (fetch_inferior_registers): Use shnbsd_supply_reg. 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 -#include -#include -#include -#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); +} -- 2.30.2