]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
tcg/arm: Fix SIGILL in tcg_out_qemu_st_direct
authorJoseph Burt <caseorum@gmail.com>
Sun, 21 Jan 2024 21:14:39 +0000 (21:14 +0000)
committerMichael Tokarev <mjt@tls.msk.ru>
Thu, 25 Jan 2024 16:14:05 +0000 (19:14 +0300)
When tcg_out_qemu_st_{index,direct} were merged, the direct case for
MO_64 was omitted, causing qemu_st_i64 to be encoded as 0xffffffff due
to underflow when adding h.base and h.index.

Fixes: 1df6d611bdc2 ("tcg/arm: Introduce HostAddress")
Signed-off-by: Joseph Burt <caseorum@gmail.com>
Message-Id: <20240121211439.100829-1-caseorum@gmail.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
(cherry picked from commit 9f6523e8e4689cafdbed7c10b7cf7c775b5a607b)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
tcg/arm/tcg-target.c.inc

index 83e286088f0e8b8a8cf028c3c59a2c411606b043..1864b8054fe3e8202212634f73ad5a7a787aab1e 100644 (file)
@@ -1667,6 +1667,9 @@ static void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc, TCGReg datalo,
             } else {
                 tcg_out_strd_r(s, h.cond, datalo, h.base, h.index);
             }
+        } else if (h.index < 0) {
+            tcg_out_st32_12(s, h.cond, datalo, h.base, 0);
+            tcg_out_st32_12(s, h.cond, datahi, h.base, 4);
         } else if (h.index_scratch) {
             tcg_out_st32_rwb(s, h.cond, datalo, h.index, h.base);
             tcg_out_st32_12(s, h.cond, datahi, h.index, 4);