Fix memory leaks, aligned allocators
diff --git a/src/lisp/plat/linux.c b/src/lisp/plat/linux.c
index 2777950..4a223a6 100644
--- a/src/lisp/plat/linux.c
+++ b/src/lisp/plat/linux.c
@@ -5,28 +5,19 @@
void *malloc_aligned(size_t size)
{
- void *mem = malloc(size + 8 + sizeof(void *) * 2);
- void **aligned_ptr = (void **)((uintptr_t)(mem + 8 + sizeof(void *)) & ~7);
- aligned_ptr[-1] = mem;
- aligned_ptr[-2] = (void *)size;
- return aligned_ptr;
+ // https://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html
+ // On glibc malloc() and realloc() return 8-byte aligned addresses.
+ return malloc(size);
}
void *realloc_aligned(void *addr, size_t size)
{
- void *mem = malloc(size + 8 + sizeof(void *) * 2);
- void **aligned_ptr = (void **)((uintptr_t)(mem + 8 + sizeof(void *)) & ~7);
- aligned_ptr[-1] = mem;
-
- memcpy(aligned_ptr, addr, ((uintptr_t *)addr)[-2]);
-
- return aligned_ptr;
+ return realloc(addr, size);
}
void free_aligned(void *addr)
{
- void **ptr = (void **)addr;
- free(ptr[-1]);
+ free(addr);
}
void *link(dasm_State **Dst)