Update copyright dates with scripts/update-copyrights.
[glibc.git] / sysdeps / unix / sysv / linux / i386 / mmap.S
blobdaf807ac756662bd90009a5edbb1f250866236f5
1 /* Copyright (C) 1995-2015 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, see
16    <http://www.gnu.org/licenses/>.  */
18 #include <sysdep.h>
20 #define EINVAL  22
22         .text
24 ENTRY (__mmap)
26         /* Save registers.  */
27         pushl %ebp
28         cfi_adjust_cfa_offset (4)
29         pushl %ebx
30         cfi_adjust_cfa_offset (4)
31         pushl %esi
32         cfi_adjust_cfa_offset (4)
33         pushl %edi
34         cfi_adjust_cfa_offset (4)
36         movl 20(%esp), %ebx
37         cfi_rel_offset (ebx, 8)
38         movl 24(%esp), %ecx
39         movl 28(%esp), %edx
40         movl 32(%esp), %esi
41         cfi_rel_offset (esi, 4)
42         movl 36(%esp), %edi
43         cfi_rel_offset (edi, 0)
44         movl 40(%esp), %ebp
45         cfi_rel_offset (ebp, 12)
46         testl $0xfff, %ebp
47         movl $-EINVAL, %eax
48         jne L(skip)
49         shrl $12, %ebp                  /* mmap2 takes the offset in pages.  */
51         movl $SYS_ify(mmap2), %eax      /* System call number in %eax.  */
53         /* Do the system call trap.  */
54         ENTER_KERNEL
55 L(skip):
56         /* Restore registers.  */
57         popl %edi
58         cfi_adjust_cfa_offset (-4)
59         cfi_restore (edi)
60         popl %esi
61         cfi_adjust_cfa_offset (-4)
62         cfi_restore (esi)
63         popl %ebx
64         cfi_adjust_cfa_offset (-4)
65         cfi_restore (ebx)
66         popl %ebp
67         cfi_adjust_cfa_offset (-4)
68         cfi_restore (ebp)
70         /* If 0 > %eax > -4096 there was an error.  */
71         cmpl $-4096, %eax
72         ja SYSCALL_ERROR_LABEL
74         /* Successful; return the syscall's value.  */
75         ret
77 PSEUDO_END (__mmap)
79 weak_alias (__mmap, mmap)