On 3/8/24 11:18, Ming Wang wrote:
 The following link error exists when building with LOONGARCH64
 machine:
 /usr/bin/ld: proc-service.o: in function `.LVL71':
 proc-service.c:(.text+0x324): undefined reference to `fill_gregset ...
 /usr/bin/ld: proc-service.o: in function `.LVL77':
 proc-service.c:(.text+0x364): undefined reference to `supply_gregset ...
 /usr/bin/ld: proc-service.o: in function `.LVL87':
 proc-service.c:(.text+0x3c4): undefined reference to `fill_fpregset ...
 /usr/bin/ld: proc-service.o: in function `.LVL93':
 proc-service.c:(.text+0x404): undefined reference to `supply_fpregset
 collect2: error: ld returned 1 exit status
 The cause of the error is that the definition of a function such as
 fill_gregset is not implemented. This patch is used to fix this error.
 v1 -> v2:
 Fix compilation errors. 
Thanks for the fix.
The v2 looks good, so: Ack.
 Reported-by: Xiujie Jiang <jiangxiujie(a)kylinos.cn>
 Signed-off-by: Ming Wang <wangming01(a)loongson.cn>
 ---
   gdb-10.2.patch | 33 +++++++++++++++++++++++++++++++++
   1 file changed, 33 insertions(+)
 diff --git a/gdb-10.2.patch b/gdb-10.2.patch
 index a7018a2..5d34407 100644
 --- a/gdb-10.2.patch
 +++ b/gdb-10.2.patch
 @@ -16057,3 +16057,36 @@ exit 0
    m10200-dis.c
    m10200-opc.c
    m10300-dis.c
 +--- gdb-10.2/gdb/loongarch-linux-tdep.c.orig
 ++++ gdb-10.2/gdb/loongarch-linux-tdep.c
 +@@ -707,3 +707,30 @@ _initialize_loongarch_linux_tdep ()
 +   gdbarch_register_osabi (bfd_arch_loongarch, bfd_mach_loongarch64,
 +                           GDB_OSABI_LINUX, loongarch_linux_init_abi);
 + }
 ++
 ++/* Wrapper functions.  These are only used by libthread_db.  */
 ++#include <sys/procfs.h>
 ++extern void supply_gregset (struct regcache *regcache,const prgregset_t *gregset);
 ++extern void fill_gregset (const struct regcache *regcache, prgregset_t *gregset, int
regno);
 ++extern void supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregset);
 ++extern void fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregset, int
regno);
 ++
 ++void supply_gregset (struct regcache *regcache, const prgregset_t *gregset)
 ++{
 ++  loongarch_elf_gregset.supply_regset (NULL, regcache, -1, gregset, sizeof
(prgregset_t));
 ++}
 ++
 ++void fill_gregset (const struct regcache *regcache, prgregset_t *gregset, int regno)
 ++{
 ++  loongarch_elf_gregset.collect_regset (NULL, regcache, regno, gregset, sizeof
(prgregset_t));
 ++}
 ++
 ++void supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregset)
 ++{
 ++  loongarch_elf_fpregset.supply_regset (NULL, regcache, -1, fpregset, sizeof
(prfpregset_t));
 ++}
 ++
 ++void fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregset, int
regno)
 ++{
 ++  loongarch_elf_fpregset.collect_regset (NULL, regcache, regno, fpregset, sizeof
(prfpregset_t));
 ++}