mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
Native support cleanup and corefile fixes for i386 SVR4 systems.
* i386-tdep.c (supply_gregset, fill_gregset, supply_fpregset, fill_fpregset): Moved to i386v4-nat.c * i386v4-nat.c, nm-i386v4.h, : New files. * i386sol2.mh, i386v4.mh, ncr3000.mh (NAT_FILE): Use nm-i386v4.h. * i386sol2.mh, i386v4.mh, ncr3000.mh (NATDEPFILES): Add corelow.o, change i386v-nat.o to i386v4-nat.o.
This commit is contained in:
parent
c36989aa95
commit
4d0eabff25
@ -108,6 +108,7 @@ i386-tdep.c
|
||||
i386b-nat.c
|
||||
i386mach-nat.c
|
||||
i386v-nat.c
|
||||
i386v4-nat.c
|
||||
i387-tdep.c
|
||||
i960-pinsn.c
|
||||
i960-tdep.c
|
||||
@ -147,6 +148,7 @@ nm-delta88.h
|
||||
nm-i386bsd.h
|
||||
nm-i386mach.h
|
||||
nm-i386v.h
|
||||
nm-i386v4.h
|
||||
nm-irix3.h
|
||||
nm-irix4.h
|
||||
nm-linux.h
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Oct 17 00:59:23 1992 Fred Fish (fnf@cygnus.com)
|
||||
|
||||
Native support cleanup and corefile fixes for i386 SVR4 systems.
|
||||
|
||||
* i386-tdep.c (supply_gregset, fill_gregset, supply_fpregset,
|
||||
fill_fpregset): Moved to i386v4-nat.c
|
||||
* i386v4-nat.c, nm-i386v4.h, : New files.
|
||||
* i386sol2.mh, i386v4.mh, ncr3000.mh (NAT_FILE): Use nm-i386v4.h.
|
||||
* i386sol2.mh, i386v4.mh, ncr3000.mh (NATDEPFILES): Add corelow.o,
|
||||
change i386v-nat.o to i386v4-nat.o.
|
||||
|
||||
Fri Oct 16 13:06:08 1992 K. Richard Pixley (rich@sendai.cygnus.com)
|
||||
|
||||
Miscellaneous 386 configs updated.
|
||||
|
@ -15,8 +15,8 @@ XDEPFILES=
|
||||
# Use the i386 SVR4 host configuration file.
|
||||
XM_FILE= xm-i386v4.h
|
||||
|
||||
NAT_FILE= nm-i386v.h
|
||||
NATDEPFILES= exec.o procfs.o fork-child.o i386v-nat.o
|
||||
NAT_FILE= nm-i386v4.h
|
||||
NATDEPFILES= corelow.o exec.o procfs.o fork-child.o i386v4-nat.o
|
||||
|
||||
# We need to find alloca() somewhere. Gcc has one built in, but most other
|
||||
# compilers don't. Using the one in /usr/ucblib/libucb.a is tricky because
|
||||
|
@ -11,8 +11,8 @@ XDEPFILES=
|
||||
# Use the i386 SVR4 host configuration file.
|
||||
XM_FILE= xm-i386v4.h
|
||||
|
||||
NAT_FILE= nm-i386v.h
|
||||
NATDEPFILES= exec.o procfs.o fork-child.o i386v-nat.o
|
||||
NAT_FILE= nm-i386v4.h
|
||||
NATDEPFILES= corelow.o exec.o procfs.o fork-child.o i386v4-nat.o
|
||||
|
||||
# We need to find alloca() somewhere. Gcc has one built in, but most other
|
||||
# compilers don't. Using the one in /usr/ucblib/libucb.a is tricky because
|
||||
|
@ -20,8 +20,8 @@ XDEPFILES=
|
||||
# Use the i386 SVR4 host configuration file.
|
||||
XM_FILE= xm-i386v4.h
|
||||
|
||||
NAT_FILE= nm-i386v.h
|
||||
NATDEPFILES= exec.o procfs.o fork-child.o i386v-nat.o
|
||||
NAT_FILE= nm-i386v4.h
|
||||
NATDEPFILES= corelow.o exec.o procfs.o fork-child.o i386v4-nat.o
|
||||
|
||||
# We need to find alloca() somewhere. Gcc has one built in, but most other
|
||||
# compilers don't. Using the one in /usr/ucblib/libucb.a is tricky because
|
||||
|
148
gdb/i386v4-nat.c
Normal file
148
gdb/i386v4-nat.c
Normal file
@ -0,0 +1,148 @@
|
||||
/* Native-dependent code for SVR4 Unix running on i386's, for GDB.
|
||||
Copyright 1988, 1989, 1991, 1992 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. */
|
||||
|
||||
#include "defs.h"
|
||||
#include <sys/procfs.h>
|
||||
|
||||
/* The /proc interface divides the target machine's register set up into
|
||||
two different sets, the general register set (gregset) and the floating
|
||||
point register set (fpregset). For each set, there is an ioctl to get
|
||||
the current register set and another ioctl to set the current values.
|
||||
|
||||
The actual structure passed through the ioctl interface is, of course,
|
||||
naturally machine dependent, and is different for each set of registers.
|
||||
For the i386 for example, the general register set is typically defined
|
||||
by:
|
||||
|
||||
typedef int gregset_t[19]; (in <sys/regset.h>)
|
||||
|
||||
#define GS 0 (in <sys/reg.h>)
|
||||
#define FS 1
|
||||
...
|
||||
#define UESP 17
|
||||
#define SS 18
|
||||
|
||||
and the floating point set by:
|
||||
|
||||
typedef struct fpregset
|
||||
{
|
||||
union
|
||||
{
|
||||
struct fpchip_state // fp extension state //
|
||||
{
|
||||
int state[27]; // 287/387 saved state //
|
||||
int status; // status word saved at exception //
|
||||
} fpchip_state;
|
||||
struct fp_emul_space // for emulators //
|
||||
{
|
||||
char fp_emul[246];
|
||||
char fp_epad[2];
|
||||
} fp_emul_space;
|
||||
int f_fpregs[62]; // union of the above //
|
||||
} fp_reg_set;
|
||||
long f_wregs[33]; // saved weitek state //
|
||||
} fpregset_t;
|
||||
|
||||
These routines provide the packing and unpacking of gregset_t and
|
||||
fpregset_t formatted data.
|
||||
|
||||
*/
|
||||
|
||||
/* This is a duplicate of the table in i386-xdep.c. */
|
||||
|
||||
static int regmap[] =
|
||||
{
|
||||
EAX, ECX, EDX, EBX,
|
||||
UESP, EBP, ESI, EDI,
|
||||
EIP, EFL, CS, SS,
|
||||
DS, ES, FS, GS,
|
||||
};
|
||||
|
||||
|
||||
/* Given a pointer to a general register set in /proc format (gregset_t *),
|
||||
unpack the register contents and supply them as gdb's idea of the current
|
||||
register values. */
|
||||
|
||||
void
|
||||
supply_gregset (gregsetp)
|
||||
gregset_t *gregsetp;
|
||||
{
|
||||
register int regi;
|
||||
register greg_t *regp = (greg_t *) gregsetp;
|
||||
extern int regmap[];
|
||||
|
||||
for (regi = 0 ; regi < NUM_REGS ; regi++)
|
||||
{
|
||||
supply_register (regi, (char *) (regp + regmap[regi]));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
fill_gregset (gregsetp, regno)
|
||||
gregset_t *gregsetp;
|
||||
int regno;
|
||||
{
|
||||
int regi;
|
||||
register greg_t *regp = (greg_t *) gregsetp;
|
||||
extern char registers[];
|
||||
extern int regmap[];
|
||||
|
||||
for (regi = 0 ; regi < NUM_REGS ; regi++)
|
||||
{
|
||||
if ((regno == -1) || (regno == regi))
|
||||
{
|
||||
*(regp + regmap[regi]) = *(int *) ®isters[REGISTER_BYTE (regi)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined (FP0_REGNUM)
|
||||
|
||||
/* Given a pointer to a floating point register set in /proc format
|
||||
(fpregset_t *), unpack the register contents and supply them as gdb's
|
||||
idea of the current floating point register values. */
|
||||
|
||||
void
|
||||
supply_fpregset (fpregsetp)
|
||||
fpregset_t *fpregsetp;
|
||||
{
|
||||
register int regi;
|
||||
|
||||
/* FIXME: see m68k-tdep.c for an example, for the m68k. */
|
||||
}
|
||||
|
||||
/* Given a pointer to a floating point register set in /proc format
|
||||
(fpregset_t *), update the register specified by REGNO from gdb's idea
|
||||
of the current floating point register set. If REGNO is -1, update
|
||||
them all. */
|
||||
|
||||
void
|
||||
fill_fpregset (fpregsetp, regno)
|
||||
fpregset_t *fpregsetp;
|
||||
int regno;
|
||||
{
|
||||
int regi;
|
||||
char *to;
|
||||
char *from;
|
||||
extern char registers[];
|
||||
|
||||
/* FIXME: see m68k-tdep.c for an example, for the m68k. */
|
||||
}
|
||||
|
||||
#endif /* defined (FP0_REGNUM) */
|
20
gdb/nm-i386v4.h
Normal file
20
gdb/nm-i386v4.h
Normal file
@ -0,0 +1,20 @@
|
||||
/* Native support for i386 running SVR4.
|
||||
Copyright 1986, 1987, 1989, 1992 Free Software Foundation, Inc.
|
||||
Changes for 80386 by Pace Willisson (pace@prep.ai.mit.edu), July 1988.
|
||||
|
||||
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. */
|
||||
|
Loading…
Reference in New Issue
Block a user