All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Michael Roth <mdroth@linux.vnet.ibm.com>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Patch Tracking <patches@linaro.org>
Subject: Re: [Qemu-devel] [PATCH] qga/commands-posix.c: Use correct types with g_base64_decode()
Date: Tue, 14 Apr 2015 16:29:37 +0200	[thread overview]
Message-ID: <552D2451.5040403@redhat.com> (raw)
In-Reply-To: <CAFEAcA-+6Xgqj+_k9PgBZZU5HP+oRU2j6w2e2iittc_5sC=u-Q@mail.gmail.com>



On 14/04/2015 15:45, Peter Maydell wrote:
> On 14 April 2015 at 14:42, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>
>>
>> On 08/04/2015 22:02, Peter Maydell wrote:
>>> The second argument of g_base64_decode() is a 'gsize *', not a
>>> 'size_t *'. Some compilation environments (like building 32-bit PPC
>>> binaries on a PPC64 system) will complain about the mismatch:
>>>
>>>   CC    qga/commands-posix.o
>>> qga/commands-posix.c: In function 'qmp_guest_set_user_password':
>>> qga/commands-posix.c:1908:5: error: passing argument 2 of 'g_base64_decode' from incompatible pointer type [-Werror]
>>> In file included from /usr/include/glib-2.0/glib.h:37:0,
>>>                  from qga/commands-posix.c:14:
>>> /usr/include/glib-2.0/glib/gbase64.h:49:9: note: expected ‘gsize *’ but argument is of type ‘size_t *’
>>>
>>> (We previously fixed errors of this type in commit 3d1bba20.)
>>>
>>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>>
>> I think this patch is wrong.  Considering what Thomas was doing
>> ("playing around with --extra-cflags=-m32" on x86) this looks like
>> you're using the 64-bit glib headers while doing a 32-bit compilation.
> 
> I sort of agree, but I don't think the patch is wrong as such.
> The API of the function we're calling demands a pointer to a
> 'gsize', so we should do that, not rely implicitly on 'gsize'
> and 'size_t' being interchangeable.

But you can: gsize is defined to be "An unsigned integer type of the
result of the sizeof operator, corresponding to the size_t type defined
in C99. This type is wide enough to hold the numeric value of a pointer,
so it is usually 32bit wide on a 32bit platform and 64bit wide on a
64bit platform".

So it's impossible to disagree---the patch is correct in the sense that
it fixes a warning.  But it is not correct as far as its original
rationale (compiling with -m32) goes.  What you'll get is a library
compiled for 32-bit gsize, receving arguments from a program that passes
64-bit gsize.  That's an ABI mismatch, and one which is unlikely to work
on most 32-bit architectures; in this sense the patch is wrong.

If anything, I would add a QEMU_BUILD_BUG_ON(sizeof(gsize) !=
sizeof(size_t)) to catch the problem, since we've had many experienced
developers caught unprepared.  At which point we've added another safety
net and the patch becomes 101% correct---but you get a compilation error
anyway, so the original purpose of the patch is not fulfilled.

All in all, I don't think this patch is 2.3 material.

Paolo

> (I have no idea why glib sees fit to define its own versions
> of the standard types, but given that it does we should get
> the interfacing to them right...)

That's 1995-vintage portability for you. :(

Paolo

  reply	other threads:[~2015-04-14 14:29 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-08 20:02 [Qemu-devel] [PATCH] qga/commands-posix.c: Use correct types with g_base64_decode() Peter Maydell
2015-04-08 20:14 ` Michael Roth
2015-04-14 13:38 ` Thomas Huth
2015-04-14 13:41   ` Peter Maydell
2015-04-14 14:30     ` Paolo Bonzini
2015-04-14 13:42 ` Paolo Bonzini
2015-04-14 13:45   ` Peter Maydell
2015-04-14 14:29     ` Paolo Bonzini [this message]
2015-04-14 14:35       ` Eric Blake
2015-04-14 14:50         ` Paolo Bonzini
2015-04-14 15:12           ` Eric Blake
2015-04-14 14:36       ` Peter Maydell

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=552D2451.5040403@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=patches@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.