| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | /* vi: set sw=4 ts=4: *//* * mmap() for uClibc * * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */#include <sys/syscall.h>#include <unistd.h>#include <sys/mman.h>#include <bits/uClibc_page.h>#ifdef __NR_mmap#ifdef __UCLIBC_MMAP_HAS_6_ARGS___syscall6(void *, mmap, void *, start, size_t, length,		int, prot, int, flags, int, fd, off_t, offset)#else# define __NR__mmap __NR_mmapstatic __inline__ _syscall1(__ptr_t, _mmap, unsigned long *, buffer)__ptr_t mmap(__ptr_t addr, size_t len, int prot,			 int flags, int fd, __off_t offset){	unsigned long buffer[6];	buffer[0] = (unsigned long) addr;	buffer[1] = (unsigned long) len;	buffer[2] = (unsigned long) prot;	buffer[3] = (unsigned long) flags;	buffer[4] = (unsigned long) fd;	buffer[5] = (unsigned long) offset;	return (__ptr_t) _mmap(buffer);}#endiflibc_hidden_def(mmap)#elif defined(__NR_mmap2)#define __NR___syscall_mmap2 __NR_mmap2static __inline__ _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,	size_t, len, int, prot, int, flags, int, fd, off_t, offset)/* Some architectures always use 12 as page shift for mmap2() eventhough the * real PAGE_SHIFT != 12.  Other architectures use the same value as * PAGE_SHIFT... */# ifndef MMAP2_PAGE_SHIFT#  define MMAP2_PAGE_SHIFT 12# endif__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset){	if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) {		__set_errno(EINVAL);		return MAP_FAILED;	}	return __syscall_mmap2(addr, len, prot, flags, fd, offset >> MMAP2_PAGE_SHIFT);}libc_hidden_def(mmap)#endif
 |