This is the mail archive of the cygwin-developers mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 1/18/2012 04:26, Corinna Vinschen wrote: > On Jan 17 14:56, Christopher Faylor wrote: >> On Tue, Jan 17, 2012 at 06:22:42PM +0100, Corinna Vinschen wrote: >>> Hi Jon, >>> >>> On Jun 27 11:08, JonY wrote: >>>> Yes, using only the win32api headers is possible, see the --disable-crt >>>> option in the mingw-w64-headers configure. The headers are very much >>>> LLP64 though. >>>> >>>> Though mingw-w64-crt doesn't have this facility yet, it is possible to >>>> use only dlltool to build the stub w32api equivalent link libraries for >>>> win64 linking, but without mingw bits like libmingwex. >>>> [...] >>>> The hairy parts would be the LP64/LLP64 ABI difference. For now we need >>>> to decide which ABI to go with, the rest of the work will rest on this >>>> decision. >>> >>> Here's a question to warm up this age-old thread. >>> >>> Consider we would like to have Cygwin-64 being LP64, and consider we >>> would like to use the mingw64 headers and libs to build Cygwin. >>> >>> In that case, all mingw64 headers have a problem in conjunction with >>> a Cygwin 64 bit compiler: All definitions in the headers which are >>> based on 'long' or 'unsigned long' are wrong. All of them would have >>> to use 'int' or 'unsigned int' instead. >>> >>> So, here's my question: Would it be acceptable upstream to add changes >>> along the lines of this one, for instance, in winnt.h: >>> >>> #if defined (__CYGWIN__) && defined (__x86_64__) >>> typedef int LONG; >>> #else >>> typedef long LONG; >>> #endif >>> >>> ? >> >> I think it's very wrong to put understanding of __CYGWIN__ into w32api. >> >> I'm saying this without checking to see if it's already there because, >> if it is, that's not a justification, it's a bug. > > Windows headers in their current state as in Mingw32 and Mingw64 only > work for 32-bit compiler or LLP64 64-bit compilers. How do you manage > it so that they still work in conjunction with an LP64 compiler as the > 64-bit Cygwin compiler is supposed to be? > > There are three ways AFAICS, but all of them require to change the > header files: > > - As above. > > - Start every header with a redefinition of "long": > > #if defined (__CYGWIN__) && defined (__x86_64__) > # define long int > #endif > [...] > #if defined (__CYGWIN__) && defined (__x86_64__) > # undef long > #endif > > - Add a new target-independent pragma to GCC and add this to the headers: > > #pragma long_size (push, 4) > [...] > #pragma long_size (pop) > > or > > #pragma model64 (push, LLP64) // value one of LLP64, LP64, ILP64, SILP64 > [...] > #pragma model64 (pop) > > I would prefer the latter. > > > Corinna > > I'm sadly too busy these days to poke at win64 newlib port. Kai and Dave should have more relevant details on if this method is practical.
Attachment:
signature.asc
Description: OpenPGP digital signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |