diff options
| author | Matt Turner <mattst88@gmail.com> | 2026-08-05 13:15:07 -0400 |
|---|---|---|
| committer | Helge Deller <deller@gmx.de> | 2026-08-07 18:14:13 +0200 |
| commit | ce276ab1a92cad460930fada1bc2e2e4a96f7595 (patch) | |
| tree | fb9942dc8202030a1dabdaf6ed7c3af913b88d5e /linux-user | |
| parent | 0f183237d24daac28b6290b0605cba7b47aa8052 (diff) | |
| download | qemu-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.c | 10 | ||||
| -rw-r--r-- | linux-user/sh4/target_elf.h | 12 |
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 |
