i386v host/target/native separation

This commit is contained in:
K. Richard Pixley 1992-10-16 23:39:34 +00:00
parent e24cb83d47
commit c7c9407366
10 changed files with 228 additions and 24 deletions

View File

@ -105,9 +105,9 @@ hppah-xdep.c
i386-pinsn.c
i386-stub.c
i386-tdep.c
i386-xdep.c
i386b-nat.c
i386mach-nat.c
i386v-nat.c
i387-tdep.c
i960-pinsn.c
i960-tdep.c
@ -146,6 +146,7 @@ nindy-tdep.c
nm-delta88.h
nm-i386bsd.h
nm-i386mach.h
nm-i386v.h
nm-irix3.h
nm-irix4.h
nm-linux.h

View File

@ -1,9 +1,22 @@
Fri Oct 16 13:06:08 1992 K. Richard Pixley (rich@sendai.cygnus.com)
Native support for i386v (untested).
* config/i386v.mh (XDEPFILES): removed infptrace.o inftarg.o
fork-child.o coredep.o corelow.o i386-xdep.o i387-tdep.o.
(NAT_FILE, NATDEPFILES): new macros.
* config/i386v.mt (TDEPFILES): removed exec.o, added i387-tdep.o.
* i386-xdep.c: removed.
* Makefile.in (HFILES): added nm-i386v.h
* i386v-nat.c, nm-i386v.h: new file.
* xm-i386v.h: (REGISTER_U_ADDR, i386_register_u_addr): removed to
nm-i386v.h.
* tm-i386v.h (FLOAT_INFO): removed.
Native support for linux (untested).
* config/linux.mh (XDEPFILES): removed infptrace.o inftarg.o
fork-child.o coredep.o corelow.o i387-tdep.o.
fork-child.o coredep.o corelow.o i387-tdep.o i386-xdep.o.
(NAT_FILE, NATDEPFILES): new macros.
* config/linux.mt (TDEPFILES): removed exec.o, added i387-tdep.o.
* Makefile.in (HFILES): added nm-linux.h.

View File

@ -255,7 +255,7 @@ HFILES= breakpoint.h buildsym.h call-cmds.h command.h defs.h \
xm-m68k.h xm-sparc.h xm-sysv4.h xm-vax.h \
nm-irix3.h nm-irix4.h nm-mips.h nm-rs6000.h nm-sun2.h nm-sun3.h \
nm-sun4os4.h nm-trash.h nm-news.h nm-ultra3.h nm-m88k.h \
nm-i386mach.h nm-sun386.h nm-linux.h
nm-i386mach.h nm-sun386.h nm-linux.h nm-i386v.h
REMOTE_EXAMPLES = m68k-stub.c i386-stub.c sparc-stub.c rem-multi.shar

View File

@ -1,6 +1,8 @@
# Host: Intel 386 running System V
XDEPFILES= infptrace.o inftarg.o fork-child.o coredep.o corelow.o i386-xdep.o i387-tdep.o
XDEPFILES=
XM_FILE= xm-i386v.h
NAT_FILE= nm-i386v.h
NATDEPFILES= exec.o infptrace.o inftarg.o fork-child.o coredep.o corelow.o i386v-nat.o
XM_CLIBS= -lPW
SYSV_DEFINE=-DSYSV
REGEX=regex.o

View File

@ -1,3 +1,3 @@
# Target: Intel 386 running System V
TDEPFILES= exec.o i386-tdep.o i386-pinsn.o
TDEPFILES= i386-tdep.o i386-pinsn.o i387-tdep.o
TM_FILE= tm-i386v.h

View File

@ -1,8 +1,8 @@
# Host: Intel 386 running System V
XDEPFILES= i386-xdep.o
XDEPFILES=
XM_FILE= xm-linux.h
NAT_FILE= nm-linux.h
NATDEPFILES= exec.o infptrace.o inftarg.o fork-child.o coredep.o corelow.o
NATDEPFILES= exec.o infptrace.o inftarg.o fork-child.o coredep.o corelow.o i386v-nat.o
XM_CLIBS=
TERMLIB=
SYSV_DEFINE=-DSYSV

168
gdb/i386v-nat.c Normal file
View File

@ -0,0 +1,168 @@
/* Intel 386 native support.
Copyright (C) 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 "frame.h"
#include "inferior.h"
#include "language.h"
#include "gdbcore.h"
#ifdef USG
#include <sys/types.h>
#endif
#include <sys/param.h>
#include <sys/dir.h>
#include <signal.h>
#include <sys/user.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/reg.h>
#include "ieee-float.h"
#include "target.h"
extern struct ext_format ext_format_i387;
/* this table must line up with REGISTER_NAMES in tm-i386v.h */
/* symbols like 'EAX' come from <sys/reg.h> */
static int regmap[] =
{
EAX, ECX, EDX, EBX,
UESP, EBP, ESI, EDI,
EIP, EFL, CS, SS,
DS, ES, FS, GS,
};
/* blockend is the value of u.u_ar0, and points to the
* place where GS is stored
*/
int
i386_register_u_addr (blockend, regnum)
int blockend;
int regnum;
{
#if 0
/* this will be needed if fp registers are reinstated */
/* for now, you can look at them with 'info float'
* sys5 wont let you change them with ptrace anyway
*/
if (regnum >= FP0_REGNUM && regnum <= FP7_REGNUM)
{
int ubase, fpstate;
struct user u;
ubase = blockend + 4 * (SS + 1) - KSTKSZ;
fpstate = ubase + ((char *)&u.u_fpstate - (char *)&u);
return (fpstate + 0x1c + 10 * (regnum - FP0_REGNUM));
}
else
#endif
return (blockend + 4 * regmap[regnum]);
}
#if 0
/* using FLOAT_INFO as is would be a problem. FLOAT_INFO is called
via a command xxx and eventually calls ptrace without ever having
traversed the target vector. This would be terribly impolite
behaviour for a sun4 hosted remote gdb.
A fix might be to move this code into the "info registers" command.
rich@cygnus.com 15 Sept 92. */
i386_float_info ()
{
struct user u; /* just for address computations */
int i;
/* fpstate defined in <sys/user.h> */
struct fpstate *fpstatep;
char buf[sizeof (struct fpstate) + 2 * sizeof (int)];
unsigned int uaddr;
char fpvalid = 0;
unsigned int rounded_addr;
unsigned int rounded_size;
extern int corechan;
int skip;
uaddr = (char *)&u.u_fpvalid - (char *)&u;
if (target_has_execution)
{
unsigned int data;
unsigned int mask;
rounded_addr = uaddr & -sizeof (int);
data = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) rounded_addr, 0);
mask = 0xff << ((uaddr - rounded_addr) * 8);
fpvalid = ((data & mask) != 0);
}
#if 0
else
{
if (lseek (corechan, uaddr, 0) < 0)
perror ("seek on core file");
if (myread (corechan, &fpvalid, 1) < 0)
perror ("read on core file");
}
#endif /* no core support yet */
if (fpvalid == 0)
{
printf ("no floating point status saved\n");
return;
}
uaddr = (char *)&U_FPSTATE(u) - (char *)&u;
if (target_has_execution)
{
int *ip;
rounded_addr = uaddr & -sizeof (int);
rounded_size = (((uaddr + sizeof (struct fpstate)) - uaddr) +
sizeof (int) - 1) / sizeof (int);
skip = uaddr - rounded_addr;
ip = (int *)buf;
for (i = 0; i < rounded_size; i++)
{
*ip++ = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) rounded_addr, 0);
rounded_addr += sizeof (int);
}
}
#if 0
else
{
if (lseek (corechan, uaddr, 0) < 0)
perror_with_name ("seek on core file");
if (myread (corechan, buf, sizeof (struct fpstate)) < 0)
perror_with_name ("read from core file");
skip = 0;
}
#endif /* 0 */
fpstatep = (struct fpstate *)(buf + skip);
print_387_status (fpstatep->status, (struct env387 *)fpstatep->state);
}
#endif /* never */

36
gdb/nm-i386v.h Normal file
View File

@ -0,0 +1,36 @@
/* Native support for i386.
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. */
#if 0
/* code to execute to print interesting information about the
floating point processor (if any)
No need to define if there is nothing to do.
On the 386, unfortunately this code is host-dependent (and lives
in the i386-xdep.c file), so we can't
do this unless we *know* we aren't cross-debugging. FIXME.
*/
#define FLOAT_INFO { i386_float_info (); }
#endif /*0*/
#define REGISTER_U_ADDR(addr, blockend, regno) \
(addr) = i386_register_u_addr ((blockend),(regno));
extern int
i386_register_u_addr PARAMS ((int, int));

View File

@ -99,17 +99,6 @@ i386_skip_prologue PARAMS ((int));
#define INVALID_FLOAT(p, len) (0)
#if 0
/* code to execute to print interesting information about the
floating point processor (if any)
No need to define if there is nothing to do.
On the 386, unfortunately this code is host-dependent (and lives
in the i386-xdep.c file), so we can't
do this unless we *know* we aren't cross-debugging. FIXME.
*/
#define FLOAT_INFO { i386_float_info (); }
#endif /*0*/
/* Say how long (ordinary) registers are. */
#define REGISTER_TYPE long

View File

@ -1,4 +1,4 @@
/* Macro defintions for i386.
/* Host support for i386.
Copyright 1986, 1987, 1989, 1992 Free Software Foundation, Inc.
Changes for 80386 by Pace Willisson (pace@prep.ai.mit.edu), July 1988.
@ -43,8 +43,3 @@ on those where it does, it occurs quite reliably. */
#define KERNEL_U_ADDR 0xe0000000
#define REGISTER_U_ADDR(addr, blockend, regno) \
(addr) = i386_register_u_addr ((blockend),(regno));
extern int
i386_register_u_addr PARAMS ((int, int));