@@ -224,18 +224,11 @@ uint8_t* alloc_exec_mem(uint32_t mem_size)
224224// How many code pages to allocate at once
225225#define PAGES_PER_ALLOC 512
226226
227- typedef struct free_list_node
228- {
229- uint8_t * page_ptr ;
230-
231- struct free_list_node * next ;
232-
233- } freelist_t ;
234-
235- freelist_t * freelist = NULL ;
227+ // Head of the list of free code pages
228+ code_page_t * freelist = NULL ;
236229
237230// Allocate a single code page from a pool of free pages
238- uint8_t * alloc_code_page ()
231+ code_page_t * alloc_code_page ()
239232{
240233 fprintf (stderr , "allocating code page\n" );
241234
@@ -246,29 +239,25 @@ uint8_t* alloc_code_page()
246239
247240 // Do this in reverse order so we allocate our pages in order
248241 for (int i = PAGES_PER_ALLOC - 1 ; i >= 0 ; -- i ) {
249- freelist_t * node = malloc (sizeof (freelist_t ));
250- node -> page_ptr = code_chunk + i * CODE_PAGE_SIZE ;
251- node -> next = freelist ;
252- freelist = node ;
242+ code_page_t * code_page = malloc (sizeof (code_page_t ));
243+ code_page -> mem_block = code_chunk + i * CODE_PAGE_SIZE ;
244+ code_page -> page_size = CODE_PAGE_SIZE ;
245+ code_page -> _next = freelist ;
246+ freelist = code_page ;
253247 }
254248 }
255249
256- freelist_t * free_node = freelist ;
257- uint8_t * page_ptr = freelist -> page_ptr ;
258-
259- freelist = freelist -> next ;
260- free (free_node );
250+ code_page_t * free_page = freelist ;
251+ freelist = freelist -> _next ;
261252
262- return page_ptr ;
253+ return free_page ;
263254}
264255
265256// Put a code page back into the allocation pool
266- void free_code_page (uint8_t * page_ptr )
257+ void free_code_page (code_page_t * code_page )
267258{
268- freelist_t * node = malloc (sizeof (freelist_t ));
269- node -> page_ptr = page_ptr ;
270- node -> next = freelist ;
271- freelist = node ;
259+ code_page -> _next = freelist ;
260+ freelist = code_page ;
272261}
273262
274263// Initialize a code block object
0 commit comments