]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb: LoongArch: Change LOONGARCH_FIRST_FP_REGNUM to 35
authorHui Li <lihui@loongson.cn>
Tue, 27 Feb 2024 01:18:10 +0000 (09:18 +0800)
committerTiezhu Yang <yangtiezhu@loongson.cn>
Sat, 2 Mar 2024 11:07:04 +0000 (19:07 +0800)
There is an assertion error "gdb_assert (n < tdesc->reg_defs.size ())"
in find_register_by_number() when gdb connects to gdbserver, this
is because the value of LOONGARCH_LINUX_NUM_GREGSET (45, which contains
10 reserved regs) is different with the number of regs (35, which not
contains 10 reserved regs) in file gdb/features/loongarch/base64.xml.
Add a new macro LOONGARCH_USED_NUM_GREGSET which is defined as 35 to
keep consistent with the gdb/features/loongarch/base64.xml, and then
define LOONGARCH_FIRST_FP_REGNUM as LOONGARCH_USED_NUM_GREGSET so that
all the reg numbers in regcache are consistent with tdesc reg numbers.

without this patch:

Execute on the target machine:

  $ gdbserver 192.168.1.123:5678 ./test

Execute on the host machine:

  $ gdb ./test
  (gdb) target remote 192.168.1.123:5678

Output on the target machine:

  Process ./test created; pid = 67683
  Listening on port 5678
  Remote debugging from host 192.168.1.136, port 6789
  gdbserver/regcache.cc:205: A problem internal to GDBserver has been detected.
  find_register_by_number: Assertion 'n < tdesc->reg_defs.size ()' failed.

Output on the host machine:

  Remote debugging using 192.168.1.123:5678
  Remote connection closed

Signed-off-by: Hui Li <lihui@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
gdb/arch/loongarch.h

index 4b7ab054ea0acb48fb1f3d3c6d3d12cc93098fa3..7056d506bf43d63c9dacaee5eea6581c2c0ab03a 100644 (file)
@@ -33,10 +33,11 @@ enum loongarch_regnum
   LOONGARCH_ORIG_A0_REGNUM = 32,       /* Syscall's original arg0.  */
   LOONGARCH_PC_REGNUM = 33,            /* Program Counter.  */
   LOONGARCH_BADV_REGNUM = 34,          /* Bad Vaddr for Addressing Exception.  */
+  LOONGARCH_USED_NUM_GREGSET = 35,     /* 32 GPR, ORIG_A0, PC, BADV.  */
   LOONGARCH_LINUX_NUM_GREGSET = 45,    /* 32 GPR, ORIG_A0, PC, BADV, RESERVED 10.  */
   LOONGARCH_ARG_REGNUM = 8,            /* r4-r11: general-purpose argument registers.
                                          f0-f7: floating-point argument registers.  */
-  LOONGARCH_FIRST_FP_REGNUM = LOONGARCH_LINUX_NUM_GREGSET,
+  LOONGARCH_FIRST_FP_REGNUM = LOONGARCH_USED_NUM_GREGSET,
   LOONGARCH_LINUX_NUM_FPREGSET = 32,
   LOONGARCH_FIRST_FCC_REGNUM = LOONGARCH_FIRST_FP_REGNUM + LOONGARCH_LINUX_NUM_FPREGSET,
   LOONGARCH_LINUX_NUM_FCC = 8,