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;
 

Reply via email to