- Try to allocate Mac memory only once on 32-bit systems

- Cap Mac memory to 1023 MB, Apple Personal Diagnostics crashes at 1 GB
- Scratch memory is meant to be addressed from Mac programs too
This commit is contained in:
gbeauche 2006-02-27 07:24:58 +00:00
parent f446d610f8
commit 74c62b9095

View File

@ -223,28 +223,33 @@ char *strdup(const char *s)
/* /*
* Map memory that can be accessed from the Mac side * Helpers to map memory that can be accessed from the Mac side
*/ */
// NOTE: VM_MAP_33BIT is only used when compiling a 64-bit JIT on specific platforms
void *vm_acquire_mac(size_t size) void *vm_acquire_mac(size_t size)
{ {
void *m = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_33BIT); void *m = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_33BIT);
#ifdef USE_33BIT_ADDRESSING
if (m == VM_MAP_FAILED) { if (m == VM_MAP_FAILED) {
printf("WARNING: Cannot acquire memory in 33-bit address space (%s)\n", strerror(errno)); printf("WARNING: Cannot acquire memory in 33-bit address space (%s)\n", strerror(errno));
ThirtyThreeBitAddressing = false; ThirtyThreeBitAddressing = false;
m = vm_acquire(size); m = vm_acquire(size);
} }
#endif
return m; return m;
} }
static int vm_acquire_mac_fixed(void *addr, size_t size) static int vm_acquire_mac_fixed(void *addr, size_t size)
{ {
int ret = vm_acquire_fixed(addr, size, VM_MAP_DEFAULT | VM_MAP_33BIT); int ret = vm_acquire_fixed(addr, size, VM_MAP_DEFAULT | VM_MAP_33BIT);
#ifdef USE_33BIT_ADDRESSING
if (ret < 0) { if (ret < 0) {
printf("WARNING: Cannot acquire fixed memory in 33-bit address space (%s)\n", strerror(errno)); printf("WARNING: Cannot acquire fixed memory in 33-bit address space (%s)\n", strerror(errno));
ThirtyThreeBitAddressing = false; ThirtyThreeBitAddressing = false;
ret = vm_acquire_fixed(addr, size); ret = vm_acquire_fixed(addr, size);
} }
#endif
return ret; return ret;
} }
@ -524,6 +529,8 @@ int main(int argc, char **argv)
WarningAlert(GetString(STR_SMALL_RAM_WARN)); WarningAlert(GetString(STR_SMALL_RAM_WARN));
RAMSize = 1024*1024; RAMSize = 1024*1024;
} }
if (RAMSize > 1023*1024*1024) // Cap to 1023MB (APD crashes at 1GB)
RAMSize = 1023*1024*1024;
#if REAL_ADDRESSING || DIRECT_ADDRESSING #if REAL_ADDRESSING || DIRECT_ADDRESSING
RAMSize = RAMSize & -getpagesize(); // Round down to page boundary RAMSize = RAMSize & -getpagesize(); // Round down to page boundary
@ -592,7 +599,7 @@ int main(int argc, char **argv)
#if USE_SCRATCHMEM_SUBTERFUGE #if USE_SCRATCHMEM_SUBTERFUGE
// Allocate scratch memory // Allocate scratch memory
ScratchMem = (uint8 *)vm_acquire(SCRATCH_MEM_SIZE); ScratchMem = (uint8 *)vm_acquire_mac(SCRATCH_MEM_SIZE);
if (ScratchMem == VM_MAP_FAILED) { if (ScratchMem == VM_MAP_FAILED) {
ErrorAlert(STR_NO_MEM_ERR); ErrorAlert(STR_NO_MEM_ERR);
QuitEmulator(); QuitEmulator();