From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: RFA: RS6000: Use ppc_num_gprs and ppc_num_fprs where appropriate Date: Thu, 13 May 2004 01:12:00 -0000 Message-id: X-SW-Source: 2004-05/msg00396.html 2004-05-12 Jim Blandy * aix-thread.c (pdc_read_regs, supply_gprs64, supply_fprs) (fetch_regs_user_thread, fetch_regs_kernel_thread) (store_regs_user_thread, store_regs_kernel_thread): Use ppc_num_gprs and ppc_num_fprs instead of '32' and '31'. * ppc-linux-nat.c (fill_gregset): Same. * ppc-linux-tdep.c (ppc_linux_supply_gregset) (ppc_linux_sigtramp_cache): Same. * ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_fill_reg) (ppcnbsd_sigtramp_cache_init): Same. * rs6000-nat.c (fetch_core_registers): Same. * rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset) (rs6000_frame_cache): Same. *** gdb/aix-thread.c 2004-05-09 11:23:33.000000000 -0500 --- gdb/aix-thread.c 2004-05-09 11:24:22.000000000 -0500 *************** pdc_read_regs (pthdb_user_t user, *** 338,346 **** this is needed, I have implemented what I think it should do, however this code is untested. */ ! uint64_t gprs64[32]; ! uint32_t gprs32[32]; ! double fprs[32]; struct ptxsprs sprs64; struct ptsprs sprs32; --- 338,346 ---- this is needed, I have implemented what I think it should do, however this code is untested. */ ! uint64_t gprs64[ppc_num_gprs]; ! uint32_t gprs32[ppc_num_gprs]; ! double fprs[ppc_num_fprs]; struct ptxsprs sprs64; struct ptsprs sprs32; *************** supply_gprs64 (uint64_t *vals) *** 1004,1010 **** struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int regno; ! for (regno = 0; regno < 32; regno++) supply_register (tdep->ppc_gp0_regnum + regno, (char *) (vals + regno)); } --- 1004,1010 ---- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int regno; ! for (regno = 0; regno < ppc_num_gprs; regno++) supply_register (tdep->ppc_gp0_regnum + regno, (char *) (vals + regno)); } *************** supply_fprs (double *vals) *** 1028,1034 **** floating-point registers. */ gdb_assert (ppc_floating_point_p (current_gdbarch)); ! for (regno = 0; regno < 32; regno++) supply_register (regno + tdep->ppc_fp0_regnum, (char *) (vals + regno)); } --- 1028,1034 ---- floating-point registers. */ gdb_assert (ppc_floating_point_p (current_gdbarch)); ! for (regno = 0; regno < ppc_num_gprs; regno++) supply_register (regno + tdep->ppc_fp0_regnum, (char *) (vals + regno)); } *************** fetch_regs_user_thread (pthdb_pthread_t *** 1116,1122 **** if (arch64) supply_gprs64 (ctx.gpr); else ! for (i = 0; i < 32; i++) supply_reg32 (tdep->ppc_gp0_regnum + i, ctx.gpr[i]); /* Floating-point registers. */ --- 1116,1122 ---- if (arch64) supply_gprs64 (ctx.gpr); else ! for (i = 0; i < ppc_num_gprs; i++) supply_reg32 (tdep->ppc_gp0_regnum + i, ctx.gpr[i]); /* Floating-point registers. */ *************** static void *** 1153,1161 **** fetch_regs_kernel_thread (int regno, pthdb_tid_t tid) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! uint64_t gprs64[32]; ! uint32_t gprs32[32]; ! double fprs[32]; struct ptxsprs sprs64; struct ptsprs sprs32; int i; --- 1153,1161 ---- fetch_regs_kernel_thread (int regno, pthdb_tid_t tid) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! uint64_t gprs64[ppc_num_gprs]; ! uint32_t gprs32[ppc_num_gprs]; ! double fprs[ppc_num_fprs]; struct ptxsprs sprs64; struct ptsprs sprs32; int i; *************** fetch_regs_kernel_thread (int regno, pth *** 1181,1187 **** { if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL)) memset (gprs32, 0, sizeof (gprs32)); ! for (i = 0; i < 32; i++) supply_reg32 (tdep->ppc_gp0_regnum + i, gprs32[i]); } } --- 1181,1187 ---- { if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL)) memset (gprs32, 0, sizeof (gprs32)); ! for (i = 0; i < ppc_num_gprs; i++) supply_reg32 (tdep->ppc_gp0_regnum + i, gprs32[i]); } } *************** store_regs_user_thread (pthdb_pthread_t *** 1391,1397 **** /* Collect general-purpose register values from the regcache. */ ! for (i = 0; i < 32; i++) if (register_cached (tdep->ppc_gp0_regnum + i)) { if (arch64) --- 1391,1397 ---- /* Collect general-purpose register values from the regcache. */ ! for (i = 0; i < ppc_num_gprs; i++) if (register_cached (tdep->ppc_gp0_regnum + i)) { if (arch64) *************** static void *** 1461,1469 **** store_regs_kernel_thread (int regno, pthdb_tid_t tid) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! uint64_t gprs64[32]; ! uint32_t gprs32[32]; ! double fprs[32]; struct ptxsprs sprs64; struct ptsprs sprs32; int i; --- 1461,1469 ---- store_regs_kernel_thread (int regno, pthdb_tid_t tid) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! uint64_t gprs64[ppc_num_gprs]; ! uint32_t gprs32[ppc_num_gprs]; ! double fprs[ppc_num_fprs]; struct ptxsprs sprs64; struct ptsprs sprs32; int i; *** gdb/ppc-linux-nat.c 2004-05-09 05:47:16.000000000 -0500 --- gdb/ppc-linux-nat.c 2004-05-09 05:59:06.000000000 -0500 *************** fill_gregset (gdb_gregset_t *gregsetp, i *** 590,596 **** /* Start with zeros. */ memset (regp, 0, elf_ngreg * sizeof (*regp)); ! for (regi = 0; regi < 32; regi++) { if ((regno == -1) || regno == tdep->ppc_gp0_regnum + regi) right_fill_reg (tdep->ppc_gp0_regnum + regi, (regp + PT_R0 + regi)); --- 590,596 ---- /* Start with zeros. */ memset (regp, 0, elf_ngreg * sizeof (*regp)); ! for (regi = 0; regi < ppc_num_gprs; regi++) { if ((regno == -1) || regno == tdep->ppc_gp0_regnum + regi) right_fill_reg (tdep->ppc_gp0_regnum + regi, (regp + PT_R0 + regi)); *** gdb/ppc-linux-tdep.c 2004-05-09 06:00:20.000000000 -0500 --- gdb/ppc-linux-tdep.c 2004-05-09 05:57:40.000000000 -0500 *************** ppc_linux_supply_gregset (struct regcach *** 860,866 **** struct gdbarch_tdep *regcache_tdep = gdbarch_tdep (regcache_arch); const bfd_byte *buf = gregs; ! for (regi = 0; regi < 32; regi++) right_supply_register (regcache, wordsize, regcache_tdep->ppc_gp0_regnum + regi, buf + wordsize * regi); --- 860,866 ---- struct gdbarch_tdep *regcache_tdep = gdbarch_tdep (regcache_arch); const bfd_byte *buf = gregs; ! for (regi = 0; regi < ppc_num_gprs; regi++) right_supply_register (regcache, wordsize, regcache_tdep->ppc_gp0_regnum + regi, buf + wordsize * regi); *************** ppc_linux_sigtramp_cache (struct frame_i *** 934,940 **** fpregs = gpregs + 48 * tdep->wordsize; /* General purpose. */ ! for (i = 0; i < 32; i++) { int regnum = i + tdep->ppc_gp0_regnum; cache->saved_regs[regnum].addr = gpregs + i * tdep->wordsize; --- 934,940 ---- fpregs = gpregs + 48 * tdep->wordsize; /* General purpose. */ ! for (i = 0; i < ppc_num_gprs; i++) { int regnum = i + tdep->ppc_gp0_regnum; cache->saved_regs[regnum].addr = gpregs + i * tdep->wordsize; *** gdb/ppcnbsd-tdep.c 2004-05-09 05:50:03.000000000 -0500 --- gdb/ppcnbsd-tdep.c 2004-05-09 11:26:14.000000000 -0500 *************** ppcnbsd_supply_reg (char *regs, int regn *** 55,61 **** struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int i; ! for (i = 0; i <= 31; i++) { if (regno == tdep->ppc_gp0_regnum + i || regno == -1) supply_register (tdep->ppc_gp0_regnum + i, --- 55,61 ---- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int i; ! for (i = 0; i < ppc_num_gprs; i++) { if (regno == tdep->ppc_gp0_regnum + i || regno == -1) supply_register (tdep->ppc_gp0_regnum + i, *************** ppcnbsd_fill_reg (char *regs, int regno) *** 84,90 **** struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int i; ! for (i = 0; i <= 31; i++) { if (regno == tdep->ppc_gp0_regnum + i || regno == -1) regcache_collect (tdep->ppc_gp0_regnum + i, --- 84,90 ---- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); int i; ! for (i = 0; i < ppc_num_gprs; i++) { if (regno == tdep->ppc_gp0_regnum + i || regno == -1) regcache_collect (tdep->ppc_gp0_regnum + i, *************** ppcnbsd_sigtramp_cache_init (const struc *** 258,264 **** base = frame_unwind_register_unsigned (next_frame, SP_REGNUM); offset = base + 0x18 + 2 * tdep->wordsize; ! for (i = 0; i < 32; i++) { int regnum = i + tdep->ppc_gp0_regnum; trad_frame_set_reg_addr (this_cache, regnum, offset); --- 258,264 ---- base = frame_unwind_register_unsigned (next_frame, SP_REGNUM); offset = base + 0x18 + 2 * tdep->wordsize; ! for (i = 0; i < ppc_num_gprs; i++) { int regnum = i + tdep->ppc_gp0_regnum; trad_frame_set_reg_addr (this_cache, regnum, offset); *** gdb/rs6000-nat.c 2004-05-09 05:32:07.000000000 -0500 --- gdb/rs6000-nat.c 2004-05-08 20:52:02.000000000 -0500 *************** fetch_core_registers (char *core_reg_sec *** 586,597 **** if (ARCH64 ()) { ! for (regi = 0; regi < 32; regi++) supply_register (tdep->ppc_gp0_regnum + regi, (char *) ®s->r64.gpr[regi]); if (tdep->ppc_fp0_regnum >= 0) ! for (regi = 0; regi < 32; regi++) supply_register (tdep->ppc_fp0_regnum + regi, (char *) ®s->r64.fpr[regi]); --- 586,597 ---- if (ARCH64 ()) { ! for (regi = 0; regi < ppc_num_gprs; regi++) supply_register (tdep->ppc_gp0_regnum + regi, (char *) ®s->r64.gpr[regi]); if (tdep->ppc_fp0_regnum >= 0) ! for (regi = 0; regi < ppc_num_fprs; regi++) supply_register (tdep->ppc_fp0_regnum + regi, (char *) ®s->r64.fpr[regi]); *************** fetch_core_registers (char *core_reg_sec *** 606,617 **** } else { ! for (regi = 0; regi < 32; regi++) supply_register (tdep->ppc_gp0_regnum + regi, (char *) ®s->r32.gpr[regi]); if (tdep->ppc_fp0_regnum >= 0) ! for (regi = 0; regi < 32; regi++) supply_register (tdep->ppc_fp0_regnum + regi, (char *) ®s->r32.fpr[regi]); --- 606,617 ---- } else { ! for (regi = 0; regi < ppc_num_gprs; regi++) supply_register (tdep->ppc_gp0_regnum + regi, (char *) ®s->r32.gpr[regi]); if (tdep->ppc_fp0_regnum >= 0) ! for (regi = 0; regi < ppc_num_fprs; regi++) supply_register (tdep->ppc_fp0_regnum + regi, (char *) ®s->r32.fpr[regi]); *** gdb/rs6000-tdep.c 2004-05-09 05:43:26.000000000 -0500 --- gdb/rs6000-tdep.c 2004-05-09 05:43:52.000000000 -0500 *************** ppc_supply_gregset (const struct regset *** 186,192 **** int i; for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset; ! i < tdep->ppc_gp0_regnum + 32; i++, offset += 4) { if (regnum == -1 || regnum == i) --- 186,192 ---- int i; for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset; ! i < tdep->ppc_gp0_regnum + ppc_num_gprs; i++, offset += 4) { if (regnum == -1 || regnum == i) *************** ppc_collect_gregset (const struct regset *** 262,268 **** offset = offsets->r0_offset; for (i = tdep->ppc_gp0_regnum; ! i < tdep->ppc_gp0_regnum + 32; i++, offset += 4) { if (regnum == -1 || regnum == i) --- 262,268 ---- offset = offsets->r0_offset; for (i = tdep->ppc_gp0_regnum; ! i < tdep->ppc_gp0_regnum + ppc_num_gprs; i++, offset += 4) { if (regnum == -1 || regnum == i) *************** rs6000_frame_cache (struct frame_info *n *** 2477,2483 **** then that's strange. But we have no indices to even record the addresses under, so we just ignore it. */ if (ppc_floating_point_unit_p (gdbarch)) ! for (i = fdata.saved_fpr; i < 32; i++) { cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr; fpr_addr += 8; --- 2477,2483 ---- then that's strange. But we have no indices to even record the addresses under, so we just ignore it. */ if (ppc_floating_point_unit_p (gdbarch)) ! for (i = fdata.saved_fpr; i < ppc_num_fprs; i++) { cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr; fpr_addr += 8; *************** rs6000_frame_cache (struct frame_info *n *** 2491,2497 **** { int i; CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset; ! for (i = fdata.saved_gpr; i < 32; i++) { cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr; gpr_addr += wordsize; --- 2491,2497 ---- { int i; CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset; ! for (i = fdata.saved_gpr; i < ppc_num_fprs; i++) { cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr; gpr_addr += wordsize; *************** rs6000_frame_cache (struct frame_info *n *** 2522,2528 **** { int i; CORE_ADDR ev_addr = cache->base + fdata.ev_offset; ! for (i = fdata.saved_ev; i < 32; i++) { cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr; cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4; --- 2522,2528 ---- { int i; CORE_ADDR ev_addr = cache->base + fdata.ev_offset; ! for (i = fdata.saved_ev; i < ppc_num_gprs; i++) { cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr; cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4;