* go32-nat.c (fetch_register): Call i387_supply_fsave instead of

i387_supply_register.
(go32_fetch_registers): Adjust call to i387_supply_fsave.
* i386nbsd-tdep.c (fetch_core_registers): Adjust call to
i387_supply_fsave.
(fetch_elfcore_registers): Adjust call to i387_supply_fsave and
i387_supply_fxsave.
* i386obsd-tdep.c (fetch_core_registers): Adjust call to
i387_supply_fsave.
* i386bsd-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
(fetch_inferior_registers): Remove extraneous whitespace.  Adjust
call to i387_supply_fxsave.  Call i387_supply_fsave instead of
supply_fpregset.
(store_inferior_registers): Remove extraneous whitespace.  Call
i387_fill_fsave instead of fill_fpregset.
* i386gnu-nat.c (fetch_fpregs): Adjust call to i387_supply_fsave.
(supply_fpregset): Likewise.
* i386v4-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
* i386-interix-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
* i386-linux-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
(supply_fpxregset): Adjust call to i387_adjust_fxsave.
* i386-nto-tdep.c (i386nto_supply_fpregset): Adjust calls to
i387supply_fsave and i387_supply_fxsave.
* i387-tdep.c (i387_supply_fsave): Add `regnum' argument.
Incorporate code from `i387_supply_register.
(i387_supply_register): Remove.
(i387_supply_fxsave): Add `regnum' argument.
Update comments.
* i387-tdep.h (i387_supply_fsave, i387_supply_fsxave): Adjust
prototype.
(i387_supply_register): remove prototype.
Update comments.
This commit is contained in:
Mark Kettenis 2003-08-23 08:56:45 +00:00
parent 95a745092b
commit ed504bdf4f
12 changed files with 149 additions and 123 deletions

View file

@ -1,3 +1,42 @@
2003-08-23 Mark Kettenis <kettenis@gnu.org>
* go32-nat.c (fetch_register): Call i387_supply_fsave instead of
i387_supply_register.
(go32_fetch_registers): Adjust call to i387_supply_fsave.
* i386nbsd-tdep.c (fetch_core_registers): Adjust call to
i387_supply_fsave.
(fetch_elfcore_registers): Adjust call to i387_supply_fsave and
i387_supply_fxsave.
* i386obsd-tdep.c (fetch_core_registers): Adjust call to
i387_supply_fsave.
* i386bsd-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
(fetch_inferior_registers): Remove extraneous whitespace. Adjust
call to i387_supply_fxsave. Call i387_supply_fsave instead of
supply_fpregset.
(store_inferior_registers): Remove extraneous whitespace. Call
i387_fill_fsave instead of fill_fpregset.
* i386gnu-nat.c (fetch_fpregs): Adjust call to i387_supply_fsave.
(supply_fpregset): Likewise.
* i386v4-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
* i386-interix-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
* i386-linux-nat.c (supply_fpregset): Adjust call to
i387_supply_fsave.
(supply_fpxregset): Adjust call to i387_adjust_fxsave.
* i386-nto-tdep.c (i386nto_supply_fpregset): Adjust calls to
i387supply_fsave and i387_supply_fxsave.
* i387-tdep.c (i387_supply_fsave): Add `regnum' argument.
Incorporate code from `i387_supply_register.
(i387_supply_register): Remove.
(i387_supply_fxsave): Add `regnum' argument.
Update comments.
* i387-tdep.h (i387_supply_fsave, i387_supply_fsxave): Adjust
prototype.
(i387_supply_register): remove prototype.
Update comments.
2003-08-22 Michael Chastain <mec@shout.net> 2003-08-22 Michael Chastain <mec@shout.net>
* config/djgpp/fnchange.lst: Remove gdb/testsuite/gdb.c++/*. * config/djgpp/fnchange.lst: Remove gdb/testsuite/gdb.c++/*.

View file

@ -468,7 +468,7 @@ fetch_register (int regno)
if (regno < FP0_REGNUM) if (regno < FP0_REGNUM)
supply_register (regno, (char *) &a_tss + regno_mapping[regno].tss_ofs); supply_register (regno, (char *) &a_tss + regno_mapping[regno].tss_ofs);
else if (i386_fp_regnum_p (regno) || i386_fpc_regnum_p (regno)) else if (i386_fp_regnum_p (regno) || i386_fpc_regnum_p (regno))
i387_supply_register (regno, (char *) &npx); i387_supply_fsave ((const char *) &npx, regno);
else else
internal_error (__FILE__, __LINE__, internal_error (__FILE__, __LINE__,
"Invalid register no. %d in fetch_register.", regno); "Invalid register no. %d in fetch_register.", regno);
@ -483,7 +483,7 @@ go32_fetch_registers (int regno)
{ {
for (regno = 0; regno < FP0_REGNUM; regno++) for (regno = 0; regno < FP0_REGNUM; regno++)
fetch_register (regno); fetch_register (regno);
i387_supply_fsave ((char *) &npx); i387_supply_fsave ((const char *) &npx, -1);
} }
} }

View file

@ -80,7 +80,7 @@ fill_gregset (gregset_t *gregsetp, int regno)
void void
supply_fpregset (fpregset_t *fpregsetp) supply_fpregset (fpregset_t *fpregsetp)
{ {
i387_supply_fsave ((char *) fpregsetp); i387_supply_fsave ((const char *) fpregsetp, -1);
} }
/* Given a pointer to a floating point register set in (fpregset_t *) /* Given a pointer to a floating point register set in (fpregset_t *)

View file

@ -320,7 +320,7 @@ static void store_regs (int tid, int regno) {}
void void
supply_fpregset (elf_fpregset_t *fpregsetp) supply_fpregset (elf_fpregset_t *fpregsetp)
{ {
i387_supply_fsave ((char *) fpregsetp); i387_supply_fsave ((const char *) fpregsetp, -1);
dummy_sse_values (); dummy_sse_values ();
} }
@ -385,7 +385,7 @@ static void store_fpregs (int tid, int regno) {}
void void
supply_fpxregset (elf_fpxregset_t *fpxregsetp) supply_fpxregset (elf_fpxregset_t *fpxregsetp)
{ {
i387_supply_fxsave ((char *) fpxregsetp); i387_supply_fxsave ((const char *) fpxregsetp, -1);
} }
/* Fill register REGNO (if it is a floating-point or SSE register) in /* Fill register REGNO (if it is a floating-point or SSE register) in

View file

@ -87,9 +87,9 @@ static void
i386nto_supply_fpregset (char *fpregs) i386nto_supply_fpregset (char *fpregs)
{ {
if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR) if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR)
i387_supply_fxsave (fpregs); i387_supply_fxsave (fpregs, -1);
else else
i387_supply_fsave (fpregs); i387_supply_fsave (fpregs, -1);
} }
static void static void

View file

@ -157,7 +157,7 @@ fill_gregset (gregset_t *gregsetp, int regno)
void void
supply_fpregset (fpregset_t *fpregsetp) supply_fpregset (fpregset_t *fpregsetp)
{ {
i387_supply_fsave ((char *) fpregsetp); i387_supply_fsave ((const char *) fpregsetp, -1);
} }
/* Fill register REGNO (if it is a floating-point register) in /* Fill register REGNO (if it is a floating-point register) in
@ -176,7 +176,6 @@ fill_fpregset (fpregset_t *fpregsetp, int regno)
void void
fetch_inferior_registers (int regno) fetch_inferior_registers (int regno)
{ {
if (regno == -1 || GETREGS_SUPPLIES (regno)) if (regno == -1 || GETREGS_SUPPLIES (regno))
{ {
gregset_t gregs; gregset_t gregs;
@ -201,7 +200,7 @@ fetch_inferior_registers (int regno)
(PTRACE_ARG3_TYPE) xmmregs, 0) == 0) (PTRACE_ARG3_TYPE) xmmregs, 0) == 0)
{ {
have_ptrace_xmmregs = 1; have_ptrace_xmmregs = 1;
i387_supply_fxsave (xmmregs); i387_supply_fxsave (xmmregs, -1);
} }
else else
{ {
@ -209,14 +208,14 @@ fetch_inferior_registers (int regno)
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1) (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't get floating point status"); perror_with_name ("Couldn't get floating point status");
supply_fpregset (&fpregs); i387_supply_fsave ((const char *) &fpregs, -1);
} }
#else #else
if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1) (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't get floating point status"); perror_with_name ("Couldn't get floating point status");
supply_fpregset (&fpregs); i387_supply_fsave ((const char *) &fpregs, -1);
#endif #endif
} }
} }
@ -227,7 +226,6 @@ fetch_inferior_registers (int regno)
void void
store_inferior_registers (int regno) store_inferior_registers (int regno)
{ {
if (regno == -1 || GETREGS_SUPPLIES (regno)) if (regno == -1 || GETREGS_SUPPLIES (regno))
{ {
gregset_t gregs; gregset_t gregs;
@ -272,7 +270,7 @@ store_inferior_registers (int regno)
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1) (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't get floating point status"); perror_with_name ("Couldn't get floating point status");
fill_fpregset (&fpregs, regno); i387_fill_fsave ((char *) &fpregs, regno);
if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1) (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)

View file

@ -89,7 +89,7 @@ fetch_fpregs (struct proc *thread)
} }
/* Supply the floating-point registers. */ /* Supply the floating-point registers. */
i387_supply_fsave (state.hw_state); i387_supply_fsave (state.hw_state, -1);
} }
#ifdef HAVE_SYS_PROCFS_H #ifdef HAVE_SYS_PROCFS_H
@ -106,7 +106,7 @@ supply_gregset (gdb_gregset_t *gregs)
void void
supply_fpregset (gdb_fpregset_t *fpregs) supply_fpregset (gdb_fpregset_t *fpregs)
{ {
i387_supply_fsave ((char *) fpregs); i387_supply_fsave ((const char *) fpregs, -1);
} }
#endif #endif

View file

@ -1,4 +1,5 @@
/* Target-dependent code for NetBSD/i386, for GDB. /* Target-dependent code for NetBSD/i386.
Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001, 2002, 2003 Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001, 2002, 2003
Free Software Foundation, Inc. Free Software Foundation, Inc.
@ -88,7 +89,7 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
i386nbsd_supply_reg (regs, -1); i386nbsd_supply_reg (regs, -1);
/* Floating point registers. */ /* Floating point registers. */
i387_supply_fsave (fsave); i387_supply_fsave (fsave, -1);
} }
static void static void
@ -108,7 +109,7 @@ fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size,
if (core_reg_size != 108) if (core_reg_size != 108)
warning ("Wrong size FP register set in core file."); warning ("Wrong size FP register set in core file.");
else else
i387_supply_fsave (core_reg_sect); i387_supply_fsave (core_reg_sect, -1);
break; break;
case 3: /* "Extended" floating point registers. This is gdb-speak case 3: /* "Extended" floating point registers. This is gdb-speak
@ -116,7 +117,7 @@ fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size,
if (core_reg_size != 512) if (core_reg_size != 512)
warning ("Wrong size XMM register set in core file."); warning ("Wrong size XMM register set in core file.");
else else
i387_supply_fxsave (core_reg_sect); i387_supply_fxsave (core_reg_sect, -1);
break; break;
default: default:

View file

@ -66,7 +66,7 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
i386obsd_supply_reg (regs, -1); i386obsd_supply_reg (regs, -1);
/* Floating point registers. */ /* Floating point registers. */
i387_supply_fsave (fsave); i387_supply_fsave (fsave, -1);
} }
static struct core_fns i386obsd_core_fns = static struct core_fns i386obsd_core_fns =

View file

@ -139,7 +139,7 @@ supply_fpregset (fpregset_t *fpregsetp)
if (FP0_REGNUM == 0) if (FP0_REGNUM == 0)
return; return;
i387_supply_fsave ((char *) fpregsetp); i387_supply_fsave ((const char *) fpregsetp, -1);
} }
/* Fill register REGNO (if it is a floating-point register) in /* Fill register REGNO (if it is a floating-point register) in

View file

@ -361,51 +361,44 @@ static int fsave_offset[] =
#define FSAVE_ADDR(fsave, regnum) (fsave + fsave_offset[regnum - FP0_REGNUM]) #define FSAVE_ADDR(fsave, regnum) (fsave + fsave_offset[regnum - FP0_REGNUM])
/* Fill register REGNUM in GDB's register array with the appropriate /* Fill register REGNUM in GDB's register cache with the appropriate
value from *FSAVE. This function masks off any of the reserved value from *FSAVE. This function masks off any of the reserved
bits in *FSAVE. */ bits in *FSAVE. */
void void
i387_supply_register (int regnum, char *fsave) i387_supply_fsave (const char *fsave, int regnum)
{
if (fsave == NULL)
{
supply_register (regnum, NULL);
return;
}
/* Most of the FPU control registers occupy only 16 bits in
the fsave area. Give those a special treatment. */
if (regnum >= FPC_REGNUM
&& regnum != FIOFF_REGNUM && regnum != FOOFF_REGNUM)
{
unsigned char val[4];
memcpy (val, FSAVE_ADDR (fsave, regnum), 2);
val[2] = val[3] = 0;
if (regnum == FOP_REGNUM)
val[1] &= ((1 << 3) - 1);
supply_register (regnum, val);
}
else
supply_register (regnum, FSAVE_ADDR (fsave, regnum));
}
/* Fill GDB's register array with the floating-point register values
in *FSAVE. This function masks off any of the reserved
bits in *FSAVE. */
void
i387_supply_fsave (char *fsave)
{ {
int i; int i;
for (i = FP0_REGNUM; i < XMM0_REGNUM; i++) for (i = FP0_REGNUM; i < XMM0_REGNUM; i++)
i387_supply_register (i, fsave); if (regnum == -1 || regnum == i)
{
if (fsave == NULL)
{
supply_register (i, NULL);
return;
}
/* Most of the FPU control registers occupy only 16 bits in the
fsave area. Give those a special treatment. */
if (i >= FPC_REGNUM
&& i != FIOFF_REGNUM && i != FOOFF_REGNUM)
{
unsigned char val[4];
memcpy (val, FSAVE_ADDR (fsave, i), 2);
val[2] = val[3] = 0;
if (i == FOP_REGNUM)
val[1] &= ((1 << 3) - 1);
supply_register (i, val);
}
else
supply_register (i, FSAVE_ADDR (fsave, i));
}
} }
/* Fill register REGNUM (if it is a floating-point register) in *FSAVE /* Fill register REGNUM (if it is a floating-point register) in *FSAVE
with the value in GDB's register array. If REGNUM is -1, do this with the value in GDB's register cache. If REGNUM is -1, do this
for all registers. This function doesn't touch any of the reserved for all registers. This function doesn't touch any of the reserved
bits in *FSAVE. */ bits in *FSAVE. */
@ -492,15 +485,15 @@ static int fxsave_offset[] =
((regnum == MXCSR_REGNUM) ? (fxsave + 24) : \ ((regnum == MXCSR_REGNUM) ? (fxsave + 24) : \
(fxsave + fxsave_offset[regnum - FP0_REGNUM])) (fxsave + fxsave_offset[regnum - FP0_REGNUM]))
static int i387_tag (unsigned char *raw); static int i387_tag (const unsigned char *raw);
/* Fill GDB's register array with the floating-point and SSE register /* Fill register REGNUM in GDB's register cache with the appropriate
values in *FXSAVE. This function masks off any of the reserved floating-point or SSE register value from *FXSAVE. This function
bits in *FXSAVE. */ masks off any of the reserved bits in *FXSAVE. */
void void
i387_supply_fxsave (char *fxsave) i387_supply_fxsave (const char *fxsave, int regnum)
{ {
int i, last_regnum = MXCSR_REGNUM; int i, last_regnum = MXCSR_REGNUM;
@ -508,6 +501,7 @@ i387_supply_fxsave (char *fxsave)
last_regnum = FOP_REGNUM; last_regnum = FOP_REGNUM;
for (i = FP0_REGNUM; i <= last_regnum; i++) for (i = FP0_REGNUM; i <= last_regnum; i++)
if (regnum == -1 || regnum == i)
{ {
if (fxsave == NULL) if (fxsave == NULL)
{ {
@ -528,9 +522,9 @@ i387_supply_fxsave (char *fxsave)
val[1] &= ((1 << 3) - 1); val[1] &= ((1 << 3) - 1);
else if (i== FTAG_REGNUM) else if (i== FTAG_REGNUM)
{ {
/* The fxsave area contains a simplified version of the /* The fxsave area contains a simplified version of
tag word. We have to look at the actual 80-bit FP the tag word. We have to look at the actual 80-bit
data to recreate the traditional i387 tag word. */ FP data to recreate the traditional i387 tag word. */
unsigned long ftag = 0; unsigned long ftag = 0;
int fpreg; int fpreg;
@ -563,7 +557,7 @@ i387_supply_fxsave (char *fxsave)
} }
/* Fill register REGNUM (if it is a floating-point or SSE register) in /* Fill register REGNUM (if it is a floating-point or SSE register) in
*FXSAVE with the value in GDB's register array. If REGNUM is -1, do *FXSAVE with the value in GDB's register cache. If REGNUM is -1, do
this for all registers. This function doesn't touch any of the this for all registers. This function doesn't touch any of the
reserved bits in *FXSAVE. */ reserved bits in *FXSAVE. */
@ -624,7 +618,7 @@ i387_fill_fxsave (char *fxsave, int regnum)
*RAW. */ *RAW. */
static int static int
i387_tag (unsigned char *raw) i387_tag (const unsigned char *raw)
{ {
int integer; int integer;
unsigned int exponent; unsigned int exponent;

View file

@ -45,33 +45,27 @@ extern void i387_register_to_value (struct frame_info *frame, int regnum,
extern void i387_value_to_register (struct frame_info *frame, int regnum, extern void i387_value_to_register (struct frame_info *frame, int regnum,
struct type *type, const void *from); struct type *type, const void *from);
/* Fill register REGNUM in GDB's register array with the appropriate /* Fill register REGNUM in GDB's register cache with the appropriate
value from *FSAVE. This function masks off any of the reserved value from *FSAVE. This function masks off any of the reserved
bits in *FSAVE. */ bits in *FSAVE. */
extern void i387_supply_register (int regnum, char *fsave); extern void i387_supply_fsave (const char *fsave, int regnum);
/* Fill GDB's register array with the floating-point register values
in *FSAVE. This function masks off any of the reserved
bits in *FSAVE. */
extern void i387_supply_fsave (char *fsave);
/* Fill register REGNUM (if it is a floating-point register) in *FSAVE /* Fill register REGNUM (if it is a floating-point register) in *FSAVE
with the value in GDB's register array. If REGNUM is -1, do this with the value in GDB's register cache. If REGNUM is -1, do this
for all registers. This function doesn't touch any of the reserved for all registers. This function doesn't touch any of the reserved
bits in *FSAVE. */ bits in *FSAVE. */
extern void i387_fill_fsave (char *fsave, int regnum); extern void i387_fill_fsave (char *fsave, int regnum);
/* Fill GDB's register array with the floating-point and SSE register /* Fill register REGNUM in GDB's register cache with the appropriate
values in *FXSAVE. This function masks off any of the reserved floating-point or SSE register value from *FXSAVE. This function
bits in *FXSAVE. */ masks off any of the reserved bits in *FXSAVE. */
extern void i387_supply_fxsave (char *fxsave); extern void i387_supply_fxsave (const char *fxsave, int regnum);
/* Fill register REGNUM (if it is a floating-point or SSE register) in /* Fill register REGNUM (if it is a floating-point or SSE register) in
*FXSAVE with the value in GDB's register array. If REGNUM is -1, do *FXSAVE with the value in GDB's register cache. If REGNUM is -1, do
this for all registers. This function doesn't touch any of the this for all registers. This function doesn't touch any of the
reserved bits in *FXSAVE. */ reserved bits in *FXSAVE. */