2.9
[glibc/nacl-glibc.git] / sysdeps / unix / sysv / linux / i386 / epoll_pwait.S
blob5f51db229f656bb342d75a545a692aa304d77c60
1 /* Copyright (C) 2007 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
19 #include <sysdep.h>
20 #define _ERRNO_H
21 #include <bits/errno.h>
22 #define _SIGNAL_H
23 #include <bits/signum.h>
26         .text
27 ENTRY (epoll_pwait)
29 #ifdef __NR_epoll_pwait
31         /* Save registers.  */
32         pushl %ebp
33         cfi_adjust_cfa_offset (4)
34         pushl %ebx
35         cfi_adjust_cfa_offset (4)
36         pushl %esi
37         cfi_adjust_cfa_offset (4)
38         pushl %edi
39         cfi_adjust_cfa_offset (4)
40         cfi_rel_offset (edi, 0)
41         cfi_rel_offset (esi, 4)
42         cfi_rel_offset (ebx, 8)
43         cfi_rel_offset (ebp, 12)
45         movl 20(%esp), %ebx
46         movl 24(%esp), %ecx
47         movl 28(%esp), %edx
48         movl 32(%esp), %esi
49         movl 36(%esp), %edi
50         movl $_NSIG/8, %ebp
51         movl $__NR_epoll_pwait, %eax
53         ENTER_KERNEL
55         /* Restore registers.  */
56         popl %edi
57         cfi_adjust_cfa_offset (-4)
58         cfi_restore (edi)
59         popl %esi
60         cfi_adjust_cfa_offset (-4)
61         cfi_restore (esi)
62         popl %ebx
63         cfi_adjust_cfa_offset (-4)
64         cfi_restore (ebx)
65         popl %ebp
66         cfi_adjust_cfa_offset (-4)
67         cfi_restore (ebp)
69         /* If 0 > %eax > -4096 there was an error.  */
70         cmpl $-4096, %eax
71         ja SYSCALL_ERROR_LABEL
73         /* Successful; return the syscall's value.  */
74 #else
75         movl $-ENOSYS, %eax
76         jmp SYSCALL_ERROR_LABEL
77 #endif
78 L(pseudo_end):
79         ret
80 PSEUDO_END (epoll_pwait)