From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7873) id B10A13857029; Tue, 12 Jul 2022 12:16:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B10A13857029 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tiezhu Yang To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdbserver: LoongArch: Add floating-point support X-Act-Checkin: binutils-gdb X-Git-Author: Tiezhu Yang X-Git-Refname: refs/heads/master X-Git-Oldrev: 657a50227bbd835c83aadc2405e649c4b982c241 X-Git-Newrev: 3f6227c2f40a3e6009c60483f464e349d30145bb Message-Id: <20220712121619.B10A13857029@sourceware.org> Date: Tue, 12 Jul 2022 12:16:19 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Jul 2022 12:16:19 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D3f6227c2f40a= 3e6009c60483f464e349d30145bb commit 3f6227c2f40a3e6009c60483f464e349d30145bb Author: Tiezhu Yang Date: Tue Jul 12 10:35:35 2022 +0800 gdbserver: LoongArch: Add floating-point support =20 This commit adds floating-point support for LoongArch gdbserver. =20 Signed-off-by: Tiezhu Yang Diff: --- gdbserver/linux-loongarch-low.cc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gdbserver/linux-loongarch-low.cc b/gdbserver/linux-loongarch-l= ow.cc index 91826b42361..7180f315b11 100644 --- a/gdbserver/linux-loongarch-low.cc +++ b/gdbserver/linux-loongarch-low.cc @@ -120,10 +120,42 @@ loongarch_store_gregset (struct regcache *regcache, c= onst void *buf) supply_register (regcache, LOONGARCH_BADV_REGNUM, *regset + LOONGARCH_BA= DV_REGNUM); } =20 +/* Collect FPRs from REGCACHE into BUF. */ + +static void +loongarch_fill_fpregset (struct regcache *regcache, void *buf) +{ + gdb_byte *regbuf =3D nullptr; + int fprsize =3D register_size (regcache->tdesc, LOONGARCH_FIRST_FP_REGNU= M); + + for (int i =3D 0; i < LOONGARCH_LINUX_NUM_FPREGSET; i++) + { + regbuf =3D (gdb_byte *)buf + fprsize * i; + collect_register (regcache, LOONGARCH_FIRST_FP_REGNUM + i, regbuf); + } +} + +/* Supply FPRs from BUF into REGCACHE. */ + +static void +loongarch_store_fpregset (struct regcache *regcache, const void *buf) +{ + const gdb_byte *regbuf =3D nullptr; + int fprsize =3D register_size (regcache->tdesc, LOONGARCH_FIRST_FP_REGNU= M); + + for (int i =3D 0; i < LOONGARCH_LINUX_NUM_FPREGSET; i++) + { + regbuf =3D (const gdb_byte *)buf + fprsize * i; + supply_register (regcache, LOONGARCH_FIRST_FP_REGNUM + i, regbuf); + } +} + /* LoongArch/Linux regsets. */ static struct regset_info loongarch_regsets[] =3D { { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, sizeof (elf_gregset_t= ), GENERAL_REGS, loongarch_fill_gregset, loongarch_store_gregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, sizeof (elf_fpregset_= t), + FP_REGS, loongarch_fill_fpregset, loongarch_store_fpregset }, NULL_REGSET };