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]

Re: [PATCH RFA] Zap EXTRA_FRAME_INFO for ARM target


Andrew Cagney wrote:
> 
> > The patch below represents a small step on the way to multiarching the
> > ARM target.  It eliminates the use of the deprecated EXTRA_FRAME_INFO
> > macro for describing a frame.  Instead, it now uses the ``extra_info''
> > and ``saved_regs'' members in the frame_info struct.
> 
> Kevin, Richard, Fernando, Scott,
> 
> Jason Thorpe (I assume unintentionally) set a precident by treating as
> obvious the patch transforming EXTRA_FRAME_INFO as part of multi-arching
> the alpha.
> 
> Thinking about it Jason was correct in taking this aproach (I suspect
> I've done this with other targets).  A patch making the single
> independant change of eliminating EXTRA_FRAME_INFO is mechanical, and as
> such, can be treated as obvious.  Clearly it is assumed that the person
> committing the change is performing before/after testing to ensure no
> regressions occure.  A person looking to commit such a change is also,
> obviously, strongly advised, to not try and make the change somehow
> dependant on other changes, doing that will just bog down the process.
> 
> If GDB doesn't take this approach it is very quickly going to find that
> the multi-arch task gets bogged down waiting on approval of trivial changes.
> 
> With that in mind I think either Kevin's or Richard's EXTRA_FRAME_INFO
> patch (minus any dependencies) should be committed.  The only proviso
> being that they are before/after tested and show no regressions.
> 
> enjoy,
> Andrew
> 

I agree (with the same considerations as the ones you've stated).

We've always done that: once one of these cleanup forms are established,
they are applied as obvious everywhere they are needed (with the proper
safety considerations).

Fernando


> >       * tm-arm.h (EXTRA_FRAME_INFO): Delete definition.
> >       (arm_frame_init_saved_regs): Declare.
> >       (FRAME_INIT_SAVED_REGS): Define.
> >       (arm_frame_find_saved_regs): Delete declaration.
> >       (FRAME_FIND_SAVED_REGS): Delete definition.
> >       * arm-tdep.c (gdb_assert.h): Include.
> >       (struct frame_extra_info): Delete fsr member.
> >       (thumb_scan_prologue, check_prologue_cache, save_prologue_cache)
> >       (arm_scan_prologue, arm_find_callers_reg, arm_frame_chain)
> >       (arm_init_extra_frame_info, arm_push_dummy_frame): Use
> >       ``saved_regs'' in place of ``fsr.regs''.  Use
> >       ``extra_info->framesize'' in place of just ``framesize''.
> >       Likewise for ``frameoffset'' and ``framereg''.
> >       (arm_frame_init_saved_regs): New function.
> >       (arm_frame_find_saved_regs): Delete.
> >       (_initialize_arm_tdep): Allocate ``extra_info'' and ``saved_regs''
> >       structs for the prologue cache.
> >       (arm_frame_chain): Likewise for the hand created caller's
> >       frame_info struct.
> >       (arm_init_extra_frame_info): Likewise for the frame_info struct
> >       undergoing initialization.
> >
> > diff -upr ../../../sourceware-arm1+2/src/gdb/arm-tdep.c ./arm-tdep.c
> > --- ../../../sourceware-arm1+2/src/gdb/arm-tdep.c     Sat Dec 15 00:13:02 2001
> > +++ ./arm-tdep.c      Sat Dec 15 00:30:34 2001
> > @@ -33,6 +33,7 @@
> >  #include "doublest.h"
> >  #include "value.h"
> >  #include "solib-svr4.h"
> > +#include "gdb_assert.h"
> >
> >  /* Each OS has a different mechanism for accessing the various
> >     registers stored in the sigcontext structure.
> > @@ -108,7 +109,6 @@ static void convert_from_extended (void
> >
> >  struct frame_extra_info
> >    {
> > -    struct frame_saved_regs fsr;
> >      int framesize;
> >      int frameoffset;
> >      int framereg;
> > @@ -534,7 +534,7 @@ thumb_scan_prologue (struct frame_info *
> >       frame pointer, adjust the stack pointer, and save registers.
> >       Do this until all basic prolog instructions are found.  */
> >
> > -  fi->framesize = 0;
> > +  fi->extra_info->framesize = 0;
> >    for (current_pc = prologue_start;
> >         (current_pc < prologue_end) && ((findmask & 7) != 7);
> >         current_pc += 2)
> > @@ -557,8 +557,8 @@ thumb_scan_prologue (struct frame_info *
> >         for (regno = LR_REGNUM; regno >= 0; regno--)
> >           if (mask & (1 << regno))
> >             {
> > -             fi->framesize += 4;
> > -             fi->fsr.regs[saved_reg[regno]] = -(fi->framesize);
> > +             fi->extra_info->framesize += 4;
> > +             fi->saved_regs[saved_reg[regno]] = -(fi->extra_info->framesize);
> >               saved_reg[regno] = regno;       /* reset saved register map */
> >             }
> >       }
> > @@ -572,22 +572,22 @@ thumb_scan_prologue (struct frame_info *
> >         offset = (insn & 0x7f) << 2;  /* get scaled offset */
> >         if (insn & 0x80)      /* is it signed? (==subtracting) */
> >           {
> > -           fi->frameoffset += offset;
> > +           fi->extra_info->frameoffset += offset;
> >             offset = -offset;
> >           }
> > -       fi->framesize -= offset;
> > +       fi->extra_info->framesize -= offset;
> >       }
> >        else if ((insn & 0xff00) == 0xaf00)    /* add r7, sp, #imm */
> >       {
> >         findmask |= 2;  /* setting of r7 found */
> > -       fi->framereg = THUMB_FP_REGNUM;
> > -       fi->frameoffset = (insn & 0xff) << 2;         /* get scaled offset */
> > +       fi->extra_info->framereg = THUMB_FP_REGNUM;
> > +       fi->extra_info->frameoffset = (insn & 0xff) << 2;             /* get scaled offset */
> >       }
> >        else if (insn == 0x466f)                       /* mov r7, sp */
> >       {
> >         findmask |= 2;  /* setting of r7 found */
> > -       fi->framereg = THUMB_FP_REGNUM;
> > -       fi->frameoffset = 0;
> > +       fi->extra_info->framereg = THUMB_FP_REGNUM;
> > +       fi->extra_info->frameoffset = 0;
> >         saved_reg[THUMB_FP_REGNUM] = SP_REGNUM;
> >       }
> >        else if ((insn & 0xffc0) == 0x4640)    /* mov r0-r7, r8-r15 */
> > @@ -627,11 +627,11 @@ check_prologue_cache (struct frame_info
> >
> >    if (fi->pc == prologue_cache.pc)
> >      {
> > -      fi->framereg = prologue_cache.framereg;
> > -      fi->framesize = prologue_cache.framesize;
> > -      fi->frameoffset = prologue_cache.frameoffset;
> > +      fi->extra_info->framereg = prologue_cache.extra_info->framereg;
> > +      fi->extra_info->framesize = prologue_cache.extra_info->framesize;
> > +      fi->extra_info->frameoffset = prologue_cache.extra_info->frameoffset;
> >        for (i = 0; i < NUM_REGS; i++)
> > -     fi->fsr.regs[i] = prologue_cache.fsr.regs[i];
> > +     fi->saved_regs[i] = prologue_cache.saved_regs[i];
> >        return 1;
> >      }
> >    else
> > @@ -647,12 +647,12 @@ save_prologue_cache (struct frame_info *
> >    int i;
> >
> >    prologue_cache.pc = fi->pc;
> > -  prologue_cache.framereg = fi->framereg;
> > -  prologue_cache.framesize = fi->framesize;
> > -  prologue_cache.frameoffset = fi->frameoffset;
> > +  prologue_cache.extra_info->framereg = fi->extra_info->framereg;
> > +  prologue_cache.extra_info->framesize = fi->extra_info->framesize;
> > +  prologue_cache.extra_info->frameoffset = fi->extra_info->frameoffset;
> >
> >    for (i = 0; i < NUM_REGS; i++)
> > -    prologue_cache.fsr.regs[i] = fi->fsr.regs[i];
> > +    prologue_cache.saved_regs[i] = fi->saved_regs[i];
> >  }
> >
> >
> > @@ -734,9 +734,9 @@ arm_scan_prologue (struct frame_info *fi
> >      return;
> >
> >    /* Assume there is no frame until proven otherwise.  */
> > -  fi->framereg = SP_REGNUM;
> > -  fi->framesize = 0;
> > -  fi->frameoffset = 0;
> > +  fi->extra_info->framereg = SP_REGNUM;
> > +  fi->extra_info->framesize = 0;
> > +  fi->extra_info->frameoffset = 0;
> >
> >    /* Check for Thumb prologue.  */
> >    if (arm_pc_is_thumb (fi->pc))
> > @@ -835,7 +835,7 @@ arm_scan_prologue (struct frame_info *fi
> >           if (mask & (1 << regno))
> >             {
> >               sp_offset -= 4;
> > -             fi->fsr.regs[regno] = sp_offset;
> > +             fi->saved_regs[regno] = sp_offset;
> >             }
> >       }
> >        else if ((insn & 0xfffff000) == 0xe24cb000)    /* sub fp, ip #n */
> > @@ -844,7 +844,7 @@ arm_scan_prologue (struct frame_info *fi
> >         unsigned rot = (insn & 0xf00) >> 7;   /* rotate amount */
> >         imm = (imm >> rot) | (imm << (32 - rot));
> >         fp_offset = -imm;
> > -       fi->framereg = FP_REGNUM;
> > +       fi->extra_info->framereg = FP_REGNUM;
> >       }
> >        else if ((insn & 0xfffff000) == 0xe24dd000)    /* sub sp, sp #n */
> >       {
> > @@ -857,7 +857,7 @@ arm_scan_prologue (struct frame_info *fi
> >       {
> >         sp_offset -= 12;
> >         regno = F0_REGNUM + ((insn >> 12) & 0x07);
> > -       fi->fsr.regs[regno] = sp_offset;
> > +       fi->saved_regs[regno] = sp_offset;
> >       }
> >        else if ((insn & 0xffbf0fff) == 0xec2d0200)    /* sfmfd f0, 4, [sp!] */
> >       {
> > @@ -884,7 +884,7 @@ arm_scan_prologue (struct frame_info *fi
> >         for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
> >           {
> >             sp_offset -= 12;
> > -           fi->fsr.regs[fp_start_reg++] = sp_offset;
> > +           fi->saved_regs[fp_start_reg++] = sp_offset;
> >           }
> >       }
> >        else if ((insn & 0xf0000000) != 0xe0000000)
> > @@ -900,11 +900,11 @@ arm_scan_prologue (struct frame_info *fi
> >    /* The frame size is just the negative of the offset (from the original SP)
> >       of the last thing thing we pushed on the stack.  The frame offset is
> >       [new FP] - [new SP].  */
> > -  fi->framesize = -sp_offset;
> > -  if (fi->framereg == FP_REGNUM)
> > -    fi->frameoffset = fp_offset - sp_offset;
> > +  fi->extra_info->framesize = -sp_offset;
> > +  if (fi->extra_info->framereg == FP_REGNUM)
> > +    fi->extra_info->frameoffset = fp_offset - sp_offset;
> >    else
> > -    fi->frameoffset = 0;
> > +    fi->extra_info->frameoffset = 0;
> >
> >    save_prologue_cache (fi);
> >  }
> > @@ -926,8 +926,8 @@ arm_find_callers_reg (struct frame_info
> >        return generic_read_register_dummy (fi->pc, fi->frame, regnum);
> >      else
> >  #endif
> > -    if (fi->fsr.regs[regnum] != 0)
> > -      return read_memory_integer (fi->fsr.regs[regnum],
> > +    if (fi->saved_regs[regnum] != 0)
> > +      return read_memory_integer (fi->saved_regs[regnum],
> >                                 REGISTER_RAW_SIZE (regnum));
> >    return read_register (regnum);
> >  }
> > @@ -970,8 +970,7 @@ arm_frame_chain (struct frame_info *fi)
> >        return 0;                      /* in _start fn, don't chain further */
> >  #endif
> >    CORE_ADDR caller_pc, fn_start;
> > -  struct frame_info caller_fi;
> > -  int framereg = fi->framereg;
> > +  int framereg = fi->extra_info->framereg;
> >
> >    if (fi->pc < LOWEST_PC)
> >      return 0;
> > @@ -988,10 +987,25 @@ arm_frame_chain (struct frame_info *fi)
> >       frame register number. */
> >    if (arm_pc_is_thumb (caller_pc) != arm_pc_is_thumb (fi->pc))
> >      {
> > +      struct frame_info caller_fi;
> > +      struct cleanup *old_chain;
> > +
> > +      /* Create a temporary frame suitable for scanning the caller's
> > +         prologue.  (Ugh.)  */
> >        memset (&caller_fi, 0, sizeof (caller_fi));
> > +      caller_fi.saved_regs = (CORE_ADDR *) xcalloc (1, SIZEOF_FRAME_SAVED_REGS);
> > +      old_chain = make_cleanup (xfree, caller_fi.saved_regs);
> > +      caller_fi.extra_info = xcalloc (1, sizeof (struct frame_extra_info));
> > +      make_cleanup (xfree, caller_fi.extra_info);
> > +
> > +      /* Now, scan the prologue and obtain the frame register.  */
> >        caller_fi.pc = caller_pc;
> >        arm_scan_prologue (&caller_fi);
> > -      framereg = caller_fi.framereg;
> > +      framereg = caller_fi.extra_info->framereg;
> > +
> > +      /* Deallocate the storage associated with the temporary frame
> > +         created above.  */
> > +      do_cleanups (old_chain);
> >      }
> >
> >    /* If the caller used a frame register, return its value.
> > @@ -999,7 +1013,7 @@ arm_frame_chain (struct frame_info *fi)
> >    if (framereg == FP_REGNUM || framereg == THUMB_FP_REGNUM)
> >      return arm_find_callers_reg (fi, framereg);
> >    else
> > -    return fi->frame + fi->framesize;
> > +    return fi->frame + fi->extra_info->framesize;
> >  }
> >
> >  /* This function actually figures out the frame address for a given pc
> > @@ -1017,19 +1031,22 @@ arm_init_extra_frame_info (int fromleaf,
> >    int reg;
> >    CORE_ADDR sp;
> >
> > +  fi->extra_info = (struct frame_extra_info *)
> > +    frame_obstack_alloc (sizeof (struct frame_extra_info));
> > +
> > +  frame_saved_regs_zalloc (fi);
> > +
> >    if (fi->next)
> >      fi->pc = FRAME_SAVED_PC (fi->next);
> >
> > -  memset (fi->fsr.regs, '\000', sizeof fi->fsr.regs);
> > -
> >  #if 0                                /* FIXME: enable this code if we convert to new call dummy scheme.  */
> >    if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
> >      {
> >        /* We need to setup fi->frame here because run_stack_dummy gets it wrong
> >           by assuming it's always FP.  */
> >        fi->frame = generic_read_register_dummy (fi->pc, fi->frame, SP_REGNUM);
> > -      fi->framesize = 0;
> > -      fi->frameoffset = 0;
> > +      fi->extra_info->framesize = 0;
> > +      fi->extra_info->frameoffset = 0;
> >        return;
> >      }
> >    else
> > @@ -1040,7 +1057,7 @@ arm_init_extra_frame_info (int fromleaf,
> >    if (!fi->next)
> >      sp = read_sp();
> >    else
> > -    sp = fi->next->frame - fi->next->frameoffset + fi->next->framesize;
> > +    sp = fi->next->frame - fi->next->extra_info->frameoffset + fi->next->extra_info->framesize;
> >
> >    /* Determine whether or not we're in a sigtramp frame.
> >       Unfortunately, it isn't sufficient to test
> > @@ -1058,14 +1075,14 @@ arm_init_extra_frame_info (int fromleaf,
> >        && (fi->signal_handler_caller || IN_SIGTRAMP (fi->pc, 0)))
> >      {
> >        for (reg = 0; reg < NUM_REGS; reg++)
> > -     fi->fsr.regs[reg] = SIGCONTEXT_REGISTER_ADDRESS (sp, fi->pc, reg);
> > +     fi->saved_regs[reg] = SIGCONTEXT_REGISTER_ADDRESS (sp, fi->pc, reg);
> >
> >        /* FIXME: What about thumb mode? */
> > -      fi->framereg = SP_REGNUM;
> > -      fi->frame = read_memory_integer (fi->fsr.regs[fi->framereg],
> > -                                       REGISTER_RAW_SIZE (fi->framereg));
> > -      fi->framesize = 0;
> > -      fi->frameoffset = 0;
> > +      fi->extra_info->framereg = SP_REGNUM;
> > +      fi->frame = read_memory_integer (fi->saved_regs[fi->extra_info->framereg],
> > +                                       REGISTER_RAW_SIZE (fi->extra_info->framereg));
> > +      fi->extra_info->framesize = 0;
> > +      fi->extra_info->frameoffset = 0;
> >
> >      }
> >    else if (PC_IN_CALL_DUMMY (fi->pc, sp, fi->frame))
> > @@ -1077,19 +1094,19 @@ arm_init_extra_frame_info (int fromleaf,
> >        rp = fi->frame - REGISTER_SIZE;
> >
> >        /* Fill in addresses of saved registers.  */
> > -      fi->fsr.regs[PS_REGNUM] = rp;
> > +      fi->saved_regs[PS_REGNUM] = rp;
> >        rp -= REGISTER_RAW_SIZE (PS_REGNUM);
> >        for (reg = PC_REGNUM; reg >= 0; reg--)
> >       {
> > -       fi->fsr.regs[reg] = rp;
> > +       fi->saved_regs[reg] = rp;
> >         rp -= REGISTER_RAW_SIZE (reg);
> >       }
> >
> > -      callers_sp = read_memory_integer (fi->fsr.regs[SP_REGNUM],
> > +      callers_sp = read_memory_integer (fi->saved_regs[SP_REGNUM],
> >                                          REGISTER_RAW_SIZE (SP_REGNUM));
> > -      fi->framereg = FP_REGNUM;
> > -      fi->framesize = callers_sp - sp;
> > -      fi->frameoffset = fi->frame - sp;
> > +      fi->extra_info->framereg = FP_REGNUM;
> > +      fi->extra_info->framesize = callers_sp - sp;
> > +      fi->extra_info->frameoffset = fi->frame - sp;
> >      }
> >    else
> >      {
> > @@ -1097,14 +1114,14 @@ arm_init_extra_frame_info (int fromleaf,
> >
> >        if (!fi->next)
> >       /* this is the innermost frame? */
> > -     fi->frame = read_register (fi->framereg);
> > -      else if (fi->framereg == FP_REGNUM || fi->framereg == THUMB_FP_REGNUM)
> > +     fi->frame = read_register (fi->extra_info->framereg);
> > +      else if (fi->extra_info->framereg == FP_REGNUM || fi->extra_info->framereg == THUMB_FP_REGNUM)
> >       {
> >         /* not the innermost frame */
> >         /* If we have an FP, the callee saved it. */
> > -       if (fi->next->fsr.regs[fi->framereg] != 0)
> > +       if (fi->next->saved_regs[fi->extra_info->framereg] != 0)
> >           fi->frame =
> > -           read_memory_integer (fi->next->fsr.regs[fi->framereg], 4);
> > +           read_memory_integer (fi->next->saved_regs[fi->extra_info->framereg], 4);
> >         else if (fromleaf)
> >           /* If we were called by a frameless fn.  then our frame is
> >              still in the frame pointer register on the board... */
> > @@ -1114,11 +1131,19 @@ arm_init_extra_frame_info (int fromleaf,
> >        /* Calculate actual addresses of saved registers using offsets
> >           determined by arm_scan_prologue.  */
> >        for (reg = 0; reg < NUM_REGS; reg++)
> > -     if (fi->fsr.regs[reg] != 0)
> > -       fi->fsr.regs[reg] += fi->frame + fi->framesize - fi->frameoffset;
> > +     if (fi->saved_regs[reg] != 0)
> > +       fi->saved_regs[reg] += fi->frame + fi->extra_info->framesize - fi->extra_info->frameoffset;
> >      }
> >  }
> >
> > +/* Initialize the saved register addresses.  There's nothing to do
> > +   here since these addresses were already computed by
> > +   arm_init_extra_frame_info().  */
> > +void
> > +arm_frame_init_saved_regs (struct frame_info *fi)
> > +{
> > +  gdb_assert (fi->extra_info != NULL && fi->saved_regs != NULL);
> > +}
> >
> >  /* Find the caller of this frame.  We do this by seeing if LR_REGNUM
> >     is saved in the stack anywhere, otherwise we get it from the
> > @@ -1136,9 +1161,9 @@ arm_frame_saved_pc (struct frame_info *f
> >      return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
> >    else
> >  #endif
> > -  if (PC_IN_CALL_DUMMY (fi->pc, fi->frame - fi->frameoffset, fi->frame))
> > +  if (PC_IN_CALL_DUMMY (fi->pc, fi->frame - fi->extra_info->frameoffset, fi->frame))
> >      {
> > -      return read_memory_integer (fi->fsr.regs[PC_REGNUM], REGISTER_RAW_SIZE (PC_REGNUM));
> > +      return read_memory_integer (fi->saved_regs[PC_REGNUM], REGISTER_RAW_SIZE (PC_REGNUM));
> >      }
> >    else
> >      {
> > @@ -1159,15 +1184,6 @@ arm_target_read_fp (void)
> >      return read_register (FP_REGNUM);        /* R11 if ARM */
> >  }
> >
> > -/* Calculate the frame offsets of the saved registers (ARM version).  */
> > -
> > -void
> > -arm_frame_find_saved_regs (struct frame_info *fi,
> > -                        struct frame_saved_regs *regaddr)
> > -{
> > -  memcpy (regaddr, &fi->fsr, sizeof (struct frame_saved_regs));
> > -}
> > -
> >  void
> >  arm_push_dummy_frame (void)
> >  {
> > @@ -1419,12 +1435,12 @@ arm_pop_frame (void)
> >  {
> >    int regnum;
> >    struct frame_info *frame = get_current_frame ();
> > -  CORE_ADDR old_SP = frame->frame - frame->frameoffset + frame->framesize;
> > +  CORE_ADDR old_SP = frame->frame - frame->extra_info->frameoffset + frame->extra_info->framesize;
> >
> >    for (regnum = 0; regnum < NUM_REGS; regnum++)
> > -    if (frame->fsr.regs[regnum] != 0)
> > +    if (frame->saved_regs[regnum] != 0)
> >        write_register (regnum,
> > -               read_memory_integer (frame->fsr.regs[regnum],
> > +               read_memory_integer (frame->saved_regs[regnum],
> >                                      REGISTER_RAW_SIZE (regnum)));
> >
> >    write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
> > @@ -2209,6 +2225,10 @@ The valid values are:\n");
> >
> >    add_com ("othernames", class_obscure, arm_othernames,
> >          "Switch to the next set of register names.");
> > +
> > +  /* Allocate extra_info and saved_regs fields in the prologue cache.  */
> > +  prologue_cache.extra_info = xcalloc (1, sizeof (struct frame_extra_info));
> > +  prologue_cache.saved_regs = xcalloc (1, SIZEOF_FRAME_SAVED_REGS);
> >  }
> >
> >  /* Test whether the coff symbol specific value corresponds to a Thumb
> > diff -upr ../../../sourceware-arm1+2/src/gdb/config/arm/tm-arm.h ./config/arm/tm-arm.h
> > --- ../../../sourceware-arm1+2/src/gdb/config/arm/tm-arm.h    Fri Nov 16 10:03:27 2001
> > +++ ./config/arm/tm-arm.h     Sat Dec 15 00:30:34 2001
> > @@ -318,22 +318,13 @@ extern void convert_to_extended (void *d
> >  #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) (!(gcc_p))
> >
> >
> > -/* Define other aspects of the stack frame.  We keep the offsets of
> > -   all saved registers, 'cause we need 'em a lot!  We also keep the
> > -   current size of the stack frame, and the offset of the frame
> > -   pointer from the stack pointer (for frameless functions, and when
> > -   we're still in the prologue of a function with a frame) */
> > -
> > -#define EXTRA_FRAME_INFO     \
> > -  struct frame_saved_regs fsr;       \
> > -  int framesize;             \
> > -  int frameoffset;           \
> > -  int framereg;
> > -
> >  extern void arm_init_extra_frame_info (int fromleaf, struct frame_info * fi);
> >  #define INIT_EXTRA_FRAME_INFO(fromleaf, fi) \
> >       arm_init_extra_frame_info ((fromleaf), (fi))
> >
> > +extern void arm_frame_init_saved_regs (struct frame_info *fi);
> > +#define FRAME_INIT_SAVED_REGS(fi) arm_frame_init_saved_regs (fi)
> > +
> >  /* Return the frame address.  On ARM, it is R11; on Thumb it is R7.  */
> >  CORE_ADDR arm_target_read_fp (void);
> >  #define TARGET_READ_FP() arm_target_read_fp ()
> > @@ -393,20 +384,6 @@ extern CORE_ADDR arm_frame_saved_pc (str
> >  /* Return number of bytes at start of arglist that are not really args. */
> >
> >  #define FRAME_ARGS_SKIP 0
> > -
> > -/* Put here the code to store, into a struct frame_saved_regs, the
> > -   addresses of the saved registers of frame described by FRAME_INFO.
> > -   This includes special registers such as pc and fp saved in special
> > -   ways in the stack frame.  sp is even more special: the address we
> > -   return for it IS the sp for the next frame.  */
> > -
> > -struct frame_saved_regs;
> > -struct frame_info;
> > -void arm_frame_find_saved_regs (struct frame_info * fi,
> > -                             struct frame_saved_regs * fsr);
> > -
> > -#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
> > -     arm_frame_find_saved_regs (frame_info, &(frame_saved_regs));
> >
> >  /* Things needed for making the inferior call functions.  */
> >
> >
> >
> >

-- 
Fernando Nasser
Red Hat Canada Ltd.                     E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


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