<div dir="ltr"><div dir="ltr">Hi all,<div><br></div><div>I think I hit a nasty kernel bug testing rt_sigreturn syscall while trying to understand why it was failing on powerpc64. If anyone is curious I changed the way swapcontext is done for powerpc64 to pass the new context as r9:</div><div><br></div><div><div>diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S</div><div>index af5b108..dcd97ca 100644</div><div>--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S</div><div>+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S</div><div>@@ -787,7 +787,7 @@ L(error_exit):</div><div>      R1 pointing at the dummy frame) state.  We do have the ucontext</div><div>      address in R3, so simply copy R3 to R1 before the syscall.  */</div><div> L(do_sigret):</div><div>-  mr   r1,r3,</div><div>+  mr   r9,r3,</div><div>   li   r0,SYS_ify(rt_sigreturn)</div><div>   sc</div><div>   /* No return.  */</div></div><div><br></div><div>And issue a program that calls swapcontext in a signal handler using the third argument (configured with SA_SIGINFO). This seems to be an issue with certain specific kernel version since newer kernels handle the context information without resorting in syscall argument handling.</div><div><br></div><div>Anyway just a heads up that this is probably a nasty issue affecting CentOS7.</div><div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div>"Tradition is not the worship of ashes, but the preservation of fire."</div><div>- Gustav Mahler</div></div></div></div></div></div></div>