From: Hui Li Date: Tue, 27 Feb 2024 01:18:10 +0000 (+0800) Subject: gdb: LoongArch: Change LOONGARCH_FIRST_FP_REGNUM to 35 X-Git-Tag: gdb-15-branchpoint~803 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1304f47d02bfd0b41ebf4c1c6758a6251c29d8a1;p=thirdparty%2Fbinutils-gdb.git gdb: LoongArch: Change LOONGARCH_FIRST_FP_REGNUM to 35 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 Approved-By: John Baldwin Signed-off-by: Tiezhu Yang --- diff --git a/gdb/arch/loongarch.h b/gdb/arch/loongarch.h index 4b7ab054ea0..7056d506bf4 100644 --- a/gdb/arch/loongarch.h +++ b/gdb/arch/loongarch.h @@ -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,