mirror of
https://gitlab.com/qemu-project/qemu.git
synced 2026-08-26 22:23:12 -04:00
linux-user/mips: write the floating-point registers to a core dump
Write an NT_FPREGSET note for MIPS and MIPS64, matching the kernel's elf_fpregset_t layout (ELF_NFPREG = 33): fpr[0..31] hold f0-f31, and fcsr occupies the low 32 bits of slot 32. The pad field rounds the struct to 33 × 8 bytes = 264 bytes. Signed-off-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Helge Deller <deller@gmx.de> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
parent
2304a65529
commit
bc22871fc0
3 changed files with 34 additions and 0 deletions
|
|
@ -130,6 +130,14 @@ const char *get_elf_base_platform(CPUState *cs)
|
|||
|
||||
#undef MATCH_PLATFORM_INSN
|
||||
|
||||
void elf_core_copy_fpregs(target_elf_fpregset_t *r, const CPUMIPSState *env)
|
||||
{
|
||||
for (int i = 0; i < 32; i++) {
|
||||
r->fpr[i] = tswap64(env->active_fpu.fpr[i].d);
|
||||
}
|
||||
r->fcsr = tswap32(env->active_fpu.fcr31);
|
||||
}
|
||||
|
||||
/* See linux kernel: arch/mips/kernel/process.c:elf_dump_regs. */
|
||||
#ifndef TARGET_MIPS64
|
||||
void elf_core_copy_regs(target_elf_gregset_t *r, const CPUMIPSState *env)
|
||||
|
|
|
|||
|
|
@ -26,4 +26,17 @@ typedef struct target_elf_gregset_t {
|
|||
};
|
||||
} target_elf_gregset_t;
|
||||
|
||||
#define HAVE_ELF_CORE_FPREGS 1
|
||||
|
||||
/*
|
||||
* Matches the kernel's elf_fpregset_t (ELF_NFPREG = 33):
|
||||
* fpr[0..31] hold f0-f31; fcsr occupies the low 32 bits of slot 32.
|
||||
* pad rounds the struct to 33 × 8 bytes = 264 bytes.
|
||||
*/
|
||||
typedef struct target_elf_fpregset_t {
|
||||
uint64_t fpr[32];
|
||||
uint32_t fcsr;
|
||||
uint32_t pad;
|
||||
} target_elf_fpregset_t;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -32,4 +32,17 @@ typedef struct target_elf_gregset_t {
|
|||
};
|
||||
} target_elf_gregset_t;
|
||||
|
||||
#define HAVE_ELF_CORE_FPREGS 1
|
||||
|
||||
/*
|
||||
* Matches the kernel's elf_fpregset_t (ELF_NFPREG = 33):
|
||||
* fpr[0..31] hold f0-f31; fcsr occupies the low 32 bits of slot 32.
|
||||
* pad rounds the struct to 33 × 8 bytes = 264 bytes.
|
||||
*/
|
||||
typedef struct target_elf_fpregset_t {
|
||||
uint64_t fpr[32];
|
||||
uint32_t fcsr;
|
||||
uint32_t pad;
|
||||
} target_elf_fpregset_t;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue