7 #include <sys/syscall.h>
10 #include <asm/page.h> /* For PAGE_SHIFT */
14 * MMAP2_SHIFT is definitely *NOT* equal to getpageshift() for
15 * many 32-bit architectures. Supposedly this is fixed to 12
16 * for all 32-bit architectures. CHECK THIS!!!
18 # define MMAP2_SHIFT 12 /* Fixed by syscall definition */
21 * Set in SYSCALLS whether or not we should use an unadorned mmap() system
22 * call (typical on 64-bit architectures).
24 #if (_BITSIZE == 32 && defined(__NR_mmap2)) || (_BITSIZE == 64 && !defined(__NR_mmap))
26 /* This architecture uses mmap2(). The Linux mmap2() system call takes
27 a page offset as the offset argument. We need to make sure we have
28 the proper conversion in place. */
30 extern void *__mmap2(void *, size_t, int, int, int, size_t);
32 void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
34 const int mmap2_shift = MMAP2_SHIFT;
35 const unsigned long mmap2_mask = (1UL << mmap2_shift) - 1;
37 if ( offset & mmap2_mask ) {
42 return __mmap2(start, length, prot, flags, fd, (size_t)offset >> mmap2_shift);