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 }
1.5.5