qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] target/m68k: Perform writback before modifying SR


From: Laurent Vivier
Subject: Re: [PATCH 2/2] target/m68k: Perform writback before modifying SR
Date: Wed, 21 Sep 2022 15:02:38 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1

Le 13/09/2022 à 16:28, Richard Henderson a écrit :
Writes to SR may change security state, which may involve
a swap of %ssp with %usp as reflected in %a7.  Finish the
writeback of %sp@+ before swapping stack pointers.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1206
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
  target/m68k/translate.c | 8 +++++---
  1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 87044382c3..8506da0a0b 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -2285,9 +2285,9 @@ static void gen_set_sr_im(DisasContext *s, uint16_t val, 
int ccr_only)
          tcg_gen_movi_i32(QREG_CC_N, val & CCF_N ? -1 : 0);
          tcg_gen_movi_i32(QREG_CC_X, val & CCF_X ? 1 : 0);
      } else {
-        TCGv sr = tcg_const_i32(val);
-        gen_helper_set_sr(cpu_env, sr);
-        tcg_temp_free(sr);
+        /* Must writeback before changing security state. */
+        do_writebacks(s);
+        gen_helper_set_sr(cpu_env, tcg_constant_i32(val));
      }
      set_cc_op(s, CC_OP_FLAGS);
  }
@@ -2297,6 +2297,8 @@ static void gen_set_sr(DisasContext *s, TCGv val, int 
ccr_only)
      if (ccr_only) {
          gen_helper_set_ccr(cpu_env, val);
      } else {
+        /* Must writeback before changing security state. */
+        do_writebacks(s);
          gen_helper_set_sr(cpu_env, val);
      }
      set_cc_op(s, CC_OP_FLAGS);

Applied to my m68k-for-7.2 branch

Thanks,
Laurent





reply via email to

[Prev in Thread] Current Thread [Next in Thread]