diff options
author | Hui Li <lihui@loongson.cn> | 2024-02-27 09:18:10 +0800 |
---|---|---|
committer | Tiezhu Yang <yangtiezhu@loongson.cn> | 2024-03-02 19:07:04 +0800 |
commit | 1304f47d02bfd0b41ebf4c1c6758a6251c29d8a1 (patch) | |
tree | 581737f63a2c46188432e283865fb95b98fb9b24 /gdb/arch | |
parent | a6a3b67fa9052bba81ed91a38569c11ecb95baf1 (diff) | |
download | gdb-1304f47d02bfd0b41ebf4c1c6758a6251c29d8a1.zip gdb-1304f47d02bfd0b41ebf4c1c6758a6251c29d8a1.tar.gz gdb-1304f47d02bfd0b41ebf4c1c6758a6251c29d8a1.tar.bz2 |
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 <lihui@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Diffstat (limited to 'gdb/arch')
-rw-r--r-- | gdb/arch/loongarch.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gdb/arch/loongarch.h b/gdb/arch/loongarch.h index 4b7ab05..7056d50 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, |