gdb: Prefer RISC-V register name "s0" over "fp"

Message ID 20180629085731.8439-1-sebastian.huber@embedded-brains.de
State New, archived
Headers

Commit Message

Sebastian Huber June 29, 2018, 8:57 a.m. UTC
  The "fp" register name is an alias for "s0" which is an alias for "x8".
The "fp" name is not understood by the Binutils and thus not used by
GCC.  GCC does not emit a frame pointer with common optimization options
such as -Og or -O2.

It is still possible to use the "fp" register name, e.g.

  (gdb) p/x $fp
  $1 = 0x800367c8

works.

However, in the register dump you see now:

  (gdb) info registers
  ...
  t2             0xffffffffffffffff       18446744073709551615
  s0             0x800367c8       0x800367c8
  s1             0x80033280       2147693184
  ...

gdb/

	* riscv-tdep.c (riscv_register_aliases): Swap "fp" and "s0"
	entries.
---
 gdb/riscv-tdep.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Andrew Burgess June 29, 2018, 12:08 p.m. UTC | #1
* Sebastian Huber <sebastian.huber@embedded-brains.de> [2018-06-29 10:57:31 +0200]:

> The "fp" register name is an alias for "s0" which is an alias for "x8".
> The "fp" name is not understood by the Binutils and thus not used by
> GCC.  GCC does not emit a frame pointer with common optimization options
> such as -Og or -O2.
> 
> It is still possible to use the "fp" register name, e.g.
> 
>   (gdb) p/x $fp
>   $1 = 0x800367c8
> 
> works.
> 
> However, in the register dump you see now:
> 
>   (gdb) info registers
>   ...
>   t2             0xffffffffffffffff       18446744073709551615
>   s0             0x800367c8       0x800367c8
>   s1             0x80033280       2147693184
>   ...
> 
> gdb/
> 
> 	* riscv-tdep.c (riscv_register_aliases): Swap "fp" and "s0"
> 	entries.

This is fine with me based on GCC no generating $fp relative code by
default.  However, I think we need to get binutils fixed too, $fp _is_
a valid register name.

Thanks,
Andrew


> ---
>  gdb/riscv-tdep.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
> index 154567136e..4c68ef73fc 100644
> --- a/gdb/riscv-tdep.c
> +++ b/gdb/riscv-tdep.c
> @@ -128,8 +128,8 @@ static const struct register_alias riscv_register_aliases[] =
>    { "t0", 5 },
>    { "t1", 6 },
>    { "t2", 7 },
> -  { "fp", 8 },
>    { "s0", 8 },
> +  { "fp", 8 },
>    { "s1", 9 },
>    { "a0", 10 },
>    { "a1", 11 },
> -- 
> 2.13.7
>
  
Jim Wilson June 29, 2018, 4:47 p.m. UTC | #2
On Fri, Jun 29, 2018 at 5:08 AM, Andrew Burgess
<andrew.burgess@embecosm.com> wrote:
> This is fine with me based on GCC no generating $fp relative code by
> default.  However, I think we need to get binutils fixed too, $fp _is_
> a valid register name.

I can fix the assembler.

Jim
  

Patch

diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 154567136e..4c68ef73fc 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -128,8 +128,8 @@  static const struct register_alias riscv_register_aliases[] =
   { "t0", 5 },
   { "t1", 6 },
   { "t2", 7 },
-  { "fp", 8 },
   { "s0", 8 },
+  { "fp", 8 },
   { "s1", 9 },
   { "a0", 10 },
   { "a1", 11 },