Commit b053c98f authored by Ralf Baechle's avatar Ralf Baechle

Fix register layout in o32 core dumps on 64-bit systems.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent c83cfc9c
...@@ -98,7 +98,7 @@ struct elf_prpsinfo32 ...@@ -98,7 +98,7 @@ struct elf_prpsinfo32
#define init_elf_binfmt init_elf32_binfmt #define init_elf_binfmt init_elf32_binfmt
#define jiffies_to_timeval jiffies_to_compat_timeval #define jiffies_to_timeval jiffies_to_compat_timeval
static __inline__ void static inline void
jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value) jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
{ {
/* /*
...@@ -113,21 +113,26 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value) ...@@ -113,21 +113,26 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
#undef ELF_CORE_COPY_REGS #undef ELF_CORE_COPY_REGS
#define ELF_CORE_COPY_REGS(_dest,_regs) elf32_core_copy_regs(_dest,_regs); #define ELF_CORE_COPY_REGS(_dest,_regs) elf32_core_copy_regs(_dest,_regs);
void elf32_core_copy_regs(elf_gregset_t _dest, struct pt_regs *_regs) void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs)
{ {
int i; int i;
memset(_dest, 0, sizeof(elf_gregset_t)); for (i = 0; i < EF_R0; i++)
grp[i] = 0;
/* XXXKW the 6 is from EF_REG0 in gdb/gdb/mips-linux-tdep.c, include/asm-mips/reg.h */ grp[EF_R0] = 0;
for (i=6; i<38; i++) for (i = 1; i <= 31; i++)
_dest[i] = (elf_greg_t) _regs->regs[i-6]; grp[EF_R0 + i] = (elf_greg_t) regs->regs[i];
_dest[i++] = (elf_greg_t) _regs->lo; grp[EF_R26] = 0;
_dest[i++] = (elf_greg_t) _regs->hi; grp[EF_R27] = 0;
_dest[i++] = (elf_greg_t) _regs->cp0_epc; grp[EF_LO] = (elf_greg_t) regs->lo;
_dest[i++] = (elf_greg_t) _regs->cp0_badvaddr; grp[EF_HI] = (elf_greg_t) regs->hi;
_dest[i++] = (elf_greg_t) _regs->cp0_status; grp[EF_CP0_EPC] = (elf_greg_t) regs->cp0_epc;
_dest[i++] = (elf_greg_t) _regs->cp0_cause; grp[EF_CP0_BADVADDR] = (elf_greg_t) regs->cp0_badvaddr;
grp[EF_CP0_STATUS] = (elf_greg_t) regs->cp0_status;
grp[EF_CP0_CAUSE] = (elf_greg_t) regs->cp0_cause;
#ifdef EF_UNUSED0
grp[EF_UNUSED0] = 0;
#endif
} }
MODULE_DESCRIPTION("Binary format loader for compatibility with o32 Linux/MIPS binaries"); MODULE_DESCRIPTION("Binary format loader for compatibility with o32 Linux/MIPS binaries");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment