chiark / gitweb /
eglibc (2.11.3-4+deb6u3) squeeze-lts; urgency=medium
[eglibc.git] / ports / sysdeps / unix / sysv / linux / cris / mmap.S
1 /* Copyright (C) 1995, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
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.
8
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.
13
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.  */
18
19 #include <sysdep.h>
20
21 #include "kernel-features.h"
22
23 #include <asm/errno.h>
24
25 /* Rather than dragging in yet another kernel file, <asm/page.h>, we
26    define it here.  Provide for easy override.  */
27 #ifndef PAGE_SHIFT
28 #define PAGE_SHIFT 13
29 #endif
30
31         .syntax no_register_prefix
32
33 /* This is __ptr_t
34    __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) */
35
36         ENTRY   (__mmap)
37
38         /* Only accept a offset (and address) being a multiple of PAGE_SIZE,
39            since we only pass the page part in the system call.  */
40         move.d  [sp+4],r9
41         btstq   (PAGE_SHIFT - 1),r9
42         bne     1f
43         btstq   (PAGE_SHIFT - 1),r10
44
45         bne     1f
46         lsrq    PAGE_SHIFT,r9
47
48         move    [sp],mof
49         move    srp,[sp]
50         move    r9,srp
51
52         movu.b  SYS_ify (mmap2),r9
53         break   13
54
55         cmps.w  -4096,r10
56         bhs     0f
57         move    [sp],srp
58
59         Ret
60         nop
61
62 /* Local error handler.  */
63 1:
64         movs.w -EINVAL,r10
65         /* Drop through into the ordinary error handler.  */
66 PSEUDO_END (__mmap)
67
68 weak_alias (__mmap, mmap)