Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Farid Khaidari <khaidari.fg@gmail.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <aburgess@redhat.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Timur Golubovich <timurgol007@gmail.com>,
	Kevin Buettner <kevinb@redhat.com>
Subject: [PATCH v2 1/4] gdb/riscv: recover FLEN from the NT_FPREGSET note size in core files
Date: Mon, 26 Oct 2026 12:56:43 +0300	[thread overview]
Message-ID: <20261026095647.3035166-2-khaidari.fg@gmail.com> (raw)
In-Reply-To: <20261026095647.3035166-1-khaidari.fg@gmail.com>

A core dumped by the Linux kernel has no float ABI in e_flags and no
RISC-V attributes.  Opened without the executable, it gets an
integer-only target description, and "p $fa0" fails with "Invalid
register 'fa0'" even though the core holds the FP state.

Add a core_read_description hook for RISC-V Linux.  When e_flags says
nothing, it takes FLEN from the size of the NT_FPREGSET note: 32
registers of FLEN bytes plus fcsr padded to 8 bytes.  The size formula
moves out of riscv_linux_iterate_over_regset_sections into a helper
that both use.  The
layout is Linux-specific (FreeBSD, for one, always uses 16-byte slots),
so the hook lives in riscv-linux-tdep.c.  If the note gives nothing,
the hook returns no description and GDB behaves as before.
riscv_features_from_bfd is exported for it.

The test core is a real Linux core dump with a 264-byte NT_FPREGSET,
i.e. FLEN = 8.

Signed-off-by: Farid Khaidari <khaidari.fg@gmail.com>
---
 gdb/riscv-linux-tdep.c                        |  93 +++++++++++++++++-
 gdb/riscv-tdep.c                              |   9 +-
 gdb/riscv-tdep.h                              |  10 ++
 .../gdb.arch/riscv-core-fpregset.core.bz2     | Bin 0 -> 3204 bytes
 .../gdb.arch/riscv-core-fpregset.exp          |  73 ++++++++++++++
 5 files changed, 177 insertions(+), 8 deletions(-)
 create mode 100644 gdb/testsuite/gdb.arch/riscv-core-fpregset.core.bz2
 create mode 100644 gdb/testsuite/gdb.arch/riscv-core-fpregset.exp

diff --git a/gdb/riscv-linux-tdep.c b/gdb/riscv-linux-tdep.c
index fcfa5f98ea4..594f6a36f89 100644
--- a/gdb/riscv-linux-tdep.c
+++ b/gdb/riscv-linux-tdep.c
@@ -31,6 +31,7 @@
 #include "linux-record.h"
 #include "riscv-linux-tdep.h"
 #include "inferior.h"
+#include "gdbsupport/selftest.h"
 
 extern unsigned int record_debug;
 
@@ -74,6 +75,16 @@ static const struct regset riscv_linux_fregset =
   riscv_linux_fregmap, riscv_supply_regset, regcache_collect_regset
 };
 
+/* Return the size of the FP register regset for FP registers of FLEN
+   bytes: 32 registers followed by FCSR, which the kernel pads to 8
+   bytes.  */
+
+static constexpr int
+riscv_linux_fregset_size (int flen)
+{
+  return 32 * flen + 8;
+}
+
 /* Define hook for core file support.  */
 
 static void
@@ -84,9 +95,8 @@ riscv_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
 {
   cb (".reg", (32 * riscv_isa_xlen (gdbarch)), (32 * riscv_isa_xlen (gdbarch)),
       &riscv_linux_gregset, NULL, cb_data);
-  /* The kernel is adding 8 bytes for FCSR.  */
-  cb (".reg2", (32 * riscv_isa_flen (gdbarch)) + 8,
-      (32 * riscv_isa_flen (gdbarch)) + 8,
+  cb (".reg2", riscv_linux_fregset_size (riscv_isa_flen (gdbarch)),
+      riscv_linux_fregset_size (riscv_isa_flen (gdbarch)),
       &riscv_linux_fregset, NULL, cb_data);
 }
 
@@ -523,6 +533,52 @@ riscv_linux_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread)
   return ret;
 }
 
+/* Return the FLEN implied by SIZE, the size of an NT_FPREGSET note, or 0
+   if SIZE matches no known layout.  This inverts
+   riscv_linux_fregset_size.  */
+
+static int
+riscv_linux_flen_from_fpregset_size (bfd_size_type size)
+{
+  for (int flen : { riscv_flen_d, riscv_flen_f })
+    if (size == riscv_linux_fregset_size (flen))
+      return flen;
+
+  return 0;
+}
+
+/* Implement the "core_read_description" gdbarch method.
+
+   A core dumped by the Linux kernel has no float ABI in its e_flags, so
+   if ABFD has an NT_FPREGSET note (the ".reg2" pseudo-section), recover
+   the FLEN from its size.  A core with an NT_GDB_TDESC note never gets
+   here; the core target uses that note directly.  */
+
+static const struct target_desc *
+riscv_linux_core_read_description (struct gdbarch *gdbarch,
+				   struct target_ops *target, bfd *abfd)
+{
+  auto features = riscv_features_from_bfd (abfd);
+
+  asection *fpregs = bfd_get_section_by_name (abfd, ".reg2");
+  if (features.flen == 0 && fpregs != nullptr)
+    {
+      bfd_size_type size = bfd_section_size (fpregs);
+      features.flen = riscv_linux_flen_from_fpregset_size (size);
+      if (features.flen == 0)
+	warning (_("unrecognized .reg2 note size %s in core file; "
+		   "FLEN left unknown"),
+		 pulongest (size));
+    }
+
+  /* Nothing was learnt beyond the ELF header.  Let GDB fall back to its
+     default description, which also takes the executable into account.  */
+  if (features.flen == 0)
+    return nullptr;
+
+  return riscv_lookup_target_description (features);
+}
+
 /* Initialize RISC-V Linux ABI info.  */
 
 static void
@@ -555,6 +611,9 @@ riscv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_gdbarch_iterate_over_regset_sections
     (gdbarch, riscv_linux_iterate_over_regset_sections);
 
+  set_gdbarch_core_read_description (gdbarch,
+				     riscv_linux_core_read_description);
+
   tramp_frame_prepend_unwinder (gdbarch, &riscv_linux_sigframe);
 
   tdep->syscall_next_pc = riscv_linux_syscall_next_pc;
@@ -567,10 +626,38 @@ riscv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_gdbarch_get_syscall_number (gdbarch, riscv_linux_get_syscall_number);
 }
 
+#if GDB_SELF_TEST
+namespace selftests
+{
+
+/* Check that an NT_FPREGSET note size maps to the right FLEN.  */
+
+static void
+riscv_linux_flen_from_fpregset_size_test ()
+{
+  for (int flen : { riscv_flen_d, riscv_flen_f })
+    SELF_CHECK (riscv_linux_flen_from_fpregset_size
+		  (riscv_linux_fregset_size (flen)) == flen);
+
+  /* Anything else leaves the FLEN unknown.  */
+  SELF_CHECK (riscv_linux_flen_from_fpregset_size (0) == 0);
+  SELF_CHECK (riscv_linux_flen_from_fpregset_size (32 * 8) == 0);
+  SELF_CHECK (riscv_linux_flen_from_fpregset_size (32 * 16 + 8) == 0);
+}
+
+} /* namespace selftests */
+#endif /* GDB_SELF_TEST */
+
 /* Initialize RISC-V Linux target support.  */
 
 INIT_GDB_FILE (riscv_linux_tdep)
 {
   gdbarch_register_osabi (bfd_arch_riscv, 0, GDB_OSABI_LINUX,
 			  riscv_linux_init_abi);
+
+#if GDB_SELF_TEST
+  selftests::register_test
+    ("riscv-linux-flen-from-fpregset-size",
+     selftests::riscv_linux_flen_from_fpregset_size_test);
+#endif
 }
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 68c56fbafb3..0a997231abc 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -3923,10 +3923,9 @@ static const struct frame_unwind_legacy riscv_frame_unwind (
   /*.prev_arch     =*/ NULL
 );
 
-/* Extract a set of required target features out of ABFD.  If ABFD is
-   nullptr then a RISCV_GDBARCH_FEATURES is returned in its default state.  */
+/* See riscv-tdep.h.  */
 
-static struct riscv_gdbarch_features
+struct riscv_gdbarch_features
 riscv_features_from_bfd (const bfd *abfd)
 {
   struct riscv_gdbarch_features features;
@@ -3950,9 +3949,9 @@ riscv_features_from_bfd (const bfd *abfd)
 	internal_error (_("unknown ELF header class %d"), eclass);
 
       if (e_flags & EF_RISCV_FLOAT_ABI_DOUBLE)
-	features.flen = 8;
+	features.flen = riscv_flen_d;
       else if (e_flags & EF_RISCV_FLOAT_ABI_SINGLE)
-	features.flen = 4;
+	features.flen = riscv_flen_f;
 
       if (e_flags & EF_RISCV_RVE)
 	{
diff --git a/gdb/riscv-tdep.h b/gdb/riscv-tdep.h
index 344a995a680..01cb515dfbd 100644
--- a/gdb/riscv-tdep.h
+++ b/gdb/riscv-tdep.h
@@ -158,6 +158,16 @@ extern int riscv_abi_flen (struct gdbarch *gdbarch);
    argument registers.  */
 extern bool riscv_abi_embedded (struct gdbarch *gdbarch);
 
+/* FP register width, in bytes, implied by the D and F extensions.  */
+constexpr int riscv_flen_d = 8;
+constexpr int riscv_flen_f = 4;
+
+/* Extract a set of required target features out of ABFD.  If ABFD is
+   nullptr then a RISCV_GDBARCH_FEATURES is returned in its default
+   state.  */
+extern struct riscv_gdbarch_features riscv_features_from_bfd
+  (const bfd *abfd);
+
 /* Single step based on where the current instruction will take us.  */
 extern std::vector<CORE_ADDR> riscv_software_single_step
   (struct regcache *regcache);
diff --git a/gdb/testsuite/gdb.arch/riscv-core-fpregset.core.bz2 b/gdb/testsuite/gdb.arch/riscv-core-fpregset.core.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..497db069ac76a81e74b7ba676b3ddf3e3a64a014
GIT binary patch
literal 3204
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

literal 0
HcmV?d00001

diff --git a/gdb/testsuite/gdb.arch/riscv-core-fpregset.exp b/gdb/testsuite/gdb.arch/riscv-core-fpregset.exp
new file mode 100644
index 00000000000..57e63756f77
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/riscv-core-fpregset.exp
@@ -0,0 +1,73 @@
+# Copyright 2026 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Check that GDB recovers the FP registers from a core file dumped by
+# the Linux kernel and opened without the executable.  Such a core has
+# no NT_GDB_TDESC note, no .riscv.attributes, and zero e_flags, so the
+# size of the NT_FPREGSET note is the only evidence of the FLEN.  The
+# kernel dumps the FP state in the D layout: 32 doubles plus 8 bytes for
+# fcsr, 264 bytes in total.
+#
+# The bundled core (riscv-core-fpregset.core.bz2) was dumped by a stock
+# Linux 6.8 kernel.  Its PT_NOTE carries NT_FPREGSET (264 bytes) but
+# neither NT_GDB_TDESC nor any RISC-V attributes, and its e_flags are
+# zero.  The dumped program never touched the FP unit, so every FP
+# register in the note is zero.
+#
+# The test checks that, with no executable loaded:
+# 1. the FP registers exist in the target description at all, rather
+#    than GDB reporting "Invalid register 'fa0'";
+# 2. their contents are supplied from the note rather than left
+#    <unavailable> ("(raw 0x...)" in the output proves that);
+# 3. the FP registers are 8 bytes wide, i.e. the FLEN really came from
+#    the 264-byte note size.
+#
+# Only the D layout is exercised here, since that is what the bundled
+# core carries.  The size-to-FLEN mapping itself, including the F
+# layout, is covered by the "riscv-linux-flen-from-fpregset-size" selftest.
+#
+# How to regenerate the fixture: run any RV64 program on a Linux system
+# under "ulimit -c unlimited" with kernel.core_pattern=core, make it
+# dump core, and bzip2 the result.  Check with "readelf -n" that the
+# core carries a 264-byte NT_FPREGSET and neither an NT_GDB_TDESC note
+# nor RISC-V attributes.
+
+# The fixture is an ELF64 Linux core and the FLEN assertions are
+# RV64-specific.
+require {istarget "riscv64-*-linux*"}
+
+set core [decompress_bz2 $srcdir/$subdir/riscv-core-fpregset.core.bz2]
+if {$core == ""} {
+    untested "failed to decompress core file"
+    return -1
+}
+set core [gdb_remote_download host $core]
+
+clean_restart
+
+if {[gdb_core_cmd $core "load core without executable"] != 1} {
+    return -1
+}
+
+# The size of the NT_FPREGSET note implies FLEN, hence the FP registers.
+# The value must come from the note: a raw hex dump in the output means
+# the register bytes were supplied, not left <unavailable>.
+gdb_test "info registers \$fa0" \
+    "fa0\[ \t\]+\\{float = 0, double = 0\\}\[ \t\]+\\(raw 0x0+\\)" \
+    "fp register value supplied from fpregset note"
+
+# 264 bytes = 32 doubles + fcsr, so the FLEN must be 8.
+gdb_test "print sizeof (\$fa0)" "= 8" \
+    "flen recovered from fpregset note size"
-- 
2.43.0


  reply	other threads:[~2026-10-26  9:57 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-22 15:44 [PATCH 0/4] gdb/riscv: analyse a core file without the executable Farid Khaidari
2026-10-22 15:44 ` [PATCH 1/4] gdb/riscv: recover FLEN from the NT_FPREGSET note size in core files Farid Khaidari
2026-10-25 20:07   ` Kevin Buettner
2026-10-26 10:01     ` Farid Khaidari
2026-10-22 15:44 ` [PATCH 2/4] gdb/riscv: recover core file ISA features from AT_HWCAP Farid Khaidari
2026-10-22 15:44 ` [PATCH 3/4] gdb/riscv: test the "arch=" disassembler option Farid Khaidari
2026-10-22 15:44 ` [PATCH 4/4] gdb/riscv: disassemble an attribute-less object by the description ISA Farid Khaidari
2026-10-25 20:50   ` Kevin Buettner
2026-10-26 10:01     ` Farid Khaidari
2026-10-25 20:17 ` [PATCH 0/4] gdb/riscv: analyse a core file without the executable Kevin Buettner
2026-10-26  9:56 ` [PATCH v2 " Farid Khaidari
2026-10-26  9:56   ` Farid Khaidari [this message]
2026-10-26  9:56   ` [PATCH v2 2/4] gdb/riscv: recover core file ISA features from AT_HWCAP Farid Khaidari
2026-10-26  9:56   ` [PATCH v2 3/4] gdb/riscv: test the "arch=" disassembler option Farid Khaidari
2026-10-26  9:56   ` [PATCH v2 4/4] gdb/riscv: disassemble an attribute-less object by the description ISA Farid Khaidari
2026-10-27 14:31   ` [PATCH v2 0/4] gdb/riscv: analyse a core file without the executable Farid Khaidari

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261026095647.3035166-2-khaidari.fg@gmail.com \
    --to=khaidari.fg@gmail.com \
    --cc=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=kevinb@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=timurgol007@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox