summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/avr32/mmap.c
blob: b3d8b98c1e3511a756c6660c3f7a1951c3f8f0de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 * Copyright (C) 2004-2007 Atmel Corporation
 *
 * This file is subject to the terms and conditions of the GNU Lesser General
 * Public License.  See the file "COPYING.LIB" in the main directory of this
 * archive for more details.
 */

#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/syscall.h>

/* libc_hidden_proto(mmap) */

static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot,
		 int, flags, int, fd, __off_t, pgoff)

__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
{
	unsigned long page_size = sysconf(_SC_PAGESIZE);
	unsigned long pgoff;

	if (offset & (page_size - 1)) {
		__set_errno(EINVAL);
		return MAP_FAILED;
	}

	pgoff = (unsigned long)offset >> (31 - __builtin_clz(page_size));

	return mmap2(addr, len, prot, flags, fd, pgoff);
}
libc_hidden_def(mmap)