* 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.
This commit is contained in:
Jason Thorpe 2002-05-11 21:22:51 +00:00
parent 6360824b6e
commit dfe6eb1f71
7 changed files with 148 additions and 139 deletions

View File

@ -1,3 +1,21 @@
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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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);
}

View File

@ -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);
}