| Index: gdb/sparc64-tdep.c
|
| diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
|
| index 28c9ca4fec8b057b22c21aee9a21122e8d3b9188..8bcf4184d695334f873b5bb43e4171e748f7214c 100644
|
| --- a/gdb/sparc64-tdep.c
|
| +++ b/gdb/sparc64-tdep.c
|
| @@ -1,6 +1,6 @@
|
| /* Target-dependent code for UltraSPARC.
|
|
|
| - Copyright (C) 2003-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2003-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -35,7 +35,7 @@
|
| #include "value.h"
|
|
|
| #include "gdb_assert.h"
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
|
|
| #include "sparc64-tdep.h"
|
|
|
| @@ -1448,7 +1448,8 @@ sparc64_collect_gregset (const struct sparc_gregset *gregset,
|
| }
|
|
|
| void
|
| -sparc64_supply_fpregset (struct regcache *regcache,
|
| +sparc64_supply_fpregset (const struct sparc_fpregset *fpregset,
|
| + struct regcache *regcache,
|
| int regnum, const void *fpregs)
|
| {
|
| int sparc32 = (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 32);
|
| @@ -1458,14 +1459,15 @@ sparc64_supply_fpregset (struct regcache *regcache,
|
| for (i = 0; i < 32; i++)
|
| {
|
| if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
|
| - regcache_raw_supply (regcache, SPARC_F0_REGNUM + i, regs + (i * 4));
|
| + regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
|
| + regs + fpregset->r_f0_offset + (i * 4));
|
| }
|
|
|
| if (sparc32)
|
| {
|
| if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
|
| regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
|
| - regs + (32 * 4) + (16 * 8) + 4);
|
| + regs + fpregset->r_fsr_offset);
|
| }
|
| else
|
| {
|
| @@ -1473,17 +1475,19 @@ sparc64_supply_fpregset (struct regcache *regcache,
|
| {
|
| if (regnum == (SPARC64_F32_REGNUM + i) || regnum == -1)
|
| regcache_raw_supply (regcache, SPARC64_F32_REGNUM + i,
|
| - regs + (32 * 4) + (i * 8));
|
| + (regs + fpregset->r_f0_offset
|
| + + (32 * 4) + (i * 8)));
|
| }
|
|
|
| if (regnum == SPARC64_FSR_REGNUM || regnum == -1)
|
| regcache_raw_supply (regcache, SPARC64_FSR_REGNUM,
|
| - regs + (32 * 4) + (16 * 8));
|
| + regs + fpregset->r_fsr_offset);
|
| }
|
| }
|
|
|
| void
|
| -sparc64_collect_fpregset (const struct regcache *regcache,
|
| +sparc64_collect_fpregset (const struct sparc_fpregset *fpregset,
|
| + const struct regcache *regcache,
|
| int regnum, void *fpregs)
|
| {
|
| int sparc32 = (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 32);
|
| @@ -1493,14 +1497,15 @@ sparc64_collect_fpregset (const struct regcache *regcache,
|
| for (i = 0; i < 32; i++)
|
| {
|
| if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
|
| - regcache_raw_collect (regcache, SPARC_F0_REGNUM + i, regs + (i * 4));
|
| + regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
|
| + regs + fpregset->r_f0_offset + (i * 4));
|
| }
|
|
|
| if (sparc32)
|
| {
|
| if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
|
| regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
|
| - regs + (32 * 4) + (16 * 8) + 4);
|
| + regs + fpregset->r_fsr_offset);
|
| }
|
| else
|
| {
|
| @@ -1508,12 +1513,18 @@ sparc64_collect_fpregset (const struct regcache *regcache,
|
| {
|
| if (regnum == (SPARC64_F32_REGNUM + i) || regnum == -1)
|
| regcache_raw_collect (regcache, SPARC64_F32_REGNUM + i,
|
| - regs + (32 * 4) + (i * 8));
|
| + (regs + fpregset->r_f0_offset
|
| + + (32 * 4) + (i * 8)));
|
| }
|
|
|
| if (regnum == SPARC64_FSR_REGNUM || regnum == -1)
|
| regcache_raw_collect (regcache, SPARC64_FSR_REGNUM,
|
| - regs + (32 * 4) + (16 * 8));
|
| + regs + fpregset->r_fsr_offset);
|
| }
|
| }
|
|
|
| +const struct sparc_fpregset sparc64_bsd_fpregset =
|
| +{
|
| + 0 * 8, /* %f0 */
|
| + 32 * 8, /* %fsr */
|
| +};
|
|
|