diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2018-06-10 14:25:37 +0200 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2018-06-11 14:02:06 +0000 |
commit | 525f70debea0f7e725fd3be0e9bc8df6f9f3a2c9 (patch) | |
tree | 63e7f689ff21b2a4a5569188fded947605137e95 /linux/powerpc | |
parent | d2aa5046e95b35a83fcfd91758d0a24e99792c6d (diff) | |
download | strace-525f70debea0f7e725fd3be0e9bc8df6f9f3a2c9.tar.gz |
linux: set error flags in arch_set_error on POWER and Alpha
* alpha/set_error.c (arch_set_error): Set alpha_r3 to 1, update tracee's
REG_A3.
* powerpc/set_error.c (arch_set_error): Set bit 28 in CCR register,
update tracee's PT_CCR.
Fixes: v4.15~126 "Implement arch specific methods of changing syscall number and error code"
Diffstat (limited to 'linux/powerpc')
-rw-r--r-- | linux/powerpc/set_error.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/linux/powerpc/set_error.c b/linux/powerpc/set_error.c index 38ae32bb7..602ca15e1 100644 --- a/linux/powerpc/set_error.c +++ b/linux/powerpc/set_error.c @@ -2,8 +2,10 @@ static int arch_set_error(struct tcb *tcp) { ppc_regs.gpr[3] = tcp->u_error; + ppc_regs.ccr |= 0x10000000; #ifdef HAVE_GETREGS_OLD - return upoke(tcp, sizeof(long) * (PT_R0 + 3), ppc_regs.gpr[3]); + return upoke(tcp, sizeof(long) * PT_CCR, ppc_regs.ccr) || + upoke(tcp, sizeof(long) * (PT_R0 + 3), ppc_regs.gpr[3]); #else return set_regs(tcp->pid); #endif |