@samitouri / QOSamiQemu / commits / ce276ab1a9

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>

Matt Turner committed Aug 5, 2026 at 13:15 UTC ce276ab1a92cad460930fada1bc2e2e4a96f7595
2 files changed +22
linux-user/sh4/elfload.c
+10
@@ -52,6 +52,16 @@ abi_ulong get_elf_hwcap(CPUState *cs)
52 return hwcap;
53 }
54
55 +void elf_core_copy_fpregs(target_elf_fpregset_t *r, const CPUSH4State *env)
56 +{
57 + for (int i = 0; i < 16; i++) {
58 + r->fpregs[i] = tswap32(env->fregs[i]);
59 + r->xfpregs[i] = tswap32(env->fregs[16 + i]);
60 + }
61 + r->fpscr = tswap32(env->fpscr);
62 + r->fpul = tswap32(env->fpul);
63 +}
64 +
65 void elf_core_copy_regs(target_elf_gregset_t *r, const CPUSH4State *env)
66 {
67 for (int i = 0; i < 16; i++) {
linux-user/sh4/target_elf.h
+12
@@ -25,4 +25,16 @@ typedef struct target_elf_gregset_t {
25 struct target_pt_regs pt;
26 } target_elf_gregset_t;
27
28 +#define HAVE_ELF_CORE_FPREGS 1
29 +
30 +/*
31 + * Matches struct user_fpu_struct from arch/sh/include/asm/user.h.
32 + */
33 +typedef struct target_elf_fpregset_t {
34 + uint32_t fpregs[16];
35 + uint32_t xfpregs[16];
36 + uint32_t fpscr;
37 + uint32_t fpul;
38 +} target_elf_fpregset_t;
39 +
40 #endif