diff options
author | Matt Fleming <matt.fleming@intel.com> | 2012-12-05 13:28:38 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2012-12-05 21:00:44 +0000 |
commit | 2cf4a7e6d99933cf84525bc07310122792f9a6eb (patch) | |
tree | 8aa76715b01b61d31eb5bf71289a644f6f3c39df | |
parent | 6272db928783e303d84556598ecafba9358e0448 (diff) | |
download | syslinux-2cf4a7e6d99933cf84525bc07310122792f9a6eb.tar.gz syslinux-2cf4a7e6d99933cf84525bc07310122792f9a6eb.tar.xz syslinux-2cf4a7e6d99933cf84525bc07310122792f9a6eb.zip |
com32: Delete unused malloc.c and friends
The memory alloc files haven't been referenced since commit
880f67714ec0 ("elflink: remove the malloc.c/free.c/realloc.c/zalloc.c
from com32"). They live in the core now.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | com32/lib/free.c | 113 | ||||
-rw-r--r-- | com32/lib/malloc.c | 155 | ||||
-rw-r--r-- | com32/lib/realloc.c | 98 | ||||
-rw-r--r-- | com32/lib/zalloc.c | 17 |
4 files changed, 0 insertions, 383 deletions
diff --git a/com32/lib/free.c b/com32/lib/free.c deleted file mode 100644 index be23865a..00000000 --- a/com32/lib/free.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * free.c - * - * Very simple linked-list based malloc()/free(). - */ - -#include <stdlib.h> -#include "malloc.h" - -static struct free_arena_header *__free_block(struct free_arena_header *ah) -{ - struct free_arena_header *pah, *nah; - - pah = ah->a.prev; - nah = ah->a.next; - if (pah->a.type == ARENA_TYPE_FREE && - (char *)pah + pah->a.size == (char *)ah) { - /* Coalesce into the previous block */ - pah->a.size += ah->a.size; - pah->a.next = nah; - nah->a.prev = pah; - -#ifdef DEBUG_MALLOC - ah->a.type = ARENA_TYPE_DEAD; -#endif - - ah = pah; - pah = ah->a.prev; - } else { - /* Need to add this block to the free chain */ - ah->a.type = ARENA_TYPE_FREE; - - ah->next_free = __malloc_head.next_free; - ah->prev_free = &__malloc_head; - __malloc_head.next_free = ah; - ah->next_free->prev_free = ah; - } - - /* In either of the previous cases, we might be able to merge - with the subsequent block... */ - if (nah->a.type == ARENA_TYPE_FREE && - (char *)ah + ah->a.size == (char *)nah) { - ah->a.size += nah->a.size; - - /* Remove the old block from the chains */ - nah->next_free->prev_free = nah->prev_free; - nah->prev_free->next_free = nah->next_free; - ah->a.next = nah->a.next; - nah->a.next->a.prev = ah; - -#ifdef DEBUG_MALLOC - nah->a.type = ARENA_TYPE_DEAD; -#endif - } - - /* Return the block that contains the called block */ - return ah; -} - -/* - * This is used to insert a block which is not previously on the - * free list. Only the a.size field of the arena header is assumed - * to be valid. - */ -void __inject_free_block(struct free_arena_header *ah) -{ - struct free_arena_header *nah; - size_t a_end = (size_t) ah + ah->a.size; - size_t n_end; - - for (nah = __malloc_head.a.next; nah->a.type != ARENA_TYPE_HEAD; - nah = nah->a.next) { - n_end = (size_t) nah + nah->a.size; - - /* Is nah entirely beyond this block? */ - if ((size_t) nah >= a_end) - break; - - /* Is this block entirely beyond nah? */ - if ((size_t) ah >= n_end) - continue; - - /* Otherwise we have some sort of overlap - reject this block */ - return; - } - - /* Now, nah should point to the successor block */ - ah->a.next = nah; - ah->a.prev = nah->a.prev; - nah->a.prev = ah; - ah->a.prev->a.next = ah; - - __free_block(ah); -} - -void free(void *ptr) -{ - struct free_arena_header *ah; - - if (!ptr) - return; - - ah = (struct free_arena_header *) - ((struct arena_header *)ptr - 1); - -#ifdef DEBUG_MALLOC - assert(ah->a.type == ARENA_TYPE_USED); -#endif - - __free_block(ah); - - /* Here we could insert code to return memory to the system. */ -} diff --git a/com32/lib/malloc.c b/com32/lib/malloc.c deleted file mode 100644 index ce35f3d1..00000000 --- a/com32/lib/malloc.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * malloc.c - * - * Very simple linked-list based malloc()/free(). - */ - -#include <stdlib.h> -#include <string.h> -#include <com32.h> -#include <syslinux/memscan.h> -#include "malloc.h" - -struct free_arena_header __malloc_head = { - { - ARENA_TYPE_HEAD, - 0, - &__malloc_head, - &__malloc_head, - }, - &__malloc_head, - &__malloc_head -}; - -/* This is extern so it can be overridden by the user application */ -extern size_t __stack_size; -extern void *__mem_end; /* Produced after argv parsing */ - -static inline size_t sp(void) -{ - size_t sp; - asm volatile ("movl %%esp,%0":"=rm" (sp)); - return sp; -} - -#define E820_MEM_MAX 0xfff00000 /* 4 GB - 1 MB */ - -static int consider_memory_area(void *dummy, addr_t start, - addr_t len, bool valid) -{ - struct free_arena_header *fp; - addr_t end; - - (void)dummy; - - if (valid && start < E820_MEM_MAX) { - if (len > E820_MEM_MAX - start) - len = E820_MEM_MAX - start; - - end = start + len; - - if (end > __com32.cs_memsize) { - if (start <= __com32.cs_memsize) { - start = __com32.cs_memsize; - len = end - start; - } - - if (len >= 2 * sizeof(struct arena_header)) { - fp = (struct free_arena_header *)start; - fp->a.size = len; - __inject_free_block(fp); - } - } - } - - return 0; -} - -static void __constructor init_memory_arena(void) -{ - struct free_arena_header *fp; - size_t start, total_space; - - start = (size_t) ARENA_ALIGN_UP(__mem_end); - total_space = sp() - start; - - if (__stack_size == 0 || __stack_size > total_space >> 1) - __stack_size = total_space >> 1; /* Half for the stack, half for the heap... */ - - if (total_space < __stack_size + 4 * sizeof(struct arena_header)) - __stack_size = total_space - 4 * sizeof(struct arena_header); - - fp = (struct free_arena_header *)start; - fp->a.size = total_space - __stack_size; - - __inject_free_block(fp); - - /* Scan the memory map to look for other suitable regions */ - if (!__com32.cs_memsize) - return; /* Old Syslinux core, can't do this... */ - - syslinux_scan_memory(consider_memory_area, NULL); -} - -static void *__malloc_from_block(struct free_arena_header *fp, size_t size) -{ - size_t fsize; - struct free_arena_header *nfp, *na; - - fsize = fp->a.size; - - /* We need the 2* to account for the larger requirements of a free block */ - if (fsize >= size + 2 * sizeof(struct arena_header)) { - /* Bigger block than required -- split block */ - nfp = (struct free_arena_header *)((char *)fp + size); - na = fp->a.next; - - nfp->a.type = ARENA_TYPE_FREE; - nfp->a.size = fsize - size; - fp->a.type = ARENA_TYPE_USED; - fp->a.size = size; - - /* Insert into all-block chain */ - nfp->a.prev = fp; - nfp->a.next = na; - na->a.prev = nfp; - fp->a.next = nfp; - - /* Replace current block on free chain */ - nfp->next_free = fp->next_free; - nfp->prev_free = fp->prev_free; - fp->next_free->prev_free = nfp; - fp->prev_free->next_free = nfp; - } else { - /* Allocate the whole block */ - fp->a.type = ARENA_TYPE_USED; - - /* Remove from free chain */ - fp->next_free->prev_free = fp->prev_free; - fp->prev_free->next_free = fp->next_free; - } - - return (void *)(&fp->a + 1); -} - -void *malloc(size_t size) -{ - struct free_arena_header *fp; - - if (size == 0) - return NULL; - - /* Add the obligatory arena header, and round up */ - size = (size + 2 * sizeof(struct arena_header) - 1) & ARENA_SIZE_MASK; - - for (fp = __malloc_head.next_free; fp->a.type != ARENA_TYPE_HEAD; - fp = fp->next_free) { - if (fp->a.size >= size) { - /* Found fit -- allocate out of this block */ - return __malloc_from_block(fp, size); - } - } - - /* Nothing found... need to request a block from the kernel */ - return NULL; /* No kernel to get stuff from */ -} diff --git a/com32/lib/realloc.c b/com32/lib/realloc.c deleted file mode 100644 index 2969e313..00000000 --- a/com32/lib/realloc.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * realloc.c - */ - -#include <stdlib.h> -#include <string.h> -#include <minmax.h> - -#include "malloc.h" - -void *realloc(void *ptr, size_t size) -{ - struct free_arena_header *ah, *nah; - void *newptr; - size_t newsize, oldsize, xsize; - - if (!ptr) - return malloc(size); - - if (size == 0) { - free(ptr); - return NULL; - } - - ah = (struct free_arena_header *) - ((struct arena_header *)ptr - 1); - - /* Actual size of the old block */ - oldsize = ah->a.size; - - /* Add the obligatory arena header, and round up */ - newsize = (size + 2 * sizeof(struct arena_header) - 1) & ARENA_SIZE_MASK; - - if (oldsize >= newsize && newsize >= (oldsize >> 2) && - oldsize - newsize < 4096) { - /* This allocation is close enough already. */ - return ptr; - } else { - xsize = oldsize; - - nah = ah->a.next; - if ((char *)nah == (char *)ah + ah->a.size && - nah->a.type == ARENA_TYPE_FREE && - oldsize + nah->a.size >= newsize) { - /* Merge in subsequent free block */ - ah->a.next = nah->a.next; - ah->a.next->a.prev = ah; - nah->next_free->prev_free = nah->prev_free; - nah->prev_free->next_free = nah->next_free; - xsize = (ah->a.size += nah->a.size); - } - - if (xsize >= newsize) { - /* We can reallocate in place */ - if (xsize >= newsize + 2 * sizeof(struct arena_header)) { - /* Residual free block at end */ - nah = (struct free_arena_header *)((char *)ah + newsize); - nah->a.type = ARENA_TYPE_FREE; - nah->a.size = xsize - newsize; - ah->a.size = newsize; - - /* Insert into block list */ - nah->a.next = ah->a.next; - ah->a.next = nah; - nah->a.next->a.prev = nah; - nah->a.prev = ah; - - /* Insert into free list */ - if (newsize > oldsize) { - /* Hack: this free block is in the path of a memory object - which has already been grown at least once. As such, put - it at the *end* of the freelist instead of the beginning; - trying to save it for future realloc()s of the same block. */ - nah->prev_free = __malloc_head.prev_free; - nah->next_free = &__malloc_head; - __malloc_head.prev_free = nah; - nah->prev_free->next_free = nah; - } else { - nah->next_free = __malloc_head.next_free; - nah->prev_free = &__malloc_head; - __malloc_head.next_free = nah; - nah->next_free->prev_free = nah; - } - } - /* otherwise, use up the whole block */ - return ptr; - } else { - /* Last resort: need to allocate a new block and copy */ - oldsize -= sizeof(struct arena_header); - newptr = malloc(size); - if (newptr) { - memcpy(newptr, ptr, min(size, oldsize)); - free(ptr); - } - return newptr; - } - } -} diff --git a/com32/lib/zalloc.c b/com32/lib/zalloc.c deleted file mode 100644 index 0e6ed28d..00000000 --- a/com32/lib/zalloc.c +++ /dev/null @@ -1,17 +0,0 @@ -/* - * zalloc.c - */ - -#include <stdlib.h> -#include <string.h> - -void *zalloc(size_t size) -{ - void *ptr; - - ptr = malloc(size); - if (ptr) - memset(ptr, 0, size); - - return ptr; -} |