ppc: Fix signal delivery in ppc-user and ppc64-user
There were a number of bugs in the implementation: - The structure alignment was wrong for 64-bit. - Also 64-bit only does RT signals. - On 64-bit, we need to put a pointer to the (aligned) vector registers in the frame and use it for restoring - We had endian bugs when saving/restoring vector registers - My recent fixes for exception NIP broke sigreturn in user mode causing us to resume one instruction too far. - Add VSR second halves Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
committed by
David Gibson
parent
ab04543602
commit
95cda4c44e
@@ -1992,12 +1992,12 @@ void cpu_loop(CPUPPCState *env)
|
||||
if (ret == -TARGET_ERESTARTSYS) {
|
||||
break;
|
||||
}
|
||||
env->nip += 4;
|
||||
if (ret == (target_ulong)(-TARGET_QEMU_ESIGRETURN)) {
|
||||
/* Returning from a successful sigreturn syscall.
|
||||
Avoid corrupting register state. */
|
||||
break;
|
||||
}
|
||||
env->nip += 4;
|
||||
if (ret > (target_ulong)(-515)) {
|
||||
env->crf[0] |= 0x1;
|
||||
ret = -ret;
|
||||
|
||||
Reference in New Issue
Block a user