Re: solaris build problem with Sun compilers

From: Alan Stange <stange(at)rentec(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>, pgsql-ports(at)postgresql(dot)org
Subject: Re: solaris build problem with Sun compilers
Date: 2006-05-12 20:12:29
Message-ID: 4464EC2D.6080406@rentec.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ports

Tom Lane wrote:
> Alan Stange <stange(at)rentec(dot)com> writes:
>> I'm fairly sure CAS was included in the v9 instruction set. I was
>> actually surprised to see that you had allowed it in just for this
>> reason. I'm fairly sure this will break any program that needs to link
>> against the postgresql libs using a "v8" 32 bit version.
>
> I brought up exactly this question when the patch was submitted, and as
> far as I recall it was just brushed aside. Can you tell us anything
> about whether v8 chips are still in use in the field? I'm more than
> ready to revert to ldstub if there's any significant risk of breaking
> real users.

I think the vast majority of hardware in active use will be based on
"v9" instruction set hardware (meaning UltraSparc, Sparc64, etc.).
Someone running postgresql on an old sparc5 would be best off spending
$50 and getting something 10x faster from Ebay.

So, one can assume the hardware can all run "v8plus" or "v9", but the
hurdle is that some compilers will generate "generic" or "v8" binaries
still. That may be the reason why the "cas" variant wasn't comitted for
the gcc compiler as the "cas" instructions are illegal on a v8 platform.

If I try to compile the snapshot with the v62 compiler it fails:

cc -Xa -v -DSUNOS4_CC -O -c tas_cpp.s -o tas.o
/opt/spro62/SUNWspro/bin/../WS6U2/bin/fbe: "tas_cpp.s", line 1: error:
statement syntax
/opt/spro62/SUNWspro/bin/../WS6U2/bin/fbe: "tas_cpp.s", line 2: error:
unknown opcode "solaris_sparc.s"
/opt/spro62/SUNWspro/bin/../WS6U2/bin/fbe: "tas_cpp.s", line 2: error:
statement syntax
/opt/spro62/SUNWspro/bin/../WS6U2/bin/fbe: "tas_cpp.s", line 3: error:
statement syntax
/opt/spro62/SUNWspro/bin/../WS6U2/bin/fbe: "tas_cpp.s", line 13: error:
cannot use v8plus instructions in a non-v8plus target binary
cc: assembler failed for tas_cpp.s

as the default target on the older compiler is "generic". From the
spro9 compiler up to spro11 the default platform is "v8plus", for which
the cas instruction would be valid.

I modified the code that gcc would generate to use a cas instruction and
the build failed because "gcc -mv8plus" makes a call to gas using
"-xarch=v8". Needless to say, it crapped out. I was using gcc-4.0.2.

Take aways:
- postgresql HEAD when using the Solaris compilers spro9 or newer will
only run on v9 based hardware using v8plus or v9 platform.

- postgresql HEAD when using gcc will run on anything as they generate
code for the v7 platform by default and the cas instruction isn't used
in any assembler code in postgresql.

-- Alan

In response to

Responses

Browse pgsql-ports by date

  From Date Subject
Next Message Tom Lane 2006-05-12 20:27:06 Re: solaris build problem with Sun compilers
Previous Message Tom Lane 2006-05-12 19:05:50 Re: solaris build problem with Sun compilers