From 0621c44e439bedf034399e1bff139ef506039eba Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 14 Nov 2020 22:27:59 +0100 Subject: Some fixes I WAS BUG-SEARCHING FOR SEVERAL HOURS WHYYYY, WHEEERE, AAAAAH --- libc/mem.c | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'libc') diff --git a/libc/mem.c b/libc/mem.c index ba7795f..2fde00b 100644 --- a/libc/mem.c +++ b/libc/mem.c @@ -58,29 +58,29 @@ int memcmp(const void *s1, const void *s2, u32 n) #ifdef kernel -/* #define ALIGNMENT 1ul */ -/* #define ALIGN_TYPE char */ -/* #define ALIGN_INFO sizeof(ALIGN_TYPE) * 16 */ - -/* #define ALIGN(ptr) \ */ -/* if (ALIGNMENT > 1) { \ */ -/* u32 diff; \ */ -/* ptr = (void *)((u32)ptr + ALIGN_INFO); \ */ -/* diff = (u32)ptr & (ALIGNMENT - 1); \ */ -/* if (diff != 0) { \ */ -/* diff = ALIGNMENT - diff; \ */ -/* ptr = (void *)((u32)ptr + diff); \ */ -/* } \ */ -/* *((ALIGN_TYPE *)((u32)ptr - ALIGN_INFO)) = diff + ALIGN_INFO; \ */ -/* } */ - -/* #define UNALIGN(ptr) \ */ -/* if (ALIGNMENT > 1) { \ */ -/* u32 diff = *((ALIGN_TYPE *)((u32)ptr - ALIGN_INFO)); \ */ -/* if (diff < (ALIGNMENT + ALIGN_INFO)) { \ */ -/* ptr = (void *)((u32)ptr - diff); \ */ -/* } \ */ -/* } */ +#define ALIGNMENT 16ul +#define ALIGN_TYPE char +#define ALIGN_INFO sizeof(ALIGN_TYPE) * 16 + +#define ALIGN(ptr) \ + if (ALIGNMENT > 1) { \ + u32 diff; \ + ptr = (void *)((u32)ptr + ALIGN_INFO); \ + diff = (u32)ptr & (ALIGNMENT - 1); \ + if (diff != 0) { \ + diff = ALIGNMENT - diff; \ + ptr = (void *)((u32)ptr + diff); \ + } \ + *((ALIGN_TYPE *)((u32)ptr - ALIGN_INFO)) = diff + ALIGN_INFO; \ + } + +#define UNALIGN(ptr) \ + if (ALIGNMENT > 1) { \ + u32 diff = *((ALIGN_TYPE *)((u32)ptr - ALIGN_INFO)); \ + if (diff < (ALIGNMENT + ALIGN_INFO)) { \ + ptr = (void *)((u32)ptr - diff); \ + } \ + } static u32 *heap; static u32 index; @@ -110,13 +110,13 @@ void *malloc(u32 size) if (size < 1) return NULL; - /* size = size + ALIGNMENT + ALIGN_INFO; */ + size = size + ALIGNMENT + ALIGN_INFO; heap[index] = size; index += size + 1; void *p = (void *)(heap + index - size); - /* ALIGN(p); */ + ALIGN(p); return p; } -- cgit v1.2.3