1 /* vi: set sw=4 ts=4: */
5 * Copyright (C) 2000-2004 by Erik Andersen <andersen@codepoet.org>
7 * GNU Library General Public License (LGPL) version 2 or later.
12 #include <sys/syscall.h>
14 #if defined (__NR_mmap) || defined (__NR_mmap2)
16 libc_hidden_proto (mmap)
17 #if defined (__UCLIBC_MMAP_HAS_6_ARGS__) && defined (__NR_mmap)
18 #define __NR__mmap __NR_mmap
19 static __inline__ _syscall6 (__ptr_t, _mmap, __ptr_t, addr, size_t, len,
20 int, prot, int, flags, int, fd, __off_t, offset);
21 __ptr_t mmap(__ptr_t addr, size_t len, int prot,
22 int flags, int fd, __off_t offset)
24 return (__ptr_t) _mmap (addr, len, prot, flags,
28 #elif defined (__NR_mmap2)
29 #define __NR__mmap __NR_mmap2
31 #ifndef MMAP2_PAGE_SHIFT
32 # define MMAP2_PAGE_SHIFT 12
35 static __inline__ _syscall6 (__ptr_t, _mmap, __ptr_t, addr, size_t, len,
36 int, prot, int, flags, int, fd, __off_t, offset);
37 __ptr_t mmap(__ptr_t addr, size_t len, int prot,
38 int flags, int fd, __off_t offset)
40 /* check if offset is page aligned */
41 if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1))
46 #ifdef __USE_FILE_OFFSET64
47 return (__ptr_t) _mmap (addr, len, prot, flags,
48 fd, ((__u_quad_t) offset >> MMAP2_PAGE_SHIFT));
50 return (__ptr_t) _mmap (addr, len, prot, flags,
51 fd, ((__u_long) offset >> MMAP2_PAGE_SHIFT));
54 #elif defined (__NR_mmap)
55 # define __NR__mmap __NR_mmap
56 static __inline__ _syscall1(__ptr_t, _mmap, unsigned long *, buffer);
57 __ptr_t mmap(__ptr_t addr, size_t len, int prot,
58 int flags, int fd, __off_t offset)
60 unsigned long buffer[6];
62 buffer[0] = (unsigned long) addr;
63 buffer[1] = (unsigned long) len;
64 buffer[2] = (unsigned long) prot;
65 buffer[3] = (unsigned long) flags;
66 buffer[4] = (unsigned long) fd;
67 buffer[5] = (unsigned long) offset;
68 return (__ptr_t) _mmap(buffer);
71 libc_hidden_def (mmap)
73 # error "Your architecture doesn't seem to provide mmap() !?"