OSDN Git Service

Add support for Solaris x86_64 using Sun's compiler.
authorBruce Momjian <bruce@momjian.us>
Fri, 30 Dec 2005 21:43:41 +0000 (21:43 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 30 Dec 2005 21:43:41 +0000 (21:43 +0000)
Pierre Girard

src/Makefile.shlib
src/backend/port/tas/solaris_x86_64.s [new file with mode: 0644]
src/include/storage/s_lock.h
src/template/solaris

index 84d5506..f869764 100644 (file)
@@ -6,7 +6,7 @@
 # Copyright (c) 1998, Regents of the University of California
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/Makefile.shlib,v 1.100 2005/12/09 21:19:34 petere Exp $
+#    $PostgreSQL: pgsql/src/Makefile.shlib,v 1.101 2005/12/30 21:43:41 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -193,7 +193,7 @@ ifeq ($(PORTNAME), solaris)
   ifeq ($(GCC), yes)
     LINK.shared                = $(CC) -shared
   else
-    LINK.shared                = $(CC) -G
+    LINK.shared                = $(CC) -G $(CFLAGS)    # CFLAGS added for X86_64
   endif
   ifeq ($(with_gnu_ld), yes)
     LINK.shared                += -Wl,-soname,$(soname)
diff --git a/src/backend/port/tas/solaris_x86_64.s b/src/backend/port/tas/solaris_x86_64.s
new file mode 100644 (file)
index 0000000..4fad43e
--- /dev/null
@@ -0,0 +1,35 @@
+/=============================================================================
+/ tas.s -- test and set lock for solaris_i386
+/ based on i386 ASM with modifications outlined in
+/ http://www.x86-64.org/documentation/assembly
+/=============================================================================
+
+        .file   "tas.s"
+        .text
+        .align  16
+.L1.text:
+
+        .globl  tas
+tas:
+        pushq   %rbp            /save prev base pointer
+        movq    %rsp,%rbp       /new base pointer
+        pushq   %rbx            /save prev bx
+        movq    8(%rbp),%rbx    /load bx with address of lock
+        movq    $255,%rax       /put something in ax
+        xchgb   %al,(%rbx)      /swap lock value with "0"
+        cmpb    $0,%al          /did we get the lock?
+        jne     .Locked
+        subq    %rax,%rax       /yes, we got it -- return 0
+        jmp     .Finish
+        .align  8
+.Locked:
+        movq    $1,%rax         /no, we didn't get it - return 1
+.Finish:
+        popq    %rbx            /restore prev bx
+        movq    %rbp,%rsp       /restore stack state
+        popq    %rbp
+        ret                     /return
+        .align  8
+        .type   tas,@function
+        .size   tas,.-tas
+
index 37d4e12..8d85bfa 100644 (file)
@@ -66,7 +66,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *       $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.145 2005/12/17 21:08:24 momjian Exp $
+ *       $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.146 2005/12/30 21:43:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -791,7 +791,8 @@ typedef unsigned char slock_t;
 
 /* out-of-line assembler from src/backend/port/tas/foo.s */
 
-#if defined(__sun) && defined(__i386)  /* i386 using Sun compiler */
+/* i386/X86_64 using Sun compiler */
+#if defined(__sun) && (defined(__i386) || defined(__x86_64__)) 
 /*
  * Solaris/386 (we only get here for non-gcc case)
  */
index 785fc3e..4a9a565 100644 (file)
@@ -17,8 +17,15 @@ case $host in
     ;;
   i?86-*-solaris*)
        if test "$GCC" != yes ; then
-               need_tas=yes
-               tas_file=solaris_i386.s
+               soarch=`isainfo`
+               if isainfo | grep amd64
+               then
+                       need_tas=yes
+                       tas_file=solaris_x86_64.s
+               else
+                       need_tas=yes
+                       tas_file=solaris_i386.s
+               fi
        fi
     ;;
 esac