On Mon, Aug 6, 2018 at 6:17 PM, Nadav Har'El <[email protected]> wrote:
> > Oh, I found the problem. It is OSv's bug, on the way we define uint64_t > (we define it ourselves, we don't use gcc's headers): > In: > > include/api/x64/bits/alltypes.h.sh:TYPEDEF unsigned long uint64_t; > > This is incorrect for -m32, where "unsigned long" is just 32 bits, not 64 > bits! > > I think this should either be changed to "unsigned long long" (but need to > check the implications...) or probably better - use an #ifdef: > > #if __WORDSIZE == 64 > typedef signed long int int64_t; > typedef unsigned long int uint64_t; > #else > typedef signed long long int __int64_t; > typedef unsigned long long int __uint64_t; > #endif > > then you wouldn't need to manually change the existing use of uint64_t. > I thought __WORDSIZE was a gcc builtin, but it isn't... So we can use the builtin __x86_64__ : #ifdef __x86_64__ typedef signed long int int64_t; typedef unsigned long int uint64_t; #else typedef signed long long int int64_t; typedef unsigned long long int uint64_t; #endif Also need to define the __* variants of the same type (they should just be aliases to the ones without the __, I don't know why we didn't do that). -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
