This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFA: reorder initializations in rs6000_gdbarch_init


The current code leaves some fields of the tdep structure
uninitialized until the per-mach switch, and then leaves it up to each
case to remember to initialize everything.

This changes the code to initialize everything to neutral values, and
then let each case override the values that are inappropriate.

This fixes the fact that the bfd_mach_ppc_e500 case leaves
ppc_ev0_regnum and ppc_ev31_regnum uninitialized, although I don't
know that that causes any actual misbehavior.  The real motivation is
that it clears the way for the e500 code to override the register
offsets.

2004-05-17  Jim Blandy  <jimb@redhat.com>

	* rs6000-tdep.c (rs6000_gdbarch_init): Initialize tdep fields
	before the mach-specific switch, and then let the individual cases
	override the defaults, rather than leaving them uninitialized
	until the switch and then setting them in each case.

Index: gdb/rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.205
diff -c -p -r1.205 rs6000-tdep.c
*** gdb/rs6000-tdep.c	15 May 2004 05:57:16 -0000	1.205
--- gdb/rs6000-tdep.c	17 May 2004 21:49:54 -0000
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2821,2826 ****
--- 2821,2830 ----
      tdep->ppc_mq_regnum = -1;
    tdep->ppc_fp0_regnum = 32;
    tdep->ppc_fpscr_regnum = power ? 71 : 70;
+   tdep->ppc_vr0_regnum = -1;
+   tdep->ppc_vrsave_regnum = -1;
+   tdep->ppc_ev0_regnum = -1;
+   tdep->ppc_ev31_regnum = -1;
  
    set_gdbarch_pc_regnum (gdbarch, 64);
    set_gdbarch_sp_regnum (gdbarch, 1);
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2835,2854 ****
        set_gdbarch_deprecated_store_return_value (gdbarch, rs6000_store_return_value);
      }
  
    if (v->arch == bfd_arch_powerpc)
      switch (v->mach)
        {
        case bfd_mach_ppc: 
  	tdep->ppc_vr0_regnum = 71;
  	tdep->ppc_vrsave_regnum = 104;
- 	tdep->ppc_ev0_regnum = -1;
- 	tdep->ppc_ev31_regnum = -1;
  	break;
        case bfd_mach_ppc_7400:
  	tdep->ppc_vr0_regnum = 119;
  	tdep->ppc_vrsave_regnum = 152;
- 	tdep->ppc_ev0_regnum = -1;
- 	tdep->ppc_ev31_regnum = -1;
  	break;
        case bfd_mach_ppc_e500:
          tdep->ppc_gp0_regnum = 41;
--- 2839,2870 ----
        set_gdbarch_deprecated_store_return_value (gdbarch, rs6000_store_return_value);
      }
  
+   /* Set lr_frame_offset.  */
+   if (wordsize == 8)
+     tdep->lr_frame_offset = 16;
+   else if (sysv_abi)
+     tdep->lr_frame_offset = 4;
+   else
+     tdep->lr_frame_offset = 8;
+ 
+   /* Calculate byte offsets in raw register array.  */
+   tdep->regoff = xmalloc (v->num_tot_regs * sizeof (int));
+   for (i = off = 0; i < v->num_tot_regs; i++)
+     {
+       tdep->regoff[i] = off;
+       off += regsize (v->regs + i, wordsize);
+     }
+ 
    if (v->arch == bfd_arch_powerpc)
      switch (v->mach)
        {
        case bfd_mach_ppc: 
  	tdep->ppc_vr0_regnum = 71;
  	tdep->ppc_vrsave_regnum = 104;
  	break;
        case bfd_mach_ppc_7400:
  	tdep->ppc_vr0_regnum = 119;
  	tdep->ppc_vrsave_regnum = 152;
  	break;
        case bfd_mach_ppc_e500:
          tdep->ppc_gp0_regnum = 41;
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2868,2899 ****
          set_gdbarch_pseudo_register_read (gdbarch, e500_pseudo_register_read);
          set_gdbarch_pseudo_register_write (gdbarch, e500_pseudo_register_write);
  	break;
-       default:
- 	tdep->ppc_vr0_regnum = -1;
- 	tdep->ppc_vrsave_regnum = -1;
- 	tdep->ppc_ev0_regnum = -1;
- 	tdep->ppc_ev31_regnum = -1;
- 	break;
        }   
  
    /* Sanity check on registers.  */
    gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0);
- 
-   /* Set lr_frame_offset.  */
-   if (wordsize == 8)
-     tdep->lr_frame_offset = 16;
-   else if (sysv_abi)
-     tdep->lr_frame_offset = 4;
-   else
-     tdep->lr_frame_offset = 8;
- 
-   /* Calculate byte offsets in raw register array.  */
-   tdep->regoff = xmalloc (v->num_tot_regs * sizeof (int));
-   for (i = off = 0; i < v->num_tot_regs; i++)
-     {
-       tdep->regoff[i] = off;
-       off += regsize (v->regs + i, wordsize);
-     }
  
    /* Select instruction printer.  */
    if (arch == power)
--- 2884,2893 ----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]