use pointers instead of size_t when dealing with pointers. Also fix a few
[coreboot.git] / src / lib / malloc.c
1 #include <stdlib.h>
2 #include <console/console.h>
3
4 #if 0
5 #define MALLOCDBG(x)
6 #else
7 #define MALLOCDBG(x...) printk_spew(x)
8 #endif
9 extern unsigned char _heap, _eheap;
10 static void *free_mem_ptr = &_heap;             /* Start of heap */
11 static void *free_mem_end_ptr = &_eheap;        /* End of heap */
12
13
14 void malloc_mark(malloc_mark_t *place)
15 {
16         *place = (malloc_mark_t)free_mem_ptr;
17         printk_spew("malloc_mark %p\n", free_mem_ptr);
18 }
19
20 void malloc_release(malloc_mark_t *ptr)
21 {
22         free_mem_ptr = (void *)*ptr;
23         printk_spew("malloc_release %p\n", free_mem_ptr);
24 }
25
26 void *malloc(size_t size)
27 {
28         void *p;
29
30         MALLOCDBG("%s Enter, size %ld, free_mem_ptr %p\n", __func__, size, free_mem_ptr);
31         if (size < 0)
32                 die("Error! malloc: Size < 0");
33         if (free_mem_ptr <= 0)
34                 die("Error! malloc: Free_mem_ptr <= 0");
35
36         free_mem_ptr = (void *)(((unsigned long)free_mem_ptr + 3) & ~3);        /* Align */
37
38         p = (void *) free_mem_ptr;
39         free_mem_ptr += size;
40
41         if (free_mem_ptr >= free_mem_end_ptr)
42                 die("Error! malloc: free_mem_ptr >= free_mem_end_ptr");
43
44         MALLOCDBG("malloc %p\n", p);
45
46         return p;
47 }
48
49 void free(void *where)
50 {
51         /* Don't care */
52 }