Thread: Sun inline assembler ...

Sun inline assembler ...

From
Hans-Jürgen Schönig
Date:
I have some minor troubles when using the Sun Compiler 9 on Solaris 9.
The spinlock assembler code is somehow broken for Solaris 9 and Solaris
10 (it works for Sun CC 8).

The following patch fixes this:

[hs@localhost postgresql-8.0.1]$ cd src/backend/storage/lmgr/
[hs@localhost lmgr]$ diff s_lock.c /tmp/fixed_s_lock.c
248,249c248,249
<       asm(".section \"data\"");
<       asm(".section \"text\"");
--->       asm(".seg \"data\"");>       asm(".seg \"text\"");

Can other folks build on Sun Studio 9? How would GCC treat that patch?
Did anybody encounter similar problems?
Best regards,
    Hans



Re: Sun inline assembler ...

From
Michael Fuhr
Date:
On Thu, Jul 07, 2005 at 04:53:16PM +0200, Hans-Jürgen Schönig wrote:
> I have some minor troubles when using the Sun Compiler 9 on Solaris 9.
> The spinlock assembler code is somehow broken for Solaris 9 and Solaris
> 10 (it works for Sun CC 8).
>
> The following patch fixes this:
>
> [hs@localhost postgresql-8.0.1]$ cd src/backend/storage/lmgr/
> [hs@localhost lmgr]$ diff s_lock.c /tmp/fixed_s_lock.c
> 248,249c248,249
> <       asm(".section \"data\"");
> <       asm(".section \"text\"");
> ---
> >       asm(".seg \"data\"");
> >       asm(".seg \"text\"");

There's already an #ifdef around that code -- is it not matching
correctly for your compiler?  Here's what I see in REL8_0_STABLE
and in HEAD (s_lock.c 1.35):

244 #ifdef SUNOS4_CC
245     asm(".seg \"data\"");
246     asm(".seg \"text\"");
247 #else
248     asm(".section \"data\"");
249     asm(".section \"text\"");
250 #endif

This looks like the thread that led to the above code:

http://archives.postgresql.org/pgsql-patches/2004-12/msg00213.php

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

Re: Sun inline assembler ...

From
Hans-Jürgen Schönig
Date:
I have seen that.
The question is: Gcc seems to get it right ;).
In my little world two compiler should handle this the same but I have
learned that Sun is in many cases different world ...
1+1 is always 2 - on Sun it could also be 3 ;).
hans



Michael Fuhr wrote:
> On Thu, Jul 07, 2005 at 04:53:16PM +0200, Hans-Jürgen Schönig wrote:
>
>>I have some minor troubles when using the Sun Compiler 9 on Solaris 9.
>>The spinlock assembler code is somehow broken for Solaris 9 and Solaris
>>10 (it works for Sun CC 8).
>>
>>The following patch fixes this:
>>
>>[hs@localhost postgresql-8.0.1]$ cd src/backend/storage/lmgr/
>>[hs@localhost lmgr]$ diff s_lock.c /tmp/fixed_s_lock.c
>>248,249c248,249
>><       asm(".section \"data\"");
>><       asm(".section \"text\"");
>>---
>>
>>>      asm(".seg \"data\"");
>>>      asm(".seg \"text\"");
>
>
> There's already an #ifdef around that code -- is it not matching
> correctly for your compiler?  Here's what I see in REL8_0_STABLE
> and in HEAD (s_lock.c 1.35):
>
> 244 #ifdef SUNOS4_CC
> 245     asm(".seg \"data\"");
> 246     asm(".seg \"text\"");
> 247 #else
> 248     asm(".section \"data\"");
> 249     asm(".section \"text\"");
> 250 #endif
>
> This looks like the thread that led to the above code:
>
> http://archives.postgresql.org/pgsql-patches/2004-12/msg00213.php
>



Re: Sun inline assembler ...

From
Tom Lane
Date:
>> Here's what I see in REL8_0_STABLE
>> and in HEAD (s_lock.c 1.35):
>>
>> 244 #ifdef SUNOS4_CC
>> 245     asm(".seg \"data\"");
>> 246     asm(".seg \"text\"");
>> 247 #else
>> 248     asm(".section \"data\"");
>> 249     asm(".section \"text\"");
>> 250 #endif

I see that template/sunos4 adds -DSUNOS4_CC to CFLAGS, but template/solaris
does not.  Maybe it should too?  I'm not real clear about which platforms
each of those templates gets used on.

            regards, tom lane

Re: Sun inline assembler ...

From
John R Pierce
Date:
Tom Lane wrote:
>>>Here's what I see in REL8_0_STABLE
>>>and in HEAD (s_lock.c 1.35):
>>>
>>>244 #ifdef SUNOS4_CC
>>>245     asm(".seg \"data\"");
>>>246     asm(".seg \"text\"");
>>>247 #else
>>>248     asm(".section \"data\"");
>>>249     asm(".section \"text\"");
>>>250 #endif
>
>
> I see that template/sunos4 adds -DSUNOS4_CC to CFLAGS, but template/solaris
> does not.  Maybe it should too?  I'm not real clear about which platforms
> each of those templates gets used on.

as a random reminder for those who don't deal with sun... Solaris is SunOS 5.x,
currently 5.9 and now 5.10.  To get really confusing, they called it Solaris
2.x up to 2.6 (actually SunOS 5.7), then Solaris 7 was 2.7/5.7

    solaris    ver    sunos ver
    Solaris 1.3    SunOS 4.3
    Solaris 2.5.1    SunOS 5.5.1
    Solaris 2.6    SunOS 5.6
    Solaris 7    SunOS 5.7
    Solaris 8    SunOS 5.8
    Solaris 9    SunOS 5.9

this is nearly as bad as Java versioning.

    Java 1.x
    Java 2
    Java 2.1
    Java 2.1.1     -> Java2 release 1.1
    Java 2.1.4.2     -> Java2 1.4.2
    Java 2.5    -> J2SE 5.0

Re: Sun inline assembler ...

From
Bruce Momjian
Date:
I have applied the following patch to fix this, hopefully.

---------------------------------------------------------------------------

John R Pierce wrote:
> Tom Lane wrote:
> >>>Here's what I see in REL8_0_STABLE
> >>>and in HEAD (s_lock.c 1.35):
> >>>
> >>>244 #ifdef SUNOS4_CC
> >>>245     asm(".seg \"data\"");
> >>>246     asm(".seg \"text\"");
> >>>247 #else
> >>>248     asm(".section \"data\"");
> >>>249     asm(".section \"text\"");
> >>>250 #endif
> >
> >
> > I see that template/sunos4 adds -DSUNOS4_CC to CFLAGS, but template/solaris
> > does not.  Maybe it should too?  I'm not real clear about which platforms
> > each of those templates gets used on.
>
> as a random reminder for those who don't deal with sun... Solaris is SunOS 5.x,
> currently 5.9 and now 5.10.  To get really confusing, they called it Solaris
> 2.x up to 2.6 (actually SunOS 5.7), then Solaris 7 was 2.7/5.7
>
>     solaris    ver    sunos ver
>     Solaris 1.3    SunOS 4.3
>     Solaris 2.5.1    SunOS 5.5.1
>     Solaris 2.6    SunOS 5.6
>     Solaris 7    SunOS 5.7
>     Solaris 8    SunOS 5.8
>     Solaris 9    SunOS 5.9
>
> this is nearly as bad as Java versioning.
>
>     Java 1.x
>     Java 2
>     Java 2.1
>     Java 2.1.1     -> Java2 release 1.1
>     Java 2.1.4.2     -> Java2 1.4.2
>     Java 2.5    -> J2SE 5.0
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/storage/lmgr/s_lock.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/storage/lmgr/s_lock.c,v
retrieving revision 1.35
diff -c -c -r1.35 s_lock.c
*** src/backend/storage/lmgr/s_lock.c    31 Dec 2004 22:01:05 -0000    1.35
--- src/backend/storage/lmgr/s_lock.c    30 Jul 2005 03:03:20 -0000
***************
*** 241,247 ****
                                   * *lock); */
  {

! #ifdef SUNOS4_CC
      asm(".seg \"data\"");
      asm(".seg \"text\"");
  #else
--- 241,247 ----
                                   * *lock); */
  {

! #ifdef SUNOS_CC
      asm(".seg \"data\"");
      asm(".seg \"text\"");
  #else
Index: src/template/solaris
===================================================================
RCS file: /cvsroot/pgsql/src/template/solaris,v
retrieving revision 1.22
diff -c -c -r1.22 solaris
*** src/template/solaris    2 Dec 2004 18:11:40 -0000    1.22
--- src/template/solaris    30 Jul 2005 03:03:21 -0000
***************
*** 1,6 ****
  if test "$GCC" != yes ; then
    CC="$CC -Xa"            # relaxed ISO C mode
!   CFLAGS="-v"            # -v is like gcc -Wall
    if test "$enable_debug" != yes; then
      CFLAGS="$CFLAGS -O"        # any optimization breaks debug
    fi
--- 1,6 ----
  if test "$GCC" != yes ; then
    CC="$CC -Xa"            # relaxed ISO C mode
!   CFLAGS="-v -DSUNOS_CC" # -v is like gcc -Wall
    if test "$enable_debug" != yes; then
      CFLAGS="$CFLAGS -O"        # any optimization breaks debug
    fi
Index: src/template/sunos4
===================================================================
RCS file: /cvsroot/pgsql/src/template/sunos4,v
retrieving revision 1.4
diff -c -c -r1.4 sunos4
*** src/template/sunos4    29 Dec 2004 23:47:40 -0000    1.4
--- src/template/sunos4    30 Jul 2005 03:03:21 -0000
***************
*** 1,6 ****
  if test "$GCC" != yes ; then
    CC="$CC -Xa"            # relaxed ISO C mode
!   CFLAGS="-v -DSUNOS4_CC"    # -v is like gcc -Wall
    if test "$enable_debug" != yes; then
      CFLAGS="$CFLAGS -O"        # any optimization breaks debug
    fi
--- 1,6 ----
  if test "$GCC" != yes ; then
    CC="$CC -Xa"            # relaxed ISO C mode
!   CFLAGS="-v -DSUNOS_CC"    # -v is like gcc -Wall
    if test "$enable_debug" != yes; then
      CFLAGS="$CFLAGS -O"        # any optimization breaks debug
    fi