| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | /* * 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/mman.h>#include <sys/syscall.h>#if defined __UCLIBC_MMAP_HAS_6_ARGS__ && defined __NR_mmap# ifndef _syscall6#  error disable __UCLIBC_MMAP_HAS_6_ARGS__ for this arch# endif# define __NR__mmap __NR_mmapstatic _syscall6(void *, _mmap, void *, addr, size_t, len,		 int, prot, int, flags, int, fd, __off_t, offset)#elif defined __NR_mmap2 && defined _syscall6# include <errno.h># include <bits/uClibc_page.h># ifndef MMAP2_PAGE_SHIFT#  define MMAP2_PAGE_SHIFT 12# endif# define __NR___syscall_mmap2 __NR_mmap2static __inline__ _syscall6(void *, __syscall_mmap2, void *, addr, size_t, len,			    int, prot, int, flags, int, fd, __off_t, offset)static void *_mmap(void *addr, size_t len, int prot, int flags,		   int fd, __off_t offset){	const int mmap2_shift = MMAP2_PAGE_SHIFT;	const __off_t mmap2_mask = ((__off_t) 1 << MMAP2_PAGE_SHIFT) - 1;	/* check if offset is page aligned */	if (offset & mmap2_mask) {		__set_errno(EINVAL);		return MAP_FAILED;	}# ifdef __USE_FILE_OFFSET64	return __syscall_mmap2(addr, len, prot, flags, fd,				((__u_quad_t) offset >> mmap2_shift));# else	return __syscall_mmap2(addr, len, prot, flags, fd,				((__u_long) offset >> mmap2_shift));# endif}#elif defined __NR_mmap# define __NR___syscall_mmap __NR_mmapstatic __inline__ _syscall1(void *, __syscall_mmap, unsigned long *, buffer)static void *_mmap(void *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 __syscall_mmap(buffer);}#else# error "Your architecture doesn't seem to provide mmap() !?"#endifstrong_alias(_mmap,mmap)libc_hidden_def(mmap)
 |