Richard Henderson <richard.hender...@linaro.org> writes:
> The dh_alias redirect is intended to handle TCG types as distinguished > from C types. TCG does not distinguish signed int from unsigned int, > because they are the same size. However, we need to retain this > distinction for dh_typecode, lest we fail to extend abi types properly > for the host call parameters. > > This bug was detected when running the 'arm' emulator on an s390 > system. The s390 uses TCG_TARGET_EXTEND_ARGS which triggers code > in tcg_gen_callN to extend 32 bit values to 64 bits; the incorrect > sign data in the typemask for each argument caused the values to be > extended as unsigned values. > > This simple program exhibits the problem: > > static volatile int num = -9; > static volatile int den = -5; > > int > main(void) > { > int quo = num / den; > printf("num %d den %d quo %d\n", num, den, quo); > exit(0); > } > > When run on the broken qemu, this results in: > > num -9 den -5 quo 0 > > The correct result is: > > num -9 den -5 quo 1 > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/876 Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée