Thread: fix build on Solaris 10/x86_64 in 64bit mode with Sun Studio 11

fix build on Solaris 10/x86_64 in 64bit mode with Sun Studio 11

From
Stefan Kaltenbrunner
Date:
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

 /*

Re: [PATCHES] fix build on Solaris 10/x86_64 in 64bit mode with Sun

From
Stefan Kaltenbrunner
Date:
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

Re: [PATCHES] fix build on Solaris 10/x86_64 in 64bit mode with Sun

From
Stefan Kaltenbrunner
Date:
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