commit:     631faca297db746883ebab340a07bc6b910445bf
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 22 08:31:22 2021 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Fri Oct 22 08:38:30 2021 +0000
URL:        https://gitweb.gentoo.org/proj/sandbox.git/commit/?id=631faca2

libsandbox: fix ppc ptrace return value setting

Forcing errors in the powerpc interface is a little finicky.
Fix it up so all the tests pass now on ppc32 & ppc64.

Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>

 libsandbox/trace/linux/powerpc.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/libsandbox/trace/linux/powerpc.c b/libsandbox/trace/linux/powerpc.c
index 6e9152c..b7fb76a 100644
--- a/libsandbox/trace/linux/powerpc.c
+++ b/libsandbox/trace/linux/powerpc.c
@@ -13,8 +13,14 @@ static long trace_raw_ret(void *vregs)
 static void trace_set_ret(void *vregs, int err)
 {
        trace_regs *regs = vregs;
-       regs->gpr[0] = -1;
-       regs->gpr[3] = err;
+       if ((regs->trap & 0xfff0) == 0x3000) {
+               /* ppc64 */
+               regs->gpr[3] = -err;
+       } else {
+               /* ppc32 */
+               regs->gpr[3] = err;
+               regs->ccr |= 0x10000000;
+       }
        trace_set_regs(regs);
 }
 

Reply via email to