12
12
#include <heap.h>
13
13
#include <stddef.h>
14
14
#include <graphics.h>
15
+ #include <memory2.h>
15
16
16
17
uint32_t last_alloc = 0 ;
17
18
uint32_t heap_end = 0 ;
@@ -47,6 +48,19 @@ void mm_extend(uint32_t additional_size)
47
48
done ("Heap extended." , __FILE__ );
48
49
}
49
50
51
+ void mm_constrict (uint32_t removal_size )
52
+ {
53
+ if (removal_size <= 0 ){
54
+ warn ("mm_extend: Invalid size." , __FILE__ );
55
+ return ;
56
+ }
57
+
58
+ info ("Constricting heap." , __FILE__ );
59
+ heap_end -= removal_size ;
60
+ printf ("Heap constricting by %d bytes. New heap end: 0x%x" , removal_size , heap_end );
61
+ done ("Heap Constricted." , __FILE__ );
62
+ }
63
+
50
64
void mm_print_out ()
51
65
{
52
66
printf ("%sMemory used :%s %d bytes" , yellow_color , reset_color , memory_used );
@@ -56,6 +70,11 @@ void mm_print_out()
56
70
57
71
void free (void * mem )
58
72
{
73
+ if (mem == 0 ){
74
+ warn ("free: Cannot free null pointer." , __FILE__ );
75
+ return ;
76
+ }
77
+
59
78
alloc_t * alloc = (mem - sizeof (alloc_t ));
60
79
memory_used -= alloc -> size + sizeof (alloc_t );
61
80
alloc -> status = 0 ;
@@ -75,7 +94,11 @@ void pfree(void *mem)
75
94
76
95
char * pmalloc (size_t size )
77
96
{
78
- /* Loop through the avail_list */
97
+ if (size <= 0 ){
98
+ warn ("pmalloc: Cannot allocate 0 bytes." , __FILE__ );
99
+ return 0 ;
100
+ }
101
+
79
102
for (int i = 0 ; i < MAX_PAGE_ALIGNED_ALLOCS ; i ++ )
80
103
{
81
104
if (pheap_desc [i ]) continue ;
@@ -89,7 +112,10 @@ char* pmalloc(size_t size)
89
112
90
113
char * malloc (size_t size )
91
114
{
92
- if (!size ) return 0 ;
115
+ if (size <= 0 ){
116
+ warn ("malloc: Cannot allocate 0 bytes." , __FILE__ );
117
+ return 0 ;
118
+ }
93
119
94
120
/* Loop through blocks and find a block sized the same or bigger */
95
121
uint8_t * mem = (uint8_t * )heap_begin ;
@@ -134,7 +160,7 @@ char* malloc(size_t size)
134
160
nalloc :;
135
161
if (last_alloc + size + sizeof (alloc_t ) >= heap_end )
136
162
{
137
- meltdown_screen ("Heap out of memory!" , __FILE__ , __LINE__ , 0 , 0 , 0 );
163
+ meltdown_screen ("Heap out of memory!" , __FILE__ , __LINE__ , 0 , getCR2 () , 0 );
138
164
hcf ();
139
165
}
140
166
alloc_t * alloc = (alloc_t * )last_alloc ;
@@ -144,6 +170,7 @@ char* malloc(size_t size)
144
170
last_alloc += size ;
145
171
last_alloc += sizeof (alloc_t );
146
172
last_alloc += 4 ;
173
+
147
174
// printf("Allocated %d bytes from to 0x%x", size, (uint32_t)alloc + sizeof(alloc_t), last_alloc);
148
175
memory_used += size + 4 + sizeof (alloc_t );
149
176
memset ((char * )((uint32_t )alloc + sizeof (alloc_t )), 0 , size );
0 commit comments