On 08/27/2015 04:47 PM, Andreas Färber wrote:
The argument order for the !CONFIG_SOFTMMU case was jumbled up since
ffc6372851d8631a9f9fa56ec613b3244dc635b9 ("tcg/aarch64: use 32-bit
offset for 32-bit user-mode emulation"), regressing from -rc2 to v2.4.0.
Fix their order to avoid segfaults, e.g., in openSUSE's GNU coreutils 8.24.
Nack. The argument order is correct, that is...
- tcg_out_qemu_ld_direct(s, memop, ext, data_reg,
- guest_base ? TCG_REG_GUEST_BASE : TCG_REG_XZR,
- otype, addr_reg);
+ tcg_out_qemu_ld_direct(s, memop, ext, data_reg, addr_reg, otype,
+ guest_base ? TCG_REG_GUEST_BASE : TCG_REG_XZR);
TCG_REG_GUEST_BASE is definitely the "base" register, holding a 64-bit host
address, while addr_reg is the "offset" register, holding a (potentially)
32-bit guest address. It is (supposed to be) the "offset" register to which
the zero-extend is applied.
If something's wrong, and I'm not currently in a position to verify one way or
another, it's in tcg_out_insn_3310.
r~