diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-21 23:31:48 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-21 23:31:48 +0300 |
| commit | 97ffab0a8472981b927d0f4e81bb72f6ecd69b86 (patch) | |
| tree | c8a36352d599dc9477a6e647878d5e6191b4e98f /tests/malloc/init.c | |
| parent | ab011165cd440b5535d39febd8118e3e26b64b57 (diff) | |
| download | kmi-97ffab0a8472981b927d0f4e81bb72f6ecd69b86.tar.gz kmi-97ffab0a8472981b927d0f4e81bb72f6ecd69b86.zip | |
add malloc test
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(); +} |
