From e2f3e741b4ba573a7d18f785f51a7b7c7febc88a Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Fri, 11 Dec 2009 09:04:48 -0800 Subject: [PATCH] linux-user: add core dump support for PPC Signed-off-by: Nathan Froyd Signed-off-by: Aurelien Jarno --- linux-user/elfload.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index b3eb8f9f45..d284108f00 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -539,6 +539,32 @@ static inline void init_thread(struct target_pt_regs *_regs, struct image_info * _regs->gpr[5] = pos; } +/* See linux kernel: arch/powerpc/include/asm/elf.h. */ +#define ELF_NREG 48 +typedef target_elf_greg_t target_elf_gregset_t[ELF_NREG]; + +static void elf_core_copy_regs(target_elf_gregset_t *regs, const CPUState *env) +{ + int i; + target_ulong ccr = 0; + + for (i = 0; i < ARRAY_SIZE(env->gpr); i++) { + (*regs)[i] = tswapl(env->gpr[i]); + } + + (*regs)[32] = tswapl(env->nip); + (*regs)[33] = tswapl(env->msr); + (*regs)[35] = tswapl(env->ctr); + (*regs)[36] = tswapl(env->lr); + (*regs)[37] = tswapl(env->xer); + + for (i = 0; i < ARRAY_SIZE(env->crf); i++) { + ccr |= env->crf[i] << (32 - ((i + 1) * 4)); + } + (*regs)[38] = tswapl(ccr); +} + +#define USE_ELF_CORE_DUMP #define ELF_EXEC_PAGESIZE 4096 #endif