[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] tcg: Remove dh_alias indirection for dh_typecode
From: |
Alex Bennée |
Subject: |
Re: [PATCH] tcg: Remove dh_alias indirection for dh_typecode |
Date: |
Thu, 17 Feb 2022 12:41:06 +0000 |
User-agent: |
mu4e 1.7.7; emacs 28.0.91 |
Richard Henderson <richard.henderson@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.bennee@linaro.org>
--
Alex Bennée