malloc.c

Go to the documentation of this file.
00001 #include <stdlib.h>
00002 #include <console/console.h>
00003 
00004 #if 0
00005 #define MALLOCDBG(x)
00006 #else
00007 #define MALLOCDBG(x) printk_spew x
00008 #endif
00009 extern unsigned char _heap, _eheap;
00010 static size_t free_mem_ptr = (size_t)&_heap;            /* Start of heap */
00011 static size_t free_mem_end_ptr = (size_t)&_eheap;       /* End of heap */
00012 
00013 
00014 void malloc_mark(malloc_mark_t *place)
00015 {
00016         *place = free_mem_ptr;
00017         printk_spew("malloc_mark 0x%08lx\n", (unsigned long)free_mem_ptr);
00018 }
00019 
00020 void malloc_release(malloc_mark_t *ptr)
00021 {
00022         free_mem_ptr = *ptr;
00023         printk_spew("malloc_release 0x%08lx\n", (unsigned long)free_mem_ptr);
00024 }
00025 
00026 void *malloc(size_t size)
00027 {
00028         void *p;
00029 
00030         MALLOCDBG(("%s Enter, size %d, free_mem_ptr %p\n", __FUNCTION__, size, free_mem_ptr));
00031         if (size < 0)
00032                 die("Error! malloc: Size < 0");
00033         if (free_mem_ptr <= 0)
00034                 die("Error! malloc: Free_mem_ptr <= 0");
00035 
00036         free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
00037 
00038         p = (void *) free_mem_ptr;
00039         free_mem_ptr += size;
00040 
00041         if (free_mem_ptr >= free_mem_end_ptr)
00042                 die("Error! malloc: free_mem_ptr >= free_mem_end_ptr");
00043 
00044         MALLOCDBG(("malloc 0x%08lx\n", (unsigned long)p));
00045 
00046         return p;
00047 }
00048 
00049 void free(void *where)
00050 {
00051         /* Don't care */
00052 }

Generated on Wed Jan 7 14:14:22 2009 for coreboot by  doxygen 1.5.5