summaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2026-08-05 13:15:07 -0400
committerHelge Deller <deller@gmx.de>2026-08-07 18:14:13 +0200
commitce276ab1a92cad460930fada1bc2e2e4a96f7595 (patch)
treefb9942dc8202030a1dabdaf6ed7c3af913b88d5e /linux-user
parent0f183237d24daac28b6290b0605cba7b47aa8052 (diff)
downloadqemu-ce276ab1a92cad460930fada1bc2e2e4a96f7595.tar.gz
qemu-ce276ab1a92cad460930fada1bc2e2e4a96f7595.zip
linux-user/sh4: write the floating-point registers to a core dump
Write an NT_FPREGSET note for SH4, matching struct user_fpu_struct from arch/sh/include/asm/user.h: fr0-fr15, xf0-xf15, fpscr, fpul. Signed-off-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Helge Deller <deller@gmx.de> Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/sh4/elfload.c10
-rw-r--r--linux-user/sh4/target_elf.h12
2 files changed, 22 insertions, 0 deletions
diff --git a/linux-user/sh4/elfload.c b/linux-user/sh4/elfload.c
index f03ce49e7d..41601626ca 100644
--- a/linux-user/sh4/elfload.c
+++ b/linux-user/sh4/elfload.c
@@ -52,6 +52,16 @@ abi_ulong get_elf_hwcap(CPUState *cs)
return hwcap;
}
+void elf_core_copy_fpregs(target_elf_fpregset_t *r, const CPUSH4State *env)
+{
+ for (int i = 0; i < 16; i++) {
+ r->fpregs[i] = tswap32(env->fregs[i]);
+ r->xfpregs[i] = tswap32(env->fregs[16 + i]);
+ }
+ r->fpscr = tswap32(env->fpscr);
+ r->fpul = tswap32(env->fpul);
+}
+
void elf_core_copy_regs(target_elf_gregset_t *r, const CPUSH4State *env)
{
for (int i = 0; i < 16; i++) {
diff --git a/linux-user/sh4/target_elf.h b/linux-user/sh4/target_elf.h
index 3fcb63d409..5923022036 100644
--- a/linux-user/sh4/target_elf.h
+++ b/linux-user/sh4/target_elf.h
@@ -25,4 +25,16 @@ typedef struct target_elf_gregset_t {
struct target_pt_regs pt;
} target_elf_gregset_t;
+#define HAVE_ELF_CORE_FPREGS 1
+
+/*
+ * Matches struct user_fpu_struct from arch/sh/include/asm/user.h.
+ */
+typedef struct target_elf_fpregset_t {
+ uint32_t fpregs[16];
+ uint32_t xfpregs[16];
+ uint32_t fpscr;
+ uint32_t fpul;
+} target_elf_fpregset_t;
+
#endif