aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2002-08-18 21:53:55 +0000
committerMark Kettenis <kettenis@gnu.org>2002-08-18 21:53:55 +0000
commitd4e0bab44f5ebceb27ba9c277eb464ab51f5894c (patch)
tree6ac95764ac7267df4f0fed8d18bc2ecb92c8b5c3
parent46cac009b73a4d0194cf7c1b0c664ca21dcb4842 (diff)
downloadgdb-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/ChangeLog12
-rw-r--r--gdb/config/i386/nm-i386v.h20
-rw-r--r--gdb/i386v-nat.c41
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)
{