From 97ffab0a8472981b927d0f4e81bb72f6ecd69b86 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Wed, 21 Aug 2024 23:31:48 +0300 Subject: add malloc test --- tests/malloc/check.mk | 4 ++++ tests/malloc/init.c | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/malloc/source.mk | 2 ++ 3 files changed, 48 insertions(+) create mode 100644 tests/malloc/check.mk create mode 100644 tests/malloc/init.c create mode 100644 tests/malloc/source.mk (limited to 'tests/malloc') diff --git a/tests/malloc/check.mk b/tests/malloc/check.mk new file mode 100644 index 0000000..3a178cb --- /dev/null +++ b/tests/malloc/check.mk @@ -0,0 +1,4 @@ +malloc: do-malloc + @grep 'BUG' reports/malloc/log \ + && echo 'BUG' > reports/malloc/OK \ + || tail -n1 reports/malloc/log | tr -d '\r' > reports/malloc/OK 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 + +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(); +} diff --git a/tests/malloc/source.mk b/tests/malloc/source.mk new file mode 100644 index 0000000..9498682 --- /dev/null +++ b/tests/malloc/source.mk @@ -0,0 +1,2 @@ +DO != ./scripts/gen-prog -n malloc -p init init.c +DO != ./scripts/gen-simple -n malloc -p init -- cgit v1.3