mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
alpha-linux-user: Fix a3 error return with v0 error bypass.
We were failing to initialize a3 for syscalls that bypass the negative return value error check. Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
e7ea6cbefd
commit
0e141977e6
@ -2846,13 +2846,11 @@ void cpu_loop(CPUAlphaState *env)
|
||||
break;
|
||||
}
|
||||
/* Syscall writes 0 to V0 to bypass error check, similar
|
||||
to how this is handled internal to Linux kernel. */
|
||||
if (env->ir[IR_V0] == 0) {
|
||||
env->ir[IR_V0] = sysret;
|
||||
} else {
|
||||
env->ir[IR_V0] = (sysret < 0 ? -sysret : sysret);
|
||||
env->ir[IR_A3] = (sysret < 0);
|
||||
}
|
||||
to how this is handled internal to Linux kernel.
|
||||
(Ab)use trapnr temporarily as boolean indicating error. */
|
||||
trapnr = (env->ir[IR_V0] != 0 && sysret < 0);
|
||||
env->ir[IR_V0] = (trapnr ? -sysret : sysret);
|
||||
env->ir[IR_A3] = trapnr;
|
||||
break;
|
||||
case 0x86:
|
||||
/* IMB */
|
||||
|
Loading…
Reference in New Issue
Block a user