summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-05-29 15:30:01 +0200
committerYury Usishchev <y.usishchev@samsung.com>2014-12-10 13:48:35 +0300
commit19b1e30663fcae89a7fb0d38e863a15c667ea0ec (patch)
treef9d99def9d7e91edc40fed35e83c514f26ff9365
parente771036f20046354b296c5cd28eb594ae1698f0b (diff)
downloadqemu-19b1e30663fcae89a7fb0d38e863a15c667ea0ec.tar.gz
qemu-19b1e30663fcae89a7fb0d38e863a15c667ea0ec.tar.bz2
qemu-19b1e30663fcae89a7fb0d38e863a15c667ea0ec.zip
target-arm: linux-user: no tb_flush on reset
When running automoc4 as linux-user guest program, it segfaults right after it creates a thread. Bisecting pointed to commit a84fac1426 which introduces tb_flush on reset. So something in our thread creation is broken. But for now, let's revert the change to at least get a working build again. [AF: Rebased, fixed typo]
-rw-r--r--target-arm/cpu.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/target-arm/cpu.c b/target-arm/cpu.c
index 5ce7350ce..345a61cb0 100644
--- a/target-arm/cpu.c
+++ b/target-arm/cpu.c
@@ -181,6 +181,15 @@ static void arm_cpu_reset(CPUState *s)
set_float_detect_tininess(float_tininess_before_rounding,
&env->vfp.standard_fp_status);
tlb_flush(s, 1);
+ /* Reset is a state change for some CPUARMState fields which we
+ * bake assumptions about into translated code, so we need to
+ * tb_flush().
+ */
+#if !defined(CONFIG_USER_ONLY)
+ /* XXX hack alert! automoc4 segfaults after spawning a new thread with
+ * this flush enabled */
+ tb_flush(env);
+#endif
#ifndef CONFIG_USER_ONLY
if (kvm_enabled()) {