]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/l4re_kernel/server/src/mem.cc
update
[l4.git] / l4 / pkg / l4re_kernel / server / src / mem.cc
1 /*
2  * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
3  *               Alexander Warg <warg@os.inf.tu-dresden.de>
4  *     economic rights: Technische Universität Dresden (Germany)
5  *
6  * This file is part of TUD:OS and distributed under the terms of the
7  * GNU General Public License 2.
8  * Please see the COPYING-GPL-2 file for details.
9  */
10 #define _GNU_SOURCE 1  // needed for mremap
11 #include <sys/mman.h>
12 #include <errno.h>
13
14 #include "page_alloc.h"
15
16 #include <l4/cxx/iostream>
17
18 void * mmap(void * /*start*/, size_t length, int /*prot*/,
19             int flags, int /*fd*/, off_t offset) throw()
20 {
21   char *addr;
22
23   // some checks
24   if (offset < 0)
25     {
26       errno = -EINVAL;
27       return MAP_FAILED;
28     }
29   if (! (flags & MAP_ANON))
30     {
31       L4::cerr << "mmap() called without MAP_ANON flag, not supported!\n";
32       errno = -EINVAL;
33       return MAP_FAILED;
34     }
35
36   length = (length + (L4_PAGESIZE -1)) & ~(L4_PAGESIZE-1);
37   if (length != L4_PAGESIZE)
38     {
39       errno = ENOMEM;
40       return MAP_FAILED;
41     }
42
43   addr = Single_page_alloc<char>().alloc();
44
45   if (!addr)
46     {
47       errno = ENOMEM;
48       return MAP_FAILED;
49     }
50
51   return addr;
52 }
53
54 int munmap(void * /*start*/, size_t /*length*/) throw()
55 {
56   L4::cout << "munmap() called: unimplemented!\n";
57   errno = EINVAL;
58   return -1;
59 }
60
61 void * mremap(void * /*old_address*/, size_t /*old_size*/, size_t /*new_size*/,
62               int /*may_move*/, ...) throw()
63 {
64   L4::cout << "mremap() called: unimplemented!\n";
65   errno = EINVAL;
66   return MAP_FAILED;
67 }