3 * \brief test that we cannot create mappings outside of provided frame
7 * Copyright (c) 2016, ETH Zurich.
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
18 #include <barrelfish/barrelfish.h>
19 #define FLAGS (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE)
21 int main(int argc, char *argv[])
26 err = slot_alloc(&vnode);
27 assert(err_is_ok(err));
29 enum objtype vntype = ObjType_VNode_x86_64_ptable;
30 #elif defined(__arm__)
31 enum objtype vntype = ObjType_VNode_ARM_l2;
33 #error Need to define vntype for this arch
35 err = vnode_create(vnode, vntype);
36 assert(err_is_ok(err));
38 struct capref mapping;
39 err = slot_alloc(&mapping);
40 assert(err_is_ok(err));
44 err = frame_alloc(&frame, 4096, &rb);
45 assert(err_is_ok(err));
48 struct frame_identity id;
49 err = frame_identify(frame, &id);
50 assert(err_is_ok(err));
51 printf("base = %" PRIxGENPADDR ", bytes = %" PRIuGENSIZE "\n", id.base, id.bytes);
52 assert(id.bytes == 4096);
54 err = slot_alloc(&mapping);
55 assert(err_is_ok(err));
56 // try to map 128 pages with 1page frame
57 err = vnode_map(vnode, frame, 0, FLAGS, 0, 128, mapping);
58 if (err_no(err) != SYS_ERR_FRAME_OFFSET_INVALID) {
59 printf("%s: FAILURE: got %s from vnode_map(128 pages); expected SYS_ERR_FRAME_OFFSET_INVALID\n",
60 argv[0], err_getcode(err));
63 assert(err_no(err) == SYS_ERR_FRAME_OFFSET_INVALID);
64 err = vnode_map(vnode, frame, 0, FLAGS, 0, 1, mapping);
65 assert(err_is_ok(err));
67 err = frame_alloc(&frame, 4096, &rb);
68 assert(err_is_ok(err));
71 err = frame_identify(frame, &id);
72 assert(err_is_ok(err));
73 assert(id.bytes == 4096);
74 printf("base = %" PRIxGENPADDR ", bytes = %" PRIuGENSIZE "\n", id.base, id.bytes);
76 err = slot_alloc(&mapping);
77 assert(err_is_ok(err));
78 err = vnode_map(vnode, frame, 1, FLAGS, 0, 1, mapping);
79 if(err_is_fail(err)) {
80 DEBUG_ERR(err, "vnode_map");
82 assert(err_is_ok(err));
84 printf("%s: SUCCESS\n", argv[0]);