qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] tcg/mips: Bugfix for crash when running program


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH] tcg/mips: Bugfix for crash when running program with qemu-i386.
Date: Thu, 6 Jul 2017 18:12:12 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

On 07/06/2017 05:15 PM, Jiang Biao wrote:
When running a helloworld program with qemu-i386 in linux-user
mode on Loongson 3A3000, it will crash. This patch fix the bug.

Signed-off-by: Jiang Biao<address@hidden>
---
  tcg/mips/tcg-target.inc.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tcg/mips/tcg-target.inc.c b/tcg/mips/tcg-target.inc.c
index 8cff9a6..e6fedc9 100644
--- a/tcg/mips/tcg-target.inc.c
+++ b/tcg/mips/tcg-target.inc.c
@@ -1540,7 +1540,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg 
*args, bool is_64)
  #else
      if (TCG_TARGET_REG_BITS > TARGET_LONG_BITS) {
          tcg_out_ext32u(s, base, addr_regl);
-        addr_regl = base;
+        tcg_out_mov(s, TCG_TYPE_PTR, addr_regl, base);
      }
      if (guest_base == 0 && data_regl != addr_regl) {
          base = addr_regl;

This is wrong, because you're not allowed to modify the input operands.

Try this, just a few lines lower in the function:

-        tcg_out_movi(s, TCG_TYPE_PTR, base, guest_base);
-        tcg_out_opc_reg(s, ALIAS_PADD, base, base, addr_regl);
+        tcg_out_movi(s, TCG_TYPE_PTR, TCG_TMP0, guest_base);
+        tcg_out_opc_reg(s, ALIAS_PADD, base, TCG_TMP0, addr_regl);

and you'll need the same change within tcg_out_qemu_st.

Better would be to reserve a register for the guest_base, like we do for ppc. See all of the uses of TCG_GUEST_BASE_REG in tcg/ppc/tcg-target.inc.c.


r~



reply via email to

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