Thread: fix build on Solaris 10/x86_64 in 64bit mode with Sun Studio 11
on an Intel based Solaris 10U2 box using Sun Studio 11 with -xarch=generic64 we get a compile time failure in contrib/pgcrypto because BYTE_ORDER is not defined. in src/include/port/solaris.h we define it to little endian only for __i386 - however in 64bit mode the compiler only defines __amd64 causing YTE_ORDER to be undefined. The other option would be to use __x86 which is defined on all intel architectures. attached is a quick hack to allow pgcrypto to compile on that platform. Stefan --- /export/home/pgbuild/pgbuildfarm/HEAD/pgsql/src/include/port/solaris.h Thu Oct 5 00:49:44 2006 +++ src/include/port/solaris.h Sun Jan 7 09:24:51 2007 @@ -5,6 +5,10 @@ * symbols are defined on both GCC and Solaris CC, although GCC * doesn't document them. The __xxx__ symbols are only on GCC. */ +#if defined(__amd64) && !defined(__amd64__) +#define __amd64__ +#endif + #if defined(__i386) && !defined(__i386__) #define __i386__ #endif @@ -34,6 +38,9 @@ #ifdef __i386__ #define BYTE_ORDER LITTLE_ENDIAN #endif +#ifdef __amd64__ +#define BYTE_ORDER LITTLE_ENDIAN +#endif #endif /*
Stefan Kaltenbrunner wrote: > on an Intel based Solaris 10U2 box using Sun Studio 11 with > -xarch=generic64 we get a compile time failure in contrib/pgcrypto > because BYTE_ORDER is not defined. > > in src/include/port/solaris.h we define it to little endian only for > __i386 - however in 64bit mode the compiler only defines __amd64 causing > YTE_ORDER to be undefined. > The other option would be to use __x86 which is defined on all intel > architectures. > > attached is a quick hack to allow pgcrypto to compile on that platform. buildfarm report for that issue: http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=clownfish&dt=2007-01-10%2014:18:23 Stefan
Stefan Kaltenbrunner <stefan@kaltenbrunner.cc> writes: > in src/include/port/solaris.h we define it to little endian only for > __i386 - however in 64bit mode the compiler only defines __amd64 causing > YTE_ORDER to be undefined. > The other option would be to use __x86 which is defined on all intel > architectures. Shouldn't this use the already-defined __x86_64__ symbol? I assume that's already defined because otherwise s_lock.h would fail... regards, tom lane
Stefan Kaltenbrunner <stefan@kaltenbrunner.cc> writes: > on an Intel based Solaris 10U2 box using Sun Studio 11 with > -xarch=generic64 we get a compile time failure in contrib/pgcrypto > because BYTE_ORDER is not defined. After further thought I changed this to handle either __amd64 or __x86_64 (or both). Applied. regards, tom lane
Tom Lane wrote: > Stefan Kaltenbrunner <stefan@kaltenbrunner.cc> writes: >> on an Intel based Solaris 10U2 box using Sun Studio 11 with >> -xarch=generic64 we get a compile time failure in contrib/pgcrypto >> because BYTE_ORDER is not defined. > > After further thought I changed this to handle either __amd64 or > __x86_64 (or both). Applied. I think it defines both at all times - if we want fewer rules in there we could switch to just testing __x86 für both 64bit and 32bit but I guess it's fine as it stands now. Stefan