cputlb: cast size_t to target_ulong before using for address masks
While size_t is defined to happily access the biggest host object this isn't the case when generating masks for 64 bit guests on 32 bit hosts. Otherwise we end up truncating the address when we fall back to our unaligned helper. Fixes: https://bugs.launchpad.net/qemu/+bug/1831545 Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Andrew Randrianasulu <randrianasulu@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
c7b3e866bb
commit
ab7a2009df
@ -1318,7 +1318,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
|
|||||||
uint64_t r1, r2;
|
uint64_t r1, r2;
|
||||||
unsigned shift;
|
unsigned shift;
|
||||||
do_unaligned_access:
|
do_unaligned_access:
|
||||||
addr1 = addr & ~(size - 1);
|
addr1 = addr & ~((target_ulong)size - 1);
|
||||||
addr2 = addr1 + size;
|
addr2 = addr1 + size;
|
||||||
r1 = full_load(env, addr1, oi, retaddr);
|
r1 = full_load(env, addr1, oi, retaddr);
|
||||||
r2 = full_load(env, addr2, oi, retaddr);
|
r2 = full_load(env, addr2, oi, retaddr);
|
||||||
|
Loading…
Reference in New Issue
Block a user