Re: [patch 2/2] Implement gdbarch hook user_register_name on ARM

Mark Kettenis
2010-12-22T17:44:54Z

> Date: Thu, 23 Dec 2010 00:34:22 +0800
> From: Yao Qi <yao@codesourcery.com>
>
> On 12/22/2010 03:07 AM, Ulrich Weigand wrote:
> > Yao Qi wrote:
> >> On 12/15/2010 06:22 PM, Yao Qi wrote:
> >>> Once this patch is applied, we leave more flexibility to backend to
> >>> determine what is the correct register number given a register alias.
> >>
> >> This patch is to implement user_register_name on ARM. With this, we can
> >> handle alias "fp" according to the current frame's mode (ARM or Thumb).
> >>
> >> Regression testing is still running on ARM. Comments are welcome.
> >
> > I'm wondering why the ARM back-end actively defines "fp" as user register
> > anyway. If it simply were to *not* do so, GDB would fall back to the
> > default implementation of $fp using value_of_builtin_frame_fp_reg, which
> > seems to do always the correct thing anyway. It returns the value of the
> > frame base as returned by arm_normal_frame_base, which will have been
> > determined from r11 or r7 as appropriate for the mode.
>
> Good catch! set_gdbarch_deprecated_fp_regnum is called in
> arm_gdbarch_init since 2003, introduced by this patch "Deprecate
> TARGET_READ_FP, read_fp and FP_REGNUM"
> http://sourceware.org/ml/gdb-patches/2003-04/msg00471.html
>
> set_gdbarch_deprecated_fp_regnum is no longer used in most of targets,
> and I don't see any reason why we have to keep it in ARM, so I draft
> this one-line patch.
>
> Any comments/objections to this one-line patch? [Regression test is
> still running.]

Actually grep tells me that arm is the only target that still uses
this. A sure sign that we can get rid of it!

A followup diff to remove all the deprected fp stuff would be nice ;)
But don't let you stop that from committing this.

> gdb/
> * arm-tdep.c (arm_gdbarch_init): Remove invoke to
> set_gdbarch_deprecated_fp_regnum.
>
> diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
> index 636c1de..1f112ee 100644
> --- a/gdb/arm-tdep.c
> +++ b/gdb/arm-tdep.c
> @@ -7457,7 +7457,6 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
> arm_remote_breakpoint_from_pc);
>
> /* Information about registers, etc. */
> - set_gdbarch_deprecated_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
> set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
> set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
> set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);