From 620a1346382f9e10b516bc168f86d499b6716769 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Wed, 30 Mar 2011 09:29:49 -0400 Subject: rename __simple_malloc.c to lite_malloc.c - yes this affects behavior! why does this affect behavior? well, the linker seems to traverse archive files starting from its current position when resolving symbols. since calloc.c comes alphabetically (and thus in sequence in the archive file) between __simple_malloc.c and malloc.c, attempts to resolve the "malloc" symbol for use by calloc.c were pulling in the full malloc.c implementation rather than the __simple_malloc.c implementation. as of now, lite_malloc.c and malloc.c are adjacent in the archive and in the correct order, so malloc.c should never be used to resolve "malloc" unless it's already needed to resolve another symbol ("free" or "realloc"). --- src/malloc/__simple_malloc.c | 46 -------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 src/malloc/__simple_malloc.c (limited to 'src/malloc/__simple_malloc.c') diff --git a/src/malloc/__simple_malloc.c b/src/malloc/__simple_malloc.c deleted file mode 100644 index c8293908..00000000 --- a/src/malloc/__simple_malloc.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include -#include -#include -#include "libc.h" - -uintptr_t __brk(uintptr_t); - -#define ALIGN 16 - -void *__simple_malloc(size_t n) -{ - static uintptr_t cur, brk; - uintptr_t base, new; - static int lock; - size_t align=1; - - if (!n) n++; - if (n > SIZE_MAX/2) goto toobig; - - while (align SIZE_MAX - PAGE_SIZE - base) goto fail; - if (base+n > brk) { - new = base+n + PAGE_SIZE-1 & -PAGE_SIZE; - if (__brk(new) != new) goto fail; - brk = new; - } - cur = base+n; - UNLOCK(&lock); - - return (void *)base; - -fail: - UNLOCK(&lock); -toobig: - errno = ENOMEM; - return 0; -} - -weak_alias(__simple_malloc, malloc); -- cgit v1.2.1