
On Mon, Jan 23, 2012 at 05:20:50PM -0700, Eric Blake wrote:
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 -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|