* irix4-nat.c (fetch_core_registers): Special version of this for

Irix 4.x, which stores regs a bit differently from other /proc
	based systems.
	* procfs.c, core-svr4.c:  Move fetch_core_registers from procfs.c
	to new file core-svr4.c.
	* config/i386/i386sol2.mh, config/i386/i386v4.mh, config/m68k/amix.mh,
	config/i386/ncr3000.mh, config/sparc/sun4sol2.mh:  Add core-svr4.o
	to NATDEPFILES.
	* config/mips/irix4.mh:  Add corelow.o to NATDEPFILES.
This commit is contained in:
Stu Grossman 1993-04-20 06:01:56 +00:00
parent 0f213cc206
commit 9583b29548
7 changed files with 141 additions and 64 deletions

View File

@ -1,3 +1,15 @@
Mon Apr 19 22:52:33 1993 Stu Grossman (grossman@cygnus.com)
* irix4-nat.c (fetch_core_registers): Special version of this for
Irix 4.x, which stores regs a bit differently from other /proc
based systems.
* procfs.c, core-svr4.c: Move fetch_core_registers from procfs.c
to new file core-svr4.c.
* config/i386/i386sol2.mh, config/i386/i386v4.mh, config/m68k/amix.mh,
config/i386/ncr3000.mh, config/sparc/sun4sol2.mh: Add core-svr4.o
to NATDEPFILES.
* config/mips/irix4.mh: Add corelow.o to NATDEPFILES.
Mon Apr 19 11:13:34 1993 Jim Kingdon (kingdon@cygnus.com)
* i387-tdep.c: Remove unused #includes.

View File

@ -1,6 +1,6 @@
# Host: Commodore Amiga running SVR4.
NAT_FILE= nm-sysv4.h
NATDEPFILES= corelow.o procfs.o fork-child.o
NATDEPFILES= corelow.o core-svr4.o procfs.o fork-child.o
XDEPFILES=
XM_FILE= xm-amix.h
SYSV_DEFINE=-DSYSV

View File

@ -2,7 +2,7 @@
XDEPFILES=
XM_FILE= xm-irix4.h
NAT_FILE= nm-irix4.h
NATDEPFILES= fork-child.o procfs.o irix4-nat.o
NATDEPFILES= fork-child.o procfs.o irix4-nat.o corelow.o
ALLOCA=alloca.o
ALLOCA1=alloca.o
MUNCH_DEFINE=-B

View File

@ -2,7 +2,7 @@
XDEPFILES=
XM_FILE= xm-sun4sol2.h
NAT_FILE= nm-sysv4.h
NATDEPFILES= corelow.o exec.o solib.o procfs.o fork-child.o
NATDEPFILES= corelow.o core-svr4.o exec.o solib.o procfs.o fork-child.o
SYSV_DEFINE=-DSYSV
REGEX=regex.o
REGEX1=regex.o

109
gdb/core-svr4.c Normal file
View File

@ -0,0 +1,109 @@
/* Machine independent support for SVR4 core files for GDB.
Copyright 1993 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* N O T E S
This version of fetch_core_registers() is used by most systems that
implement /proc. For these systems, the general registers are laid out
the same way in both the core file and the gregset_p structure. The
current exception to this is Irix-4.*, where the gregset_p structure is
split up into two pieces in the core file.
The general register and floating point register sets are manipulated by
separate ioctl's. This file makes the assumption that if FP0_REGNUM is
defined, then support for the floating point register set is desired,
regardless of whether or not the actual target has floating point hardware.
*/
#include "defs.h"
#include <time.h>
#include <sys/procfs.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include "inferior.h"
#include "target.h"
#include "command.h"
#include "gdbcore.h"
/*
GLOBAL FUNCTION
fetch_core_registers -- fetch current registers from core file data
SYNOPSIS
void fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
int which, unsigned in reg_addr)
DESCRIPTION
Read the values of either the general register set (WHICH equals 0)
or the floating point register set (WHICH equals 2) from the core
file data (pointed to by CORE_REG_SECT), and update gdb's idea of
their current values. The CORE_REG_SIZE parameter is ignored.
NOTES
Use the indicated sizes to validate the gregset and fpregset
structures.
*/
void
fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
char *core_reg_sect;
unsigned core_reg_size;
int which;
unsigned int reg_addr; /* Unused in this version */
{
gregset_t gregset;
fpregset_t fpregset;
if (which == 0)
{
if (core_reg_size != sizeof (gregset))
{
warning ("wrong size gregset struct in core file");
}
else
{
memcpy ((char *) &gregset, core_reg_sect, sizeof (gregset));
supply_gregset (&gregset);
}
}
else if (which == 2)
{
if (core_reg_size != sizeof (fpregset))
{
warning ("wrong size fpregset struct in core file");
}
else
{
memcpy ((char *) &fpregset, core_reg_sect, sizeof (fpregset));
#if defined (FP0_REGNUM)
supply_fpregset (&fpregset);
#endif
}
}
}

View File

@ -1,5 +1,5 @@
/* Native support for the SGI Iris running IRIX version 4, for GDB.
Copyright 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
Copyright 1988, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
Implemented for Irix 4.x by Garrett A. Wollman.
@ -148,3 +148,19 @@ get_longjmp_target(pc)
return 1;
}
void
fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
char *core_reg_sect;
unsigned core_reg_size;
int which; /* Unused */
unsigned int reg_addr; /* Unused */
{
if (core_reg_size != REGISTER_BYTES)
{
warning ("wrong size gregset struct in core file");
return;
}
memcpy ((char *)registers, core_reg_sect, core_reg_size);
}

View File

@ -2260,66 +2260,6 @@ procfs_fetch_registers (regno)
/*
GLOBAL FUNCTION
fetch_core_registers -- fetch current registers from core file data
SYNOPSIS
void fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
int which, unsigned in reg_addr)
DESCRIPTION
Read the values of either the general register set (WHICH equals 0)
or the floating point register set (WHICH equals 2) from the core
file data (pointed to by CORE_REG_SECT), and update gdb's idea of
their current values. The CORE_REG_SIZE parameter is ignored.
NOTES
Use the indicated sizes to validate the gregset and fpregset
structures.
*/
void
fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
char *core_reg_sect;
unsigned core_reg_size;
int which;
unsigned int reg_addr; /* Unused in this version */
{
if (which == 0)
{
if (core_reg_size != sizeof (pi.gregset))
{
warning ("wrong size gregset struct in core file");
}
else
{
memcpy ((char *) &pi.gregset, core_reg_sect, sizeof (pi.gregset));
supply_gregset (&pi.gregset);
}
}
else if (which == 2)
{
if (core_reg_size != sizeof (pi.fpregset))
{
warning ("wrong size fpregset struct in core file");
}
else
{
memcpy ((char *) &pi.fpregset, core_reg_sect, sizeof (pi.fpregset));
#if defined (FP0_REGNUM)
supply_fpregset (&pi.fpregset);
#endif
}
}
}
/*
LOCAL FUNCTION
proc_init_failed - called whenever /proc access initialization fails