Delete DEFAULT_LR_SAVE.
authorKevin Buettner <kevinb@redhat.com>
Fri, 12 Apr 2002 19:48:37 +0000 (19:48 +0000)
committerKevin Buettner <kevinb@redhat.com>
Fri, 12 Apr 2002 19:48:37 +0000 (19:48 +0000)
gdb/ChangeLog
gdb/config/powerpc/tm-ppc-eabi.h
gdb/config/rs6000/tm-rs6000.h
gdb/ppc-tdep.h
gdb/rs6000-tdep.c

index d3fa62eddd67e01f5b36c842403656d2e4fb5d97..aa4b1dbb12c46356310e126a2698aa314741dcb8 100644 (file)
@@ -1,3 +1,12 @@
+2002-04-12  Kevin Buettner  <kevinb@redhat.com>
+
+       * ppc-tdep.h (struct gdbarch_tdep): Add new member ``lr_frame_offset''.
+       * rs6000-tdep.c (rs6000_frame_saved_pc): Use ``lr_frame_offset''
+       from tdep struct instead of DEFAULT_LR_SAVE.
+       (rs6000_gdbarch_init): Initialize ``lr_frame_offset''.
+       * config/powerpc/tm-ppc-eabi.h (DEFAULT_LR_SAVE): Delete.
+       * config/rs6000/tm-rs6000.h (DEFAULT_LR_SAVE): Delete.
+
 2002-04-12  Michael Snyder  <msnyder@redhat.com>
 
        * source.c: White space fix-up.
index 1e6a05366c7c7b53e170b2ca7eac1d9dad2f7e2d..e49b2bd0c9774914bfde88e1ac51760289b574ea 100644 (file)
@@ -28,9 +28,6 @@
 #undef SOFTWARE_SINGLE_STEP_P
 #define SOFTWARE_SINGLE_STEP_P() 0
 
-#undef DEFAULT_LR_SAVE
-#define        DEFAULT_LR_SAVE 4       /* eabi saves LR at 4 off of SP */
-
 #undef PROCESS_LINENUMBER_HOOK
 
 #undef TEXT_SEGMENT_BASE
index 015a5928b6f0cfee4bd9678602e2ee5790f8b73e..202ac7751a7980e0bf25109b0a373959c172856d 100644 (file)
@@ -93,9 +93,6 @@ extern void aix_process_linenos (void);
              prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
 #define INIT_FRAME_PC(fromleaf, prev)  /* nothing */
 
-/* Default offset from SP where the LR is stored */
-#define        DEFAULT_LR_SAVE 8
-
 /* Flag for machine-specific stuff in shared files.  FIXME */
 #define IBM6000_TARGET
 
index ec64514321f369df28c3bcdd429c8d613cb65688..5dc2db25d36fe00be29fae82b2bc6e66c74c2793 100644 (file)
@@ -67,6 +67,8 @@ struct gdbarch_tdep
     int ppc_mq_regnum;         /* Multiply/Divide extension register */
     int ppc_vr0_regnum;                /* First AltiVec register */
     int ppc_vrsave_regnum;     /* Last AltiVec register */
+    int lr_frame_offset;       /* Offset to ABI specific location where
+                                   link register is saved.  */
 };
 
 #endif
index 86c07f426615e40334b998ba16fbd9d0892bf6f2..f1649d011e6375d64ef82eed42b56dc1f2622835 100644 (file)
@@ -1319,7 +1319,8 @@ rs6000_frame_saved_pc (struct frame_info *fi)
 {
   CORE_ADDR func_start;
   struct rs6000_framedata fdata;
-  int wordsize = TDEP->wordsize;
+  struct gdbarch_tdep *tdep = TDEP;
+  int wordsize = tdep->wordsize;
 
   if (fi->signal_handler_caller)
     return read_memory_addr (fi->frame + SIG_FRAME_PC_OFFSET, wordsize);
@@ -1342,7 +1343,7 @@ rs6000_frame_saved_pc (struct frame_info *fi)
        return read_memory_addr (fi->next->frame + SIG_FRAME_LR_OFFSET,
                                 wordsize);
       else
-       return read_memory_addr (FRAME_CHAIN (fi) + DEFAULT_LR_SAVE,
+       return read_memory_addr (FRAME_CHAIN (fi) + tdep->lr_frame_offset,
                                 wordsize);
     }
 
@@ -2585,7 +2586,15 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
        break;
       }   
 
-  /* Calculate byte offsets in raw register array. */
+  /* 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->nregs * sizeof (int));
   for (i = off = 0; i < v->nregs; i++)
     {