The register allocator may sometimes pass a 64-bit value to a 32-bit
operation if truncations are considered no-ops by the backend.
When this happens, user-mode emulation may use an incorrect offset
for loads and stores.  This affects aarch64 and x86, because other
architectures already zero-extend the offset before using it for a
load or store.

To fix this for aarch64, use the uxtw modifier on load and store
instructions.

Paolo

Paolo Bonzini (2):
  tcg: aarch64: add ext argument to tcg_out_insn_3310
  tcg: aarch64: use 32-bit offset for 32-bit user-mode emulation

 tcg/aarch64/tcg-target.c | 63 +++++++++++++++++++++++++++---------------------
 1 file changed, 36 insertions(+), 27 deletions(-)

-- 
2.4.3


Reply via email to