qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Re: [PATCH][RFC] Run time TCGv size check for debugging


From: Blue Swirl
Subject: Re: [Qemu-devel] Re: [PATCH][RFC] Run time TCGv size check for debugging
Date: Sat, 1 Nov 2008 14:00:50 +0200

On 10/30/08, Fabrice Bellard <address@hidden> wrote:
> Paul Brook wrote:
>  > On Wednesday 29 October 2008, Fabrice Bellard wrote:
>  >> Blue Swirl wrote:
>  >>> Hi,
>  >>>
>  >>> When emulating a mixed 32/64 bit Qemu target CPUs it's easy to confuse
>  >>> the TCGv size, passing 32 bit TCGv to a function expecting a 64 bit
>  >>> one and vice versa. This patch adds a run time sanity check for TCGv
>  >>> sizes.
>  >>>
>  >>> Because a 32 bit Qemu host does not really use 64 bit TCGvs, the patch
>  >>> is only functional on a 64 bit host. Of course also a pure 32 bit Qemu
>  >>> target is not likely to suffer from TCGv size confusion.
>  >>>
>  >>> Some use cases are not covered yet. Comments?
>  >> Theses tests can be done at compile time by introducing the TCGv_i32 and
>  >> TCGv_i64 types. The same can be done with the helpers by using a few
>  >> macros to declare them.
>  >
>  > That would also require updating all the target code in translate.c to use
>  > these types.  In principle there's no reason why this couldn't be done, but
>  > it'd be a much more invasive change.
>
>
> If you define TCGv as the word size of the emulated CPU, it will
>  eliminates most of the changes.

This version introduces TCGv_i32 and TCGv_i64. TCGv_ptr and TCGv (TL
sized) are based on them.

For Sparc, the patch is very invasive (I just commented out the
helpers to avoid that part)  but I think i386 would need much smaller
changes.

With the patch, I found some bugs in Sparc translation. I'm not sure
what to do with helpers, there should be a way to declare the size of
the arguments somehow and then the calling should be easier than:
tcg_gen_helper_1_4_i64_tl_i32_i32_i32(helper_ld_asi, dst, addr, r_asi,
r_size, r_sign);

Otherwise, I think only some variant of the TCGV_LOW parts are worth
committing, they make the code slightly more easy to understand.

Attachment: compile_time_tcgv_size_check.diff.bz2
Description: BZip2 compressed data

Attachment: sparc_tcgv_size_fixes.diff
Description: plain/text


reply via email to

[Prev in Thread] Current Thread [Next in Thread]