diff options
Diffstat (limited to 'tests/malloc/init.c')
| -rw-r--r-- | tests/malloc/init.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/malloc/init.c b/tests/malloc/init.c new file mode 100644 index 0000000..5048e82 --- /dev/null +++ b/tests/malloc/init.c @@ -0,0 +1,42 @@ +#include <common/test.h> + +START(pid, tid, d0, d1, d2, d3) +{ + UNUSED(pid); + UNUSED(tid); + UNUSED(d0); + UNUSED(d1); + UNUSED(d2); + UNUSED(d3); + + printf("allocating space for pointers...\n"); + /* 12 MiB / 4K */ + void **allocs = sys_req_mem(200 * sizeof(void *), VM_W | VM_R); + check(allocs, "initial allocation failed\n"); + + printf("allocating memory until we run out...\n"); + + long i = 0; + while (1) { + char *p = sys_req_mem(1, VM_W | VM_R); + if (!p) + break; + + /* check that we actually got a page */ + *p = 'a'; + allocs[i++] = p; + } + + printf("ran out of memory, freeing...\n"); + for (; i >= 0; --i) + sys_free_mem((uintptr_t)allocs[i]); + + printf("freed all memory, doing one last allocation to check we're good...\n"); + /* not super exhaustive but would hopefully go haywire if the page + * allocator got corrupted or something */ + char *p = sys_req_mem(1, VM_W | VM_R); + *p = 'b'; + sys_free_mem((uintptr_t)p); + sys_free_mem((uintptr_t)allocs); + ok(); +} |
