* aix-thread.c (supply_gprs64, fetch_regs_user_thread)
authorJim Blandy <jimb@codesourcery.com>
Thu, 13 May 2004 19:27:07 +0000 (19:27 +0000)
committerJim Blandy <jimb@codesourcery.com>
Thu, 13 May 2004 19:27:07 +0000 (19:27 +0000)
(store_regs_user_thread): Use tdep->ppc_gp0_regnum, instead
of assuming that the gprs are numbered starting with zero.
* ppc-linux-nat.c (fill_gregset): Same.
* ppc-linux-tdep.c (ppc_linux_supply_gregset): Same.
* ppcnbsd-nat.c (getregs_supplies): Same.
* ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_fill_reg): Same.
* rs6000-nat.c (fetch_core_registers): Same.
* rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset): Same.

gdb/ChangeLog
gdb/aix-thread.c
gdb/ppc-linux-nat.c
gdb/ppc-linux-tdep.c
gdb/ppcnbsd-nat.c
gdb/ppcnbsd-tdep.c
gdb/rs6000-nat.c
gdb/rs6000-tdep.c

index 5f39f2ff4a20e47189ab519ac656eb5c9e35c240..151f4f3446a800aabeaaff1105177581eafc8925 100644 (file)
@@ -1,3 +1,15 @@
+2004-05-13  Jim Blandy  <jimb@redhat.com>
+
+       * aix-thread.c (supply_gprs64, fetch_regs_user_thread)
+       (store_regs_user_thread): Use tdep->ppc_gp0_regnum, instead
+       of assuming that the gprs are numbered starting with zero.
+       * ppc-linux-nat.c (fill_gregset): Same.
+       * ppc-linux-tdep.c (ppc_linux_supply_gregset): Same.
+       * ppcnbsd-nat.c (getregs_supplies): Same.
+       * ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_fill_reg): Same.
+       * rs6000-nat.c (fetch_core_registers): Same.
+       * rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset): Same.
+
 2004-05-07  Michael Snyder  <msnyder@redhat.com>
 
        * tracepoint.c (scope_info): Add handling for LOC_COMPUTED,
index dcaa3fbab70b4986fb58717955b146e2b3118f99..0f83edf548299a8635e75c77534a86fa3fd77991 100644 (file)
@@ -1001,10 +1001,11 @@ aix_thread_wait (ptid_t ptid, struct target_waitstatus *status)
 static void
 supply_gprs64 (uint64_t *vals)
 {
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
   int regno;
 
   for (regno = 0; regno < 32; regno++)
-    supply_register (regno, (char *) (vals + regno));
+    supply_register (tdep->ppc_gp0_regnum + regno, (char *) (vals + regno));
 }
 
 /* Record that 32-bit register REGNO contains VAL.  */
@@ -1098,6 +1099,7 @@ supply_sprs32 (uint32_t iar, uint32_t msr, uint32_t cr,
 static void
 fetch_regs_user_thread (pthdb_pthread_t pdtid)
 {
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
   int status, i;
   pthdb_context_t ctx;
 
@@ -1115,7 +1117,7 @@ fetch_regs_user_thread (pthdb_pthread_t pdtid)
     supply_gprs64 (ctx.gpr);
   else
     for (i = 0; i < 32; i++)
-      supply_reg32 (i, ctx.gpr[i]);
+      supply_reg32 (tdep->ppc_gp0_regnum + i, ctx.gpr[i]);
 
   /* Floating-point registers.  */
 
@@ -1180,7 +1182,7 @@ fetch_regs_kernel_thread (int regno, pthdb_tid_t tid)
          if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
            memset (gprs32, 0, sizeof (gprs32));
          for (i = 0; i < 32; i++)
-           supply_reg32 (i, gprs32[i]);
+           supply_reg32 (tdep->ppc_gp0_regnum + i, gprs32[i]);
        }
     }
 
@@ -1369,6 +1371,7 @@ fill_sprs32 (unsigned long *iar, unsigned long *msr, unsigned long *cr,
 static void
 store_regs_user_thread (pthdb_pthread_t pdtid)
 {
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
   int status, i;
   pthdb_context_t ctx;
   uint32_t int32;
@@ -1389,16 +1392,16 @@ store_regs_user_thread (pthdb_pthread_t pdtid)
   /* Collect general-purpose register values from the regcache.  */
 
   for (i = 0; i < 32; i++)
-    if (register_cached (i))
+    if (register_cached (tdep->ppc_gp0_regnum + i))
       {
        if (arch64)
          {
-           regcache_collect (i, (void *) &int64);
+           regcache_collect (tdep->ppc_gp0_regnum + i, (void *) &int64);
            ctx.gpr[i] = int64;
          }
        else
          {
-           regcache_collect (i, (void *) &int32);
+           regcache_collect (tdep->ppc_gp0_regnum + i, (void *) &int32);
            ctx.gpr[i] = int32;
          }
       }
@@ -1421,7 +1424,6 @@ store_regs_user_thread (pthdb_pthread_t pdtid)
         happens, GDB needs to be reconfigured so that longs are 32-bits.)  */
       unsigned long tmp_iar, tmp_msr, tmp_cr, tmp_lr, tmp_ctr, tmp_xer,
                     tmp_fpscr;
-      struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
 
       fill_sprs32 (&tmp_iar, &tmp_msr, &tmp_cr, &tmp_lr, &tmp_ctr, &tmp_xer,
                    &tmp_fpscr);
index 460d48abf30bc3d63bd5a720f2534a82e0ce8282..72912f2e4bb68d7ced4f947405dc52c24bbe72b7 100644 (file)
@@ -592,8 +592,8 @@ fill_gregset (gdb_gregset_t *gregsetp, int regno)
 
   for (regi = 0; regi < 32; regi++)
     {
-      if ((regno == -1) || regno == regi)
-       right_fill_reg (regi, (regp + PT_R0 + regi));
+      if ((regno == -1) || regno == tdep->ppc_gp0_regnum + regi)
+       right_fill_reg (tdep->ppc_gp0_regnum + regi, (regp + PT_R0 + regi));
     }
 
   if ((regno == -1) || regno == PC_REGNUM)
index 49f4ad63f21ff6738f5d5ba3a4ff3c59062a94f9..a6e75644028a3213609fcb57a51f0a94da9bbb76 100644 (file)
@@ -861,7 +861,9 @@ ppc_linux_supply_gregset (struct regcache *regcache,
   const bfd_byte *buf = gregs;
 
   for (regi = 0; regi < 32; regi++)
-    right_supply_register (regcache, wordsize, regi, buf + wordsize * regi);
+    right_supply_register (regcache, wordsize,
+                           regcache_tdep->ppc_gp0_regnum + regi,
+                           buf + wordsize * regi);
 
   right_supply_register (regcache, wordsize, gdbarch_pc_regnum (regcache_arch),
                         buf + wordsize * PPC_LINUX_PT_NIP);
index 037b8d7d3bea8832594922856038960c7c7b8bbb..7b22b12d1ecb6e5a2902cff9ed1308a64eada292 100644 (file)
@@ -36,7 +36,8 @@ getregs_supplies (int regno)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
 
-  return ((regno >= 0 && regno <= 31)
+  return ((regno >= tdep->ppc_gp0_regnum
+           && regno < tdep->ppc_gp0_regnum + ppc_num_gprs)
           || regno == tdep->ppc_lr_regnum
           || regno == tdep->ppc_cr_regnum
           || regno == tdep->ppc_xer_regnum
index 07652924ee7522100907e6d4a27e0a44e817df94..a00d24abe0dc27ad0699c5d7cb64e964934a13bb 100644 (file)
@@ -57,8 +57,9 @@ ppcnbsd_supply_reg (char *regs, int regno)
 
   for (i = 0; i <= 31; i++)
     {
-      if (regno == i || regno == -1)
-       supply_register (i, regs + REG_FIXREG_OFFSET (i));
+      if (regno == tdep->ppc_gp0_regnum + i || regno == -1)
+       supply_register (tdep->ppc_gp0_regnum + i,
+                         regs + REG_FIXREG_OFFSET (i));
     }
 
   if (regno == tdep->ppc_lr_regnum || regno == -1)
@@ -85,8 +86,9 @@ ppcnbsd_fill_reg (char *regs, int regno)
 
   for (i = 0; i <= 31; i++)
     {
-      if (regno == i || regno == -1)
-       regcache_collect (i, regs + REG_FIXREG_OFFSET (i));
+      if (regno == tdep->ppc_gp0_regnum + i || regno == -1)
+       regcache_collect (tdep->ppc_gp0_regnum + i,
+                          regs + REG_FIXREG_OFFSET (i));
     }
 
   if (regno == tdep->ppc_lr_regnum || regno == -1)
index 5fbf33435085a454b1308ddc501e7c9e2863bbe4..8e24bed0b06dd5bf68f23bf7ff670905ec9eff20 100644 (file)
@@ -587,7 +587,8 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
   if (ARCH64 ())
     {
       for (regi = 0; regi < 32; regi++)
-        supply_register (regi, (char *) &regs->r64.gpr[regi]);
+        supply_register (tdep->ppc_gp0_regnum + regi,
+                         (char *) &regs->r64.gpr[regi]);
 
       if (tdep->ppc_fp0_regnum >= 0)
         for (regi = 0; regi < 32; regi++)
@@ -606,7 +607,8 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
   else
     {
       for (regi = 0; regi < 32; regi++)
-        supply_register (regi, (char *) &regs->r32.gpr[regi]);
+        supply_register (tdep->ppc_gp0_regnum + regi,
+                         (char *) &regs->r32.gpr[regi]);
 
       if (tdep->ppc_fp0_regnum >= 0)
         for (regi = 0; regi < 32; regi++)
index 5879c2cb64a638754ffc725b9ccd3e7c5ac3d5ae..4f2190b77f3243fbd4df94c5a2a37d5a9e7cd077 100644 (file)
@@ -185,7 +185,9 @@ ppc_supply_gregset (const struct regset *regset, struct regcache *regcache,
   size_t offset;
   int i;
 
-  for (i = 0, offset = offsets->r0_offset; i < 32; i++, offset += 4)
+  for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
+       i < tdep->ppc_gp0_regnum + 32;
+       i++, offset += 4)
     {
       if (regnum == -1 || regnum == i)
        ppc_supply_reg (regcache, i, gregs, offset);
@@ -259,7 +261,9 @@ ppc_collect_gregset (const struct regset *regset,
   int i;
 
   offset = offsets->r0_offset;
-  for (i = 0; i < 32; i++, offset += 4)
+  for (i = tdep->ppc_gp0_regnum;
+       i < tdep->ppc_gp0_regnum + 32;
+       i++, offset += 4)
     {
       if (regnum == -1 || regnum == i)
        ppc_collect_reg (regcache, i, gregs, offset);