[PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35
Hui Li
lihui@loongson.cn
Tue Feb 27 01:25:31 GMT 2024
Hi,
On 2024/2/23 上午8:33, John Baldwin wrote:
> On 2/20/24 6:14 PM, Hui Li wrote:
>> 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) in the feature
>> file gdb/features/loongarch/base64.xml. Change
>> LOONGARCH_LINUX_NUM_GREGSET
>> to 35 to keep consistent with the xml file.
>>
>> without this patch:
>>
>> Execute on the target machine:
>>
>> $ gdbserver 192.168.1.123:5678 ./test
>>
>> Execute on 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 host machine:
>>
>> Remote debugging using 192.168.1.123:5678
>> Remote connection closed
>>
>> Signed-off-by: Hui Li <lihui@loongson.cn>
>> ---
>> gdb/arch/loongarch.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/gdb/arch/loongarch.h b/gdb/arch/loongarch.h
>> index 4b7ab054ea0..6e51e1d097b 100644
>> --- a/gdb/arch/loongarch.h
>> +++ b/gdb/arch/loongarch.h
>> @@ -33,7 +33,7 @@ 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_LINUX_NUM_GREGSET = 45, /* 32 GPR, ORIG_A0, PC, BADV,
>> RESERVED 10. */
>> + LOONGARCH_LINUX_NUM_GREGSET = 35, /* 32 GPR, ORIG_A0, PC, BADV. */
>> LOONGARCH_ARG_REGNUM = 8, /* r4-r11: general-purpose
>> argument registers.
>> f0-f7: floating-point argument registers. */
>> LOONGARCH_FIRST_FP_REGNUM = LOONGARCH_LINUX_NUM_GREGSET,
>
> Does anything depend on the gap being present here for FIRST_FP_REGNUM?
> That is,
> should you perhaps be moving the +10 down to LOONGARCH_FIRST_FP_REGNUM
> to keep the
> first FP register number the same?
>
Thanks for your review.
The purpose of this modification is to make LOONGARCH_FIRST_FP_REGNUM
equal to 35. In gdb and gdbserver code, tdesc reg number is defined
according to the feature file gdb/features/loongarch/*.xml(GPR: 0 ~ 34,
and FPR starts at 35). But first FPR reg number in regcache is
LOONGARCH_FIRST_FP_REGNUM(45), the total number of registers will not be
consistent with tdesc reg numbers.
With this patch, LOONGARCH_FIRST_FP_REGNUM is changed to 35,
the 10 reserved registers are not included in total number of registers,
then all the reg numbers in regcache are consistent with tdesc reg numbers.
I send v2 version with modified code and commit message to make this
change clearer.
Thanks,
Hui
More information about the Gdb-patches
mailing list