From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aW13JpUv2mpWmwsAWB0awg (envelope-from ) for ; Thu, 22 Oct 2026 11:45:25 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=RFhwU5wd; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 9362C378002; Thu, 22 Oct 2026 11:45:25 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FORGED_GMAIL_RCVD,FREEMAIL_FROM, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=no autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id DA533378004 for ; Thu, 22 Oct 2026 11:45:17 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5622C4BA23FD for ; Thu, 22 Oct 2026 15:45:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5622C4BA23FD Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=RFhwU5wd Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by sourceware.org (Postfix) with ESMTPS id 6DCC54BA23C7 for ; Thu, 22 Oct 2026 15:44:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6DCC54BA23C7 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6DCC54BA23C7 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::232 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1792683865; cv=none; b=YBQ0Gf8QaqNe0MEX1g+AkQpbnmkScmdARn5TmB/e2XAYlmxizPVJrGeWI0mNYxPqmDadSz6R51s75MgaIoIEpMlum47crhc44uOfGO1VdW4b4CyFq0ZcZp+YPWrLIwovl+/91C0uKIipfzrAn1zxu2GqO9crA0ihwtgOA0oNiQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1792683865; c=relaxed/simple; bh=5bw8jWSGHaUoNkKqjw81SSojkKtzdP7bEqd9IlufH2Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=qyu26RLf+uFdt+FDK47um3+fqxT7t5CgdLonTczOX0DCy5hRkGmSgKa4q4ZQVESNXFAKkuN0PQ0XTLq40SRpIJgZ1svU3Bu9utfLSHTBEICvihesLAL9kVZpsmrzCtr3vxJmeRJPB4W2MTAsIy4sO1mYh0XHudnIm5VZQl2PnuA= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=RFhwU5wd DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6DCC54BA23C7 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-3a49a022221so13979431fa.3 for ; Thu, 22 Oct 2026 08:44:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792683864; x=1793288664; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JMhEqXI1HsLRXwn36GWqxgSBaQkIMYJI2jm7EarCnOk=; b=RFhwU5wdKxO+MaKX5LH0LS9Rl6bnNBlC8CdWDQZm5v1Exhj4qtMaye3UjHH/GXnf7s Jc0JY4Umwf2FSaHmkBNK3vDz01dJVr3kPIreiicREUAUAMuLrOK/7LxCB2KWrjicW5PE ZYGW/OdLq0G8iAVtv9THu9zS/FbaQEBpfKuw0HDKx5uNguyAHIMwG4hyXsMSWvnHT90r LwPVfuIGRcxri0D6DP18SwArQUBM+YutNc92ivlPA7YJ+Twt2CYmCx2ovy4+ihCCK1Ku MEQFAYNqVb224bVExRmbinyS0FL90adkPLTXN3U0MpYCv9gHUh0sKAVQL90kPhU2Kpxe xu0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792683864; x=1793288664; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=JMhEqXI1HsLRXwn36GWqxgSBaQkIMYJI2jm7EarCnOk=; b=wSvFUEH4oHCCb59xO12zXsI0Rxrf1F5mg6PeSNKID2eWDOyPKhRNieaHKm5W1ZPpet 1OBjNoG1ukLvkXzZlxvuakvw2/L9gdOXkvvwsJ/Mc66gq2iINTDAzI/uQqKsmb1zpt4M 9hwtWfkYNdwSxFE23pX/jlenKIUkCOr+reaS/1dyrRh3Jd8vw63ICRQjb/0mlHqXSKmn yx/vuaNVxJIYPHfMVQMFJt5kaO+ZGie3IzW6LUFb6II/TDbHxH3BZHGXUaSGpu3oegCM stG0rO/3yxvYUy6ThdJ6D1rBHG0pACaP9PjdgqiWUL0qfRfWENKuUflaxHYdhh/DfAo4 Sbhg== X-Gm-Message-State: AFq9FYKo2akmTmDJ7rzZtk7uVqSKsp7A7J9aQeIByiTh2fM+4v28ZHjJ 3vkjct6pRaPluKU2n0xKEEhGTQR0Hsj0irYk+WVTSbzSlJc7TjFeqGcKbHDDbAIPi8cKEA== X-Gm-Gg: AYBFou1+IDf6cKnQIic4ZC0BMcIYeTvdF1+JcAYYb6dZ99GR5uYJH6Ce9/l41WHcoD/ gOUNNGBufxZ+tQlJbxIRrj42gvFFqiiPtPYpQ0Koah5aE9dm+YtVi+r1QWaxgBZwAu6upq64QfO 1BFkBd3ay+tFpnKQxDkU+EMHvWBCddsEzqSuiD+7qWzWUFa93a/FuF6dIPxqL0a9cNLmuAGCFwj 5RRKgLdKJMiLXuLQ9cP0GcQZ+oWm1z2UrD/+foRGYwMCDkgE4WGm0tcYyUMYhAkMhvD9xMb4Mm1 uaaHq7nqXdHd/+wHMyCZgpLPDAS4nidXj8pLo9MejbhIkidIYdubCGMscuCEMXBSSVeH6Ds+5NK tXchsWGged2QmJKTmv+RUmtlEnMq+n/t3i5B2V2V7h8cFKCjfQhppzGRrboDSRB3yzqLgLARav7 Y6EKHIUgoFvXNi5+2hD5d+qaiGwagnPc5JXmCljYV3tBOSdkfWdlWhZa/jGQLAUqr/gDHteZNkx qqpgyo0BPDEuviPiPciJgwoBhp/nkY8XESiQQzPDbRg2biFyyv7PpYQZYJnXK6Appzq5dO2VP0z qq3iRYh5jzIuLYZJpSE/jIQhXMCrRvYhU6/1/V6uSF2wSZ+9gw== X-Received: by 2002:a2e:bc0d:0:b0:3a9:87c0:7737 with SMTP id 38308e7fff4ca-3ac441a2379mr15828921fa.21.1792683863484; Thu, 22 Oct 2026 08:44:23 -0700 (PDT) Received: from localhost.localdomain ([176.15.140.8]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bfa11f60d9sm1205912e87.17.2026.10.22.08.44.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 08:44:22 -0700 (PDT) From: Farid Khaidari To: gdb-patches@sourceware.org Cc: Farid Khaidari , Andrew Burgess , Palmer Dabbelt , Timur Golubovich Subject: [PATCH 1/4] gdb/riscv: recover FLEN from the NT_FPREGSET note size in core files Date: Thu, 22 Oct 2026 18:44:14 +0300 Message-ID: <20261022154417.235510-2-khaidari.fg@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261022154417.235510-1-khaidari.fg@gmail.com> References: <20261022154417.235510-1-khaidari.fg@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org A Linux kernel core 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. The kernel writes 32 FP registers of FLEN bytes plus fcsr into NT_FPREGSET, so the note size gives FLEN. Use it when e_flags says nothing. The test core is a real kernel dump with a 264-byte NT_FPREGSET, i.e. FLEN = 8. Signed-off-by: Farid Khaidari --- gdb/riscv-tdep.c | 89 +++++++++++++++++- .../gdb.arch/riscv-core-fpregset.core.bz2 | Bin 0 -> 15134 bytes .../gdb.arch/riscv-core-fpregset.exp | 78 +++++++++++++++ 3 files changed, 164 insertions(+), 3 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-tdep.c b/gdb/riscv-tdep.c index 68c56fbafb3..1af4be77091 100644 --- a/gdb/riscv-tdep.c +++ b/gdb/riscv-tdep.c @@ -56,6 +56,7 @@ #include "arch/riscv.h" #include "record-full.h" #include "riscv-ravenscar-thread.h" +#include "gdbsupport/selftest.h" #include @@ -3923,11 +3924,58 @@ static const struct frame_unwind_legacy riscv_frame_unwind ( /*.prev_arch =*/ NULL ); +/* FP register width, in bytes, implied by the D and F extensions. */ +static constexpr int riscv_flen_d = 8; +static constexpr int riscv_flen_f = 4; + +/* Return the FLEN implied by SIZE, the size of an NT_FPREGSET note, or 0 + if SIZE matches no known layout. The note holds 32 FP registers of + FLEN bytes each, followed by fcsr, which the kernel pads to 8 bytes on + RV64 but leaves at its natural 4 bytes on RV32. */ + +static int +riscv_flen_from_fpregset_size (bfd_size_type size) +{ + constexpr bfd_size_type num_fpregs = 32; + constexpr bfd_size_type fcsr_slot_padded = 8; + constexpr bfd_size_type fcsr_slot = 4; + + if (size == num_fpregs * riscv_flen_d + fcsr_slot_padded) + return riscv_flen_d; + if (size == num_fpregs * riscv_flen_f + fcsr_slot_padded + || size == num_fpregs * riscv_flen_f + fcsr_slot) + return riscv_flen_f; + + return 0; +} + +/* A kernel core file carries no float ABI in its e_flags, but the size + of its NT_FPREGSET note (the ".reg2" pseudo-section) reveals the FLEN. + Return the implied FLEN, or 0 if ABFD has no such note or its size + matches no known layout. */ + +static int +riscv_flen_from_core_fpregset (bfd *abfd) +{ + auto *fpregs = bfd_get_section_by_name (abfd, ".reg2"); + if (fpregs == nullptr) + return 0; + + auto size = bfd_section_size (fpregs); + int flen = riscv_flen_from_fpregset_size (size); + if (flen == 0) + warning (_ ("unrecognized .reg2 note size %s in core file; " + "FLEN left unknown"), + pulongest (size)); + + return flen; +} + /* 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. */ static struct riscv_gdbarch_features -riscv_features_from_bfd (const bfd *abfd) +riscv_features_from_bfd (bfd *abfd) { struct riscv_gdbarch_features features; @@ -3950,9 +3998,14 @@ 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; + + /* A core file carries no float ABI in its e_flags; recover the FLEN + from the size of its NT_FPREGSET note instead. */ + if (features.flen == 0 && bfd_get_format (abfd) == bfd_core) + features.flen = riscv_flen_from_core_fpregset (abfd); if (e_flags & EF_RISCV_RVE) { @@ -4784,12 +4837,42 @@ riscv_supply_regset (const struct regset *regset, } } +#if GDB_SELF_TEST +namespace selftests +{ + +/* Check that an NT_FPREGSET note size maps to the right FLEN. */ + +static void +riscv_flen_from_fpregset_size_test () +{ + /* 32 doubles plus a padded fcsr. */ + SELF_CHECK (riscv_flen_from_fpregset_size (32 * 8 + 8) == riscv_flen_d); + + /* 32 floats plus fcsr, padded on RV64 and unpadded on RV32. */ + SELF_CHECK (riscv_flen_from_fpregset_size (32 * 4 + 8) == riscv_flen_f); + SELF_CHECK (riscv_flen_from_fpregset_size (32 * 4 + 4) == riscv_flen_f); + + /* Anything else leaves the FLEN unknown. */ + SELF_CHECK (riscv_flen_from_fpregset_size (0) == 0); + SELF_CHECK (riscv_flen_from_fpregset_size (32 * 8) == 0); + SELF_CHECK (riscv_flen_from_fpregset_size (32 * 16 + 8) == 0); +} + +} /* namespace selftests */ +#endif /* GDB_SELF_TEST */ + INIT_GDB_FILE (riscv_tdep) { riscv_init_reggroups (); gdbarch_register (bfd_arch_riscv, riscv_gdbarch_init, NULL); +#if GDB_SELF_TEST + selftests::register_test ("riscv-flen-from-fpregset-size", + selftests::riscv_flen_from_fpregset_size_test); +#endif + /* Add root prefix command for all "set debug riscv" and "show debug riscv" commands. */ add_setshow_prefix_cmd ("riscv", no_class, 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..e82474d025edbb75e9d123af8cb2a3c45e4ee960 GIT binary patch literal 15134 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. + +# Check that GDB recovers the FP registers from a kernel core file +# opened without the executable. A kernel 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) is a real kernel core +# whose PT_NOTE carries NT_FPREGSET (264 bytes) but neither NT_GDB_TDESC +# nor any RISC-V attributes, and whose 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 +# ("(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-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 core and the FLEN assertions are +# RV64-specific. +require {istarget "riscv64-*-*"} + +if {![istarget *-*-linux*]} { + unsupported "linux only" + return -1 +} + +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 kernel core without executable"]} { + 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 . +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