Re: [RFA/RFC] mips tracepoint: fix Bug 12013

Hui Zhu
2010-12-22T07:12:50Z

On Wed, Dec 22, 2010 at 14:04, Kevin Buettner <kevinb@redhat.com> wrote:
> On Tue, 21 Dec 2010 23:58:29 +0800
> Hui Zhu <teawater@gmail.com> wrote:
>
>> Thanks.  Do you think I can add a special name for these raw registers
>> then other part can use this raw register if need.
>
> I have a hunch that such an approach will result in an assertion
> failure in mips_print_registers_info() when a raw register name is
> used to attempt to print a register.
>
> The other problem with such an approach is that it again exposes the
> raw registers to the user.  In this case, instead of using the name
> "sp", the user would instead have to use "raw-sp" (or some such).
> This is not completely horrible, but it's certainly not as nice as
> allowing the user to continue referring to standard nomenclature when
> using the trace machinery.
>
> You might consider implementing a new gdbarch method which provides a
> mapping from pseudo register numbers to raw register numbers.  The
> trace machinery could use such a mapping to find the corresponding raw
> register(s) when presented with a pseudo register.  I can think of
> several potential pitfalls with this approach, but I think the idea is
> worth exploring.
>
> Kevin
>

Thanks Kevin. I will do it.

And I make a patch to add some comments from your mail to mips_register_name.
Wish it can help other people.

Please help me review it.

Thanks,
Hui

2010-12-22 Hui Zhu <teawater@gmail.com>

* mips-tedp.c (mips_register_name): Add comments.

---
mips-tdep.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

--- a/mips-tdep.c
+++ b/mips-tdep.c
@@ -454,7 +454,12 @@ mips_register_name (struct gdbarch *gdba
enum mips_abi abi = mips_abi (gdbarch);

/* Map [gdbarch_num_regs .. 2*gdbarch_num_regs) onto the raw registers,
- but then don't make the raw register names visible. */
+ but then don't make the raw register names visible.
+ Because It is possible to debug a 64-bit device using a 32-bit programming
+ model. In such instances, the raw registers are configured to be
+ 64-bits wide, while the pseudo registers are configured to be 32-bits
+ wide. The registers that the user sees - the pseudo registers - match
+ the user's expectations given the programming model being used. */
int rawnum = regno % gdbarch_num_regs (gdbarch);
if (regno < gdbarch_num_regs (gdbarch))
return "";