summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Henderson2017-10-31 13:53:54 +0100
committerRiku Voipio2017-11-07 20:58:12 +0100
commitfc37dcfe1a049090e72fd3f4810f0b221cc5399c (patch)
treeaa96fb6fd3710ca4a7440a0538dd37b32fd5729b
parentlinux-user/hppa: Fix TARGET_SA_* defines (diff)
downloadqemu-fc37dcfe1a049090e72fd3f4810f0b221cc5399c.tar.gz
qemu-fc37dcfe1a049090e72fd3f4810f0b221cc5399c.tar.xz
qemu-fc37dcfe1a049090e72fd3f4810f0b221cc5399c.zip
linux-user/hppa: Fix cpu_clone_regs
By failing to return from the syscall in the child, the child issues another clone syscall and hilarity ensues. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
-rw-r--r--linux-user/hppa/target_cpu.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/linux-user/hppa/target_cpu.h b/linux-user/hppa/target_cpu.h
index 1a5cecad3c..e50522eae9 100644
--- a/linux-user/hppa/target_cpu.h
+++ b/linux-user/hppa/target_cpu.h
@@ -24,7 +24,11 @@ static inline void cpu_clone_regs(CPUHPPAState *env, target_ulong newsp)
if (newsp) {
env->gr[30] = newsp;
}
+ /* Indicate child in return value. */
env->gr[28] = 0;
+ /* Return from the syscall. */
+ env->iaoq_f = env->gr[31];
+ env->iaoq_b = env->gr[31] + 4;
}
static inline void cpu_set_tls(CPUHPPAState *env, target_ulong newtls)