diff --git a/exec.c b/exec.c index c8658c6f9d5b84a2320e02d091102b96d42cc2b0..2426bf7ce46b15d083a3cdd1d0b89caf52c3fa5e 100644 --- a/exec.c +++ b/exec.c @@ -642,6 +642,10 @@ CPUArchState *cpu_copy(CPUArchState *env) CPUWatchpoint *wp; #endif + /* Reset non arch specific state */ + cpu_reset(ENV_GET_CPU(new_env)); + + /* Copy arch specific state into the new CPU */ memcpy(new_env, env, sizeof(CPUArchState)); /* Clone all break/watchpoints. diff --git a/linux-user/syscall.c b/linux-user/syscall.c index a797afc34072b1306ab6e82ac9e10b1e419f1879..3f6db4b0d128d6d178443b058505fc0546895d65 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4293,9 +4293,6 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp, init_task_state(ts); /* we create a new CPU instance. */ new_env = cpu_copy(env); -#if defined(TARGET_I386) || defined(TARGET_SPARC) || defined(TARGET_PPC) - cpu_reset(ENV_GET_CPU(new_env)); -#endif /* Init regs that differ from the parent. */ cpu_clone_regs(new_env, newsp); new_env->opaque = ts;