Add missing export of fallocate64 on 32-bit platforms.
[glibc.git] / sysdeps / unix / sysv / linux / powerpc / powerpc32 / socket.S
blobc0e98d9bedeb9d0fa09d7960006234c22cbcdb44
1 /* Copyright (C) 1995-1997, 1999, 2003, 2006, 2007
2    Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
18    02110-1301 USA.  */
20 #include <sysdep-cancel.h>
21 #include <socketcall.h>
23 #define P(a, b) P2(a, b)
24 #define P2(a, b) a##b
26 /* The socket-oriented system calls are handled unusally in Linux.
27    They are all gated through the single `socketcall' system call number.
28    `socketcall' takes two arguments: the first is the subcode, specifying
29    which socket function is being called; and the second is a pointer to
30    the arguments to the specific function.
32    The .S files for the other calls just #define socket and #include this.
33    They also #define a 'number-of-arguments' word in NARGS, which
34    defaults to 3.  */
36 #ifndef NARGS
37 #ifdef socket
38 #error NARGS not defined
39 #endif
40 #define NARGS 3
41 #endif
43 /* 0(r1) and 4(r1) are reserved by the ABI, 8(r1), 12(r1), 16(r1) are used
44    for temp saves.  44(r1) is used to save r30.  */
45 #define stackblock 20
47 #ifndef __socket
48 # ifndef NO_WEAK_ALIAS
49 #  define __socket P(__,socket)
50 # else
51 #  define __socket socket
52 # endif
53 #endif
55         .text
56 ENTRY(__socket)
57         stwu r1,-48(r1)
58         cfi_adjust_cfa_offset(48)
59 #if NARGS >= 1
60         stw  r3,stackblock(r1)
61 #endif
62 #if NARGS >= 2
63         stw  r4,4+stackblock(r1)
64 #endif
65 #if NARGS >= 3
66         stw  r5,8+stackblock(r1)
67 #endif
68 #if NARGS >= 4
69         stw  r6,12+stackblock(r1)
70 #endif
71 #if NARGS >= 5
72         stw  r7,16+stackblock(r1)
73 #endif
74 #if NARGS >= 6
75         stw  r8,20+stackblock(r1)
76 #endif
77 #if NARGS >= 7
78 #error too many arguments!
79 #endif
81 #if defined NEED_CANCELLATION && defined CENABLE
82         SINGLE_THREAD_P
83         bne-    .Lsocket_cancel
84 #endif
86         li      r3,P(SOCKOP_,socket)
87         addi    r4,r1,stackblock
88         DO_CALL(SYS_ify(socketcall))
89         addi    r1,r1,48
90         PSEUDO_RET
92 #if defined NEED_CANCELLATION && defined CENABLE
93 .Lsocket_cancel:
94         mflr    r9
95         stw     r9,52(r1)
96         cfi_offset (lr, 4)
97         CENABLE
98         stw     r3,16(r1)
99         li      r3,P(SOCKOP_,socket)
100         addi    r4,r1,stackblock
101         DO_CALL(SYS_ify(socketcall))
102         mfcr    r0
103         stw     r3,8(r1)
104         stw     r0,12(r1)
105         lwz     r3,16(r1)
106         CDISABLE
107         lwz     r4,52(r1)
108         lwz     r0,12(r1)
109         lwz     r3,8(r1)
110         mtlr    r4
111         mtcr    r0
112         addi    r1,r1,48
113         PSEUDO_RET
114 #endif
116 PSEUDO_END (__socket)
118 #ifndef NO_WEAK_ALIAS
119 weak_alias (__socket, socket)
120 #endif