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

Yao Qi
2010-12-22T16:34:39Z

[-- Attachment #1: Type: text/plain, Size: 1401 bytes --]

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.]

--
Yao (é½å°§)

[-- Attachment #2: remove_deprecated_fp_regnum.patch --]
[-- Type: text/x-patch, Size: 612 bytes --]

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);