]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/unix/sysv/linux/sparc/sparc64/socket.S
Update copyright notices with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / sparc / sparc64 / socket.S
index 84f2eeca2f3098e8051c43a2e02f1d4d0ca2884b..62370c172f8f7114bfb327159eeac7d9ebba453f 100644 (file)
@@ -1,23 +1,22 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
 
    The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
    The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
+   Lesser General Public License for more details.
 
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
+#include <sysdep-cancel.h>
 #include <socketcall.h>
 
 #define P(a, b) P2(a, b)
    The .S files for the other calls just #define socket and #include this.  */
 
 #ifndef __socket
-#define __socket P(__,socket)
+# ifndef NO_WEAK_ALIAS
+#  define __socket P(__,socket)
+# else
+#  define __socket socket
+# endif
 #endif
 
-.globl __socket
-ENTRY (__socket)
+       .globl  __syscall_error
+ENTRY(__socket)
 
        /* Drop up to 6 arguments (recvfrom) into the memory allocated by
           the caller for varargs, since that's really what we have.  */
@@ -63,18 +66,53 @@ ENTRY (__socket)
 #endif
 #endif
 
-       mov     P(SOCKOP_,socket), %o0          /* arg 1: socket subfunction */
+#if defined NEED_CANCELLATION && defined CENABLE
+       SINGLE_THREAD_P
+       cmp     %g1, 0
+       bne     .Lsocket_cancel
+#endif
+        mov    P(SOCKOP_,socket), %o0          /* arg 1: socket subfunction */
        add     %sp, STACK_BIAS + 128, %o1      /* arg 2: parameter block */
        LOADSYSCALL(socketcall)
        ta      0x6d
 
-        bcs,pn %xcc, 1f
+       bcc,pt  %xcc, 1f
+        mov    %o7, %g1
+       call    __syscall_error
+        mov    %g1, %o7
+1:     retl
         nop
-       retl
+
+#if defined NEED_CANCELLATION && defined CENABLE
+.Lsocket_cancel:
+       save    %sp, -160, %sp
+       cfi_def_cfa_register (%fp)
+       cfi_window_save
+       cfi_register (%o7, %i7)
+       CENABLE
         nop
+       mov     %o0, %l0
+       add     %sp, 160 + STACK_BIAS + 128, %o1
+       mov     P(SOCKOP_,socket), %o0
+       LOADSYSCALL(socketcall)
+       ta      0x6d
 
-1:     SYSCALL_ERROR_HANDLER
+       bcc,pt  %xcc, 1f
+        mov    %o0, %l1
+       CDISABLE;
+        mov    %l0, %o0;
+       call    __syscall_error;
+        mov    %l1, %o0;
+       ba,pt   %xcc, 2f
+        mov    -1, %l1;
+1:     CDISABLE
+        mov    %l0, %o0
+2:     jmpl    %i7 + 8, %g0
+        restore %g0, %l1, %o0
+#endif
 
-END (__socket)
+END(__socket)
 
+#ifndef NO_WEAK_ALIAS
 weak_alias (__socket, socket)
+#endif