Re: solaris build problem with Sun compilers
От | Alan Stange |
---|---|
Тема | Re: solaris build problem with Sun compilers |
Дата | |
Msg-id | 4464EC2D.6080406@rentec.com обсуждение исходный текст |
Ответ на | Re: solaris build problem with Sun compilers (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: solaris build problem with Sun compilers
|
Список | pgsql-ports |
Tom Lane wrote: > Alan Stange <stange@rentec.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
В списке pgsql-ports по дате отправления: