diff options
author | Nathan Froyd <froydnj@codesourcery.com> | 2009-12-11 09:04:48 -0800 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2009-12-19 20:29:18 +0100 |
commit | e2f3e741b4ba573a7d18f785f51a7b7c7febc88a (patch) | |
tree | cbd68ee74bcdde9cdfa582cf3ab428770db38c25 /linux-user/elfload.c | |
parent | d049e626ad38be8b88246076398dbadbcf2e0f65 (diff) |
linux-user: add core dump support for PPC
Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'linux-user/elfload.c')
-rw-r--r-- | linux-user/elfload.c | 26 |
1 files changed, 26 insertions, 0 deletions
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 |