Module Name: src Committed By: matt Date: Thu Dec 6 06:45:46 UTC 2012
Modified Files: src/external/gpl3/gdb/dist/gdb: armnbsd-nat.c Log Message: Fetch VFP registers, not FPA. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/external/gpl3/gdb/dist/gdb/armnbsd-nat.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl3/gdb/dist/gdb/armnbsd-nat.c diff -u src/external/gpl3/gdb/dist/gdb/armnbsd-nat.c:1.5 src/external/gpl3/gdb/dist/gdb/armnbsd-nat.c:1.6 --- src/external/gpl3/gdb/dist/gdb/armnbsd-nat.c:1.5 Mon Jan 23 21:24:43 2012 +++ src/external/gpl3/gdb/dist/gdb/armnbsd-nat.c Thu Dec 6 06:45:45 2012 @@ -123,16 +123,16 @@ arm_supply_gregset (struct regcache *reg } static void -arm_supply_fparegset (struct regcache *regcache, struct fpreg *fparegset) +arm_supply_vfpregset (struct regcache *regcache, struct fpreg *vfpregset) { int regno; - for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++) - regcache_raw_supply (regcache, regno, - (char *) &fparegset->fpr[regno - ARM_F0_REGNUM]); + for (regno = 0; regno < 16; regno++) + regcache_raw_supply (regcache, regno + ARM_D0_REGNUM, + (char *) vfpregset->fpr_vfp.vfp_regs + 8*regno); - regcache_raw_supply (regcache, ARM_FPS_REGNUM, - (char *) &fparegset->fpr_fpsr); + regcache_raw_supply (regcache, ARM_FPSCR_REGNUM, + (char *) &vfpregset->fpr_vfp.vfp_fpscr); } void @@ -166,19 +166,22 @@ fill_gregset (const struct regcache *reg } void -fill_fpregset (const struct regcache *regcache, fpregset_t *fpregsetp, int regno) +fill_fpregset (const struct regcache *regcache, fpregset_t *vfpregsetp, int regno) { if (-1 == regno) { int regnum; - for (regnum = ARM_F0_REGNUM; regnum <= ARM_F7_REGNUM; regnum++) - regcache_raw_collect(regcache, regnum, (char *) &fpregsetp->fpr[regnum - ARM_F0_REGNUM]); - } - else if (regno >= ARM_F0_REGNUM && regno <= ARM_F7_REGNUM) - regcache_raw_collect(regcache, regno, (char *) &fpregsetp->fpr[regno - ARM_F0_REGNUM]); - - if (ARM_FPS_REGNUM == regno || -1 == regno) - regcache_raw_collect (regcache, ARM_FPS_REGNUM, (char *) &fpregsetp->fpr_fpsr); + for (regnum = 0; regnum <= 15; regnum++) + regcache_raw_collect(regcache, regnum + ARM_D0_REGNUM, + (char *) vfpregsetp->fpr_vfp.vfp_regs + 8*regnum); + } + else if (regno >= ARM_D0_REGNUM && regno <= ARM_D0_REGNUM + 15) + regcache_raw_collect(regcache, regno, + (char *) vfpregsetp->fpr_vfp.vfp_regs + 8*regno); + + if (ARM_FPSCR_REGNUM == regno || -1 == regno) + regcache_raw_collect (regcache, ARM_FPSCR_REGNUM, + (char *) &vfpregsetp->fpr_vfp.vfp_fpscr); } void @@ -190,7 +193,7 @@ supply_gregset (struct regcache *regcach void supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp) { - arm_supply_fparegset (regcache, (struct fpreg *)fpregsetp); + arm_supply_vfpregset (regcache, (struct fpreg *)fpregsetp); } static void @@ -281,14 +284,14 @@ fetch_fp_register (struct regcache *regc switch (regno) { - case ARM_FPS_REGNUM: - regcache_raw_supply (regcache, ARM_FPS_REGNUM, - (char *) &inferior_fp_registers.fpr_fpsr); + case ARM_FPSCR_REGNUM: + regcache_raw_supply (regcache, ARM_FPSCR_REGNUM, + (char *) &inferior_fp_registers.fpr_vfp.vfp_fpscr); break; default: regcache_raw_supply (regcache, regno, - (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]); + (char *) inferior_fp_registers.fpr_vfp.vfp_regs + 8 * (regno - ARM_D0_REGNUM)); break; } } @@ -309,7 +312,7 @@ fetch_fp_regs (struct regcache *regcache return; } - arm_supply_fparegset (regcache, &inferior_fp_registers); + arm_supply_vfpregset (regcache, &inferior_fp_registers); } static void @@ -318,10 +321,10 @@ armnbsd_fetch_registers (struct target_o { if (regno >= 0) { - if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM) - fetch_register (regcache, regno); - else + if (regno >= ARM_D0_REGNUM && regno <= ARM_FPSCR_REGNUM) fetch_fp_register (regcache, regno); + else + fetch_register (regcache, regno); } else { @@ -473,14 +476,15 @@ store_fp_register (const struct regcache switch (regno) { - case ARM_FPS_REGNUM: + case ARM_FPSCR_REGNUM: regcache_raw_collect (regcache, ARM_FPS_REGNUM, - (char *) &inferior_fp_registers.fpr_fpsr); + (char *) &inferior_fp_registers.fpr_vfp.vfp_fpscr); break; default: regcache_raw_collect (regcache, regno, - (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]); + (char *) inferior_fp_registers.fpr_vfp.vfp_regs + + 8 * (regno - ARM_D0_REGNUM)); break; } @@ -499,12 +503,13 @@ store_fp_regs (const struct regcache *re int regno; - for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++) - regcache_raw_collect (regcache, regno, - (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]); + for (regno = 0; regno <= 15; regno++) + regcache_raw_collect (regcache, regno + ARM_D0_REGNUM, + (char *) inferior_fp_registers.fpr_vfp.vfp_regs + + 8 * regno); - regcache_raw_collect (regcache, ARM_FPS_REGNUM, - (char *) &inferior_fp_registers.fpr_fpsr); + regcache_raw_collect (regcache, ARM_FPSCR_REGNUM, + (char *) &inferior_fp_registers.fpr_vfp.vfp_fpscr); ret = ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), (PTRACE_TYPE_ARG3) &inferior_fp_registers, TIDGET (inferior_ptid)); @@ -519,10 +524,10 @@ armnbsd_store_registers (struct target_o { if (regno >= 0) { - if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM) - store_register (regcache, regno); - else + if (regno >= ARM_D0_REGNUM && regno <= ARM_FPSCR_REGNUM) store_fp_register (regcache, regno); + else + store_register (regcache, regno); } else { @@ -547,7 +552,7 @@ fetch_core_registers (struct regcache *r CORE_ADDR r_pc; arm_supply_gregset (regcache, &core_reg->intreg); - arm_supply_fparegset (regcache, &core_reg->freg); + arm_supply_vfpregset (regcache, &core_reg->freg); } static void @@ -556,7 +561,7 @@ fetch_elfcore_registers (struct regcache int which, CORE_ADDR ignore) { struct reg gregset; - struct fpreg fparegset; + struct fpreg vfpregset; switch (which) { @@ -579,8 +584,8 @@ fetch_elfcore_registers (struct regcache { /* The memcpy may be unnecessary, but we can't really be sure of the alignment of the data in the core file. */ - memcpy (&fparegset, core_reg_sect, sizeof (fparegset)); - arm_supply_fparegset (regcache, &fparegset); + memcpy (&vfpregset, core_reg_sect, sizeof (vfpregset)); + arm_supply_vfpregset (regcache, &vfpregset); } break;