* [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 @ 2024-02-21 2:14 Hui Li 2024-02-23 0:33 ` John Baldwin 0 siblings, 1 reply; 5+ messages in thread From: Hui Li @ 2024-02-21 2:14 UTC (permalink / raw) To: gdb-patches 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, -- 2.38.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 2024-02-21 2:14 [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 Hui Li @ 2024-02-23 0:33 ` John Baldwin 2024-02-27 1:25 ` Hui Li 0 siblings, 1 reply; 5+ messages in thread From: John Baldwin @ 2024-02-23 0:33 UTC (permalink / raw) To: Hui Li, gdb-patches 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? -- John Baldwin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 2024-02-23 0:33 ` John Baldwin @ 2024-02-27 1:25 ` Hui Li 2024-02-27 23:06 ` John Baldwin 0 siblings, 1 reply; 5+ messages in thread From: Hui Li @ 2024-02-27 1:25 UTC (permalink / raw) To: John Baldwin, gdb-patches 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 2024-02-27 1:25 ` Hui Li @ 2024-02-27 23:06 ` John Baldwin 2024-03-01 4:16 ` Hui Li 0 siblings, 1 reply; 5+ messages in thread From: John Baldwin @ 2024-02-27 23:06 UTC (permalink / raw) To: Hui Li, gdb-patches On 2/26/24 5:25 PM, Hui Li wrote: > 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. Ok. Mostly I was curious if there were existing stubs/servers that do not use the XML descriptions and assume that the first FP register is at register 45. That said, GDB should also be able to handle a different numbering from the remote target that doesn't match the regcache numbers and instead translates remote register numbers to regcache register numbers. -- John Baldwin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 2024-02-27 23:06 ` John Baldwin @ 2024-03-01 4:16 ` Hui Li 0 siblings, 0 replies; 5+ messages in thread From: Hui Li @ 2024-03-01 4:16 UTC (permalink / raw) To: John Baldwin, gdb-patches On 2024/2/28 上午7:06, John Baldwin wrote: > On 2/26/24 5:25 PM, Hui Li wrote: >> 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. > > Ok. Mostly I was curious if there were existing stubs/servers that do not > use the XML descriptions and assume that the first FP register is at > register 45. > > That said, GDB should also be able to handle a different numbering from the > remote target that doesn't match the regcache numbers and instead > translates > remote register numbers to regcache register numbers. > Hi, Thanks for your reminder and suggestion. Now all existing stubs/servers(kgdb、gdbserver) does not contain 10 reserved registers, and the first FP register number is 35. Therefore, this is the best way to modify at present. Thanks, Hui ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-03-01 4:16 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-02-21 2:14 [PATCH] gdb: LoongArch: Change LOONGARCH_LINUX_NUM_GREGSET to 35 Hui Li 2024-02-23 0:33 ` John Baldwin 2024-02-27 1:25 ` Hui Li 2024-02-27 23:06 ` John Baldwin 2024-03-01 4:16 ` Hui Li
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).