mirror of https://github.com/xemu-project/xemu.git
[PATCH] alpha: fix linux syscall convention
According to linux kernel sources, register a3 is set in case of failure (and cleared in case of success) while register v0 contains the result (or -errno in case of error). The convention was not followed which results in weird behaviour. Signed-off-by: Tristan Gingold <gingold@adacore.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5243 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
8109b9b6bf
commit
d74e3b1248
|
@ -1071,11 +1071,12 @@ void call_pal (CPUState *env, int palcode)
|
|||
ret = do_syscall(env, env->ir[IR_V0], env->ir[IR_A0], env->ir[IR_A1],
|
||||
env->ir[IR_A2], env->ir[IR_A3], env->ir[IR_A4],
|
||||
env->ir[IR_A5]);
|
||||
env->ir[IR_A3] = ret;
|
||||
if (ret > (target_ulong)(-515)) {
|
||||
env->ir[IR_V0] = 1;
|
||||
if (ret >= 0) {
|
||||
env->ir[IR_A3] = 0;
|
||||
env->ir[IR_V0] = ret;
|
||||
} else {
|
||||
env->ir[IR_V0] = 0;
|
||||
env->ir[IR_A3] = 1;
|
||||
env->ir[IR_V0] = -ret;
|
||||
}
|
||||
break;
|
||||
case 0x9E:
|
||||
|
|
Loading…
Reference in New Issue