qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
To: "Alex Bennée" <alex.bennee@linaro.org>, "Thomas Huth" <thuth@redhat.com>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Mahmoud Mandour" <ma.mandourr@gmail.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Alexandre Iooss" <erdnaxe@crans.org>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: Re: [PATCH 2/6] contrib/plugins/cache: fix warning when compiling on 32bits host
Date: Thu, 15 Aug 2024 10:38:38 -0700	[thread overview]
Message-ID: <10d3fd64-bb03-487b-afd2-28e0f5e014c6@linaro.org> (raw)
In-Reply-To: <87ttfm2em2.fsf@draig.linaro.org>

On 8/15/24 04:46, Alex Bennée wrote:
> Thomas Huth <thuth@redhat.com> writes:
> 
>> On 15/08/2024 01.36, Pierrick Bouvier wrote:
>>> Found on debian stable (i386).
>>> ../contrib/plugins/cache.c: In function 'vcpu_tb_trans':
>>> ../contrib/plugins/cache.c:477:30: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>>>     477 |             effective_addr = (uint64_t) qemu_plugin_insn_haddr(insn);
>>>         |
>>> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>>> ---
>>>    contrib/plugins/cache.c | 6 +++---
>>>    1 file changed, 3 insertions(+), 3 deletions(-)
>>> diff --git a/contrib/plugins/cache.c b/contrib/plugins/cache.c
>>> index 512ef6776b7..82ed734d6d4 100644
>>> --- a/contrib/plugins/cache.c
>>> +++ b/contrib/plugins/cache.c
>>> @@ -471,12 +471,12 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
>>>        n_insns = qemu_plugin_tb_n_insns(tb);
>>>        for (i = 0; i < n_insns; i++) {
>>>            struct qemu_plugin_insn *insn = qemu_plugin_tb_get_insn(tb, i);
>>> -        uint64_t effective_addr;
>>> +        uintptr_t effective_addr;
>>>              if (sys) {
>>> -            effective_addr = (uint64_t) qemu_plugin_insn_haddr(insn);
>>> +            effective_addr = (uintptr_t) qemu_plugin_insn_haddr(insn);
>>>            } else {
>>> -            effective_addr = (uint64_t) qemu_plugin_insn_vaddr(insn);
>>> +            effective_addr = (uintptr_t)
>>> qemu_plugin_insn_vaddr(insn);
>>>            }
>>
>> Is this the right fix? I assume effective_addr stores an address of
>> the guest, so if the guest is 64-bit and the host is 32-bit, you now
>> lose the upper bits of the address...?
> 
> I think the problem is higher up, it was a mistake to have:
> 
>    void *qemu_plugin_insn_haddr(const struct qemu_plugin_insn *insn);
> 
> return *void, at least vaddr returns an explicit 64 bit value which can
> hold everything (at a slight expense to 32bit emulation hosts, but
> seriously stop doing that we've been in the 64bit world for some time
> now).
> 

It's an open question I had. When executing 64 bits binaries on a 32 
bits host, are we emulating the full 64 bits address space, or do we 
restrict to 32 bits? For user mode, I don't see how it could be possible 
to have address space beyond the 32 bits range, but system mode is 
probably different.

The real proper fix is to not encode directly value under udata for 
callbacks, but allocate this and pass a pointer instead.

>>
>> The casting for qemu_plugin_insn_vaddr is not required at all since it
>> already returns an uint64_t, so you can remoe that one. For the haddr
>> part, maybe do a double-cast:
>>
>>    effective_addr = (uint64_t)(uintptr_t)qemu_plugin_insn_haddr(insn)
>>
>> ?
>>
>>   Thomas
> 

  reply	other threads:[~2024-08-15 17:39 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-14 23:36 [PATCH 0/6] build contrib/plugins using meson Pierrick Bouvier
2024-08-14 23:36 ` [PATCH 1/6] contrib/plugins/execlog: fix warning Pierrick Bouvier
2024-08-15  8:06   ` Thomas Huth
2024-08-17  6:47   ` Alexandre IOOSS
2024-08-14 23:36 ` [PATCH 2/6] contrib/plugins/cache: fix warning when compiling on 32bits host Pierrick Bouvier
2024-08-15  8:11   ` Thomas Huth
2024-08-15 11:46     ` Alex Bennée
2024-08-15 17:38       ` Pierrick Bouvier [this message]
2024-08-16  2:16         ` Pierrick Bouvier
2024-08-16 12:49         ` Alex Bennée
2024-08-15 22:23       ` Richard Henderson
2024-08-16 12:47         ` Alex Bennée
2024-08-16 14:17           ` Peter Maydell
2024-08-16 21:58           ` Richard Henderson
2024-08-14 23:36 ` [PATCH 3/6] contrib/plugins/hwprofile: " Pierrick Bouvier
2024-08-15  8:13   ` Thomas Huth
2024-08-15 12:03     ` Alex Bennée
2024-08-15 17:40       ` Pierrick Bouvier
2024-08-16  4:50         ` Pierrick Bouvier
2024-08-14 23:36 ` [PATCH 4/6] contrib/plugins/hotblocks: " Pierrick Bouvier
2024-08-15  8:14   ` Thomas Huth
2024-08-14 23:36 ` [PATCH 5/6] meson: build contrib/plugins with meson Pierrick Bouvier
2024-08-14 23:36 ` [PATCH 6/6] contrib/plugins: remove Makefile for contrib/plugins Pierrick Bouvier
2024-08-15  6:00 ` [PATCH 0/6] build contrib/plugins using meson Paolo Bonzini
2024-08-15 11:42   ` Alex Bennée
2024-08-15 17:42     ` Pierrick Bouvier
2024-08-15 18:04   ` Pierrick Bouvier
2024-08-15 18:37     ` Paolo Bonzini
2024-08-15 19:14       ` Peter Maydell
2024-08-16  6:50     ` Philippe Mathieu-Daudé
2024-08-16 18:44       ` Pierrick Bouvier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=10d3fd64-bb03-487b-afd2-28e0f5e014c6@linaro.org \
    --to=pierrick.bouvier@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=berrange@redhat.com \
    --cc=erdnaxe@crans.org \
    --cc=ma.mandourr@gmail.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).