diff -Naur valgrind-2.4.0-ppc-050407/coregrind/ppc/signal.c valgrind-2.4.0-ppc-050407-modified/coregrind/ppc/signal.c --- valgrind-2.4.0-ppc-050407/coregrind/ppc/signal.c 2005-04-03 23:18:30.000000000 +0000 +++ valgrind-2.4.0-ppc-050407-modified/coregrind/ppc/signal.c 2005-04-18 11:50:02.016317000 +0000 @@ -340,17 +340,26 @@ void VGA_(fill_elfregs_from_tst)(struct vki_user_regs_struct *regs, const arch_thread_t *tst) { - /* XXX implement me */ + int i; + for (i=0; i < 32; i++) + regs->gpr[i] = tst->m_gpr[i]; + + regs->nip = tst->m_eip; + regs->orig_gpr3 = tst->m_orig_gpr3; + regs->ctr = tst->m_ctr; + regs->link = tst->m_lr; + regs->xer = tst->m_xer; + regs->ccr = tst->m_cr; } void VGA_(fill_elffpregs_from_tst)(vki_elf_fpregset_t *fpu, const arch_thread_t *tst) { - /* XXX implement me */ + VG_(memcpy)(fpu, tst->m_fpr, sizeof(*fpu)); /* also copies fpscr */ } void VGA_(fill_elffpxregs_from_tst)(vki_elf_fpxregset_t *xfpu, const arch_thread_t *tst) { - /* XXX implement me */ + VG_(memcpy)(xfpu, tst->m_vr, sizeof(*xfpu)); } diff -Naur valgrind-2.4.0-ppc-050407/coregrind/vg_signals.c valgrind-2.4.0-ppc-050407-modified/coregrind/vg_signals.c --- valgrind-2.4.0-ppc-050407/coregrind/vg_signals.c 2005-04-05 00:38:11.000000000 +0000 +++ valgrind-2.4.0-ppc-050407-modified/coregrind/vg_signals.c 2005-04-18 11:49:04.189321000 +0000 @@ -1082,7 +1082,9 @@ regs = (struct vki_user_regs_struct *)prs->pr_reg; +#ifndef __PPC__ /* sizes do not match on ppc */ vg_assert(sizeof(*regs) == sizeof(prs->pr_reg)); +#endif VGA_(fill_elfregs_from_tst)(regs, &tst->arch); } diff -Naur valgrind-2.4.0-ppc-050407/include/ppc-linux/vki_arch.h valgrind-2.4.0-ppc-050407-modified/include/ppc-linux/vki_arch.h --- valgrind-2.4.0-ppc-050407/include/ppc-linux/vki_arch.h 2005-04-05 10:30:51.000000000 +0000 +++ valgrind-2.4.0-ppc-050407-modified/include/ppc-linux/vki_arch.h 2005-04-18 11:49:50.068270000 +0000 @@ -203,6 +203,8 @@ unsigned long result; /* Result of a system call */ }; +#define vki_user_regs_struct vki_pt_regs + #define VKI_PT_R0 0 #define VKI_PT_NIP 32 #define VKI_PT_MSR 33 @@ -533,24 +535,6 @@ }; //---------------------------------------------------------------------- -// From linux-2.6.9/include/asm-ppc/user.h -//---------------------------------------------------------------------- - -struct vki_user_regs_struct { - struct vki_pt_regs regs; /* entire machine state */ - vki_size_t u_tsize; /* text size (pages) */ - vki_size_t u_dsize; /* data size (pages) */ - vki_size_t u_ssize; /* stack size (pages) */ - unsigned long start_code; /* text starting address */ - unsigned long start_data; /* data starting address */ - unsigned long start_stack; /* stack starting address */ - long int signal; /* signal causing core dump */ - void * u_ar0; /* help gdb find registers */ - unsigned long magic; /* identifies a core file */ - char u_comm[32]; /* user command name */ -}; - -//---------------------------------------------------------------------- // From linux-2.6.9/include/asm-ppc/elf.h //----------------------------------------------------------------------