diff options
author | Mark Kettenis <kettenis@gnu.org> | 2002-08-18 21:53:55 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2002-08-18 21:53:55 +0000 |
commit | d4e0bab44f5ebceb27ba9c277eb464ab51f5894c (patch) | |
tree | 6ac95764ac7267df4f0fed8d18bc2ecb92c8b5c3 | |
parent | 46cac009b73a4d0194cf7c1b0c664ca21dcb4842 (diff) | |
download | gdb-d4e0bab44f5ebceb27ba9c277eb464ab51f5894c.zip gdb-d4e0bab44f5ebceb27ba9c277eb464ab51f5894c.tar.gz gdb-d4e0bab44f5ebceb27ba9c277eb464ab51f5894c.tar.bz2 |
* config/i386/nm-i386v.h: Add protection against
multiple-inclusion.
(i386_register_u_addr): Remove prototype.
(register_u_addr): New prototype.
(REGISTER_U_ADDR): Redefine accordingly.
* i386v-nat.c: Improve several comments.
(i386_register_u_addr): Change signature and rename to
register_u_addr. Use FP_REGNUM_P. Rewrite slightly to get rid of
ubase variable.
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/config/i386/nm-i386v.h | 20 | ||||
-rw-r--r-- | gdb/i386v-nat.c | 41 |
3 files changed, 46 insertions, 27 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 11285d7..7f70b8e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2002-08-18 Mark Kettenis <kettenis@gnu.org> + + * config/i386/nm-i386v.h: Add protection against + multiple-inclusion. + (i386_register_u_addr): Remove prototype. + (register_u_addr): New prototype. + (REGISTER_U_ADDR): Redefine accordingly. + * i386v-nat.c: Improve several comments. + (i386_register_u_addr): Change signature and rename to + register_u_addr. Use FP_REGNUM_P. Rewrite slightly to get rid of + ubase variable. + 2002-08-18 Andrew Cagney <ac131313@redhat.com> * config/mips/tm-mips.h (STORE_RETURN_VALUE): Delete macro. diff --git a/gdb/config/i386/nm-i386v.h b/gdb/config/i386/nm-i386v.h index af19115..61af25d 100644 --- a/gdb/config/i386/nm-i386v.h +++ b/gdb/config/i386/nm-i386v.h @@ -1,5 +1,6 @@ -/* Native support for i386. - Copyright 1986, 1987, 1989, 1992, 1993, 1998, 2000 +/* Native support for i386 running System V (pre-SVR4). + + Copyright 1986, 1987, 1989, 1992, 1993, 1998, 2000, 2002 Free Software Foundation, Inc. Changes for 80386 by Pace Willisson (pace@prep.ai.mit.edu), July 1988. @@ -20,7 +21,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define REGISTER_U_ADDR(addr, blockend, regno) \ - (addr) = i386_register_u_addr ((blockend),(regno)); +#ifndef NM_I386V_H +#define NM_I386V_H + +/* Support for the user struct. */ + +/* This is the amount to subtract from u.u_ar0 + to get the offset in the core file of the register values. */ + +#define REGISTER_U_ADDR(addr, blockend, regnum) \ + (addr) = register_u_addr ((blockend), (regnum)) +extern CORE_ADDR register_u_addr (CORE_ADDR blockend, int regnum); -extern int i386_register_u_addr (int, int); +#endif /* nm-i386v.h */ diff --git a/gdb/i386v-nat.c b/gdb/i386v-nat.c index c603b28..8180093 100644 --- a/gdb/i386v-nat.c +++ b/gdb/i386v-nat.c @@ -1,4 +1,4 @@ -/* Intel 386 native support for SYSV systems (pre-SVR4). +/* Intel 386 native support for System V systems (pre-SVR4). Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. @@ -62,8 +62,8 @@ #include "target.h" -/* this table must line up with REGISTER_NAMES in tm-i386v.h */ -/* symbols like 'EAX' come from <sys/reg.h> */ +/* Mapping between the general-purpose registers in `struct user' + format and GDB's register array layout. */ static int regmap[] = { EAX, ECX, EDX, EBX, @@ -72,37 +72,34 @@ static int regmap[] = DS, ES, FS, GS, }; -/* blockend is the value of u.u_ar0, and points to the - * place where GS is stored - */ +/* Support for the user struct. */ -int -i386_register_u_addr (int blockend, int regnum) +/* Return the address of register REGNUM. BLOCKEND is the value of + u.u_ar0, and points to the place where GS is stored. */ + +CORE_ADDR +register_u_addr (CORE_ADDR blockend, int regnum) { struct user u; - int fpstate; - int ubase; + CORE_ADDR fpstate; - ubase = blockend; - /* FIXME: Should have better way to test floating point range */ - if (regnum >= FP0_REGNUM && regnum <= (FP0_REGNUM + 7)) + if (FP_REGNUM_P (regnum)) { -#ifdef KSTKSZ /* SCO, and others? */ - ubase += 4 * (SS + 1) - KSTKSZ; - fpstate = ubase + ((char *) &u.u_fps.u_fpstate - (char *) &u); +#ifdef KSTKSZ /* SCO, and others? */ + blockend += 4 * (SS + 1) - KSTKSZ; + fpstate = blockend + ((char *) &u.u_fps.u_fpstate - (char *) &u); return (fpstate + 0x1c + 10 * (regnum - FP0_REGNUM)); #else - fpstate = ubase + ((char *) &u.i387.st_space - (char *) &u); + fpstate = blockend + ((char *) &u.i387.st_space - (char *) &u); return (fpstate + 10 * (regnum - FP0_REGNUM)); #endif } - else - { - return (ubase + 4 * regmap[regnum]); - } + return (blockend + 4 * regmap[regnum]); } - + +/* Return the size of the user struct. */ + int kernel_u_size (void) { |