diff mem.c @ 883:9f149f0e98b7

It is now possible to switch back and forth between the menu ROM and the game
author Michael Pavone <pavone@retrodev.com>
date Fri, 13 Nov 2015 19:15:37 -0800
parents c3e3a0d734e2
children 6bafe1988e8c
line wrap: on
line diff
--- a/mem.c	Mon Nov 09 22:34:36 2015 -0800
+++ b/mem.c	Fri Nov 13 19:15:37 2015 -0800
@@ -1,6 +1,6 @@
 /*
  Copyright 2013 Michael Pavone
- This file is part of BlastEm. 
+ This file is part of BlastEm.
  BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text.
 */
 #include <sys/mman.h>
@@ -12,6 +12,7 @@
 #include <stdio.h>
 
 #include "mem.h"
+#include "arena.h"
 #ifndef MAP_ANONYMOUS
 #define MAP_ANONYMOUS MAP_ANON
 #endif
@@ -25,8 +26,12 @@
 	//start at the 1GB mark to allow plenty of room for sbrk based malloc implementations
 	//while still keeping well within 32-bit displacement range for calling code compiled into the executable
 	static uint8_t *next = (uint8_t *)0x40000000;
+	uint8_t *ret = try_alloc_arena();
+	if (ret) {
+		return ret;
+	}
 	*size += PAGE_SIZE - (*size & (PAGE_SIZE - 1));
-	uint8_t *ret = mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0);
+	ret = mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0);
 	if (ret == MAP_FAILED) {
 		perror("alloc_code");
 		return NULL;