On 01/23/2012 03:29 PM, Marc-André Lureau wrote:
> Hi,
>
> I tried to update the fedora mingw package to follow the mingw64
> packaging guideline and allow build for x86 and x64. But I got into
> build warning and errors for x86_64. (using Fedora Cross project repo:
>
http://build1.openftd.org/fedora-cross/fedora-cross.repo,
> x86_64-w64-mingw32-gcc (GCC) 4.6.2 20110908 and later)
>
> The somewhat worrying error is:
>
> util/command.c:54:1: error: static assertion failed: "verify
> (sizeof(pid_t) <= sizeof(int))"
>
> /* We have quite a bit of changes to make if this doesn't hold. */
> verify(sizeof(pid_t) <= sizeof(int));
Oh my. I guess it makes sense - while Linux pid_t is just a
(linearly-incrementing) index into an array of kernel structs, other
OS's use pid_t as the actual kernel pointer to the location in physical
memory where the process information is stored; so if you have 64-bit
pointers, you have a 64-bit pid_t.
Alas, this means that any interface where we are operating on pid_t, but
passed an int, are broken. Thankfully, I don't see any interface like
that in libvirt.c, and we are free to change any internal functions
without breaking the ABI.
Arguably, we could even change the public API, provided that we
hide the change behind an #ifdef WIN64, since we have never
done a release that is officially working on WIN64. That would
obviously want to be something of a last resort though.
Daniel
--
|: