Common: Add proper macros to test for architecture pointer size

The old system of just defining macros available in some other platform
was susceptible to silently using the wrong code if you forgot to
include a particular header. This fixes a crash on non-Windows platforms
introduced by e1fbac3ca1.
This commit is contained in:
Yuri Kunde Schlesner 2015-05-07 18:17:33 -03:00
parent 4f4d230dac
commit fae5933ad6
5 changed files with 11 additions and 17 deletions

View file

@ -20,6 +20,7 @@
#include "common/logging/log.h"
#include "common/mem_arena.h"
#include "common/memory_util.h"
#include "common/platform.h"
#include "common/string_util.h"
#ifndef _WIN32
@ -198,7 +199,7 @@ void MemArena::ReleaseView(void* view, size_t size)
u8* MemArena::Find4GBBase()
{
#ifdef _M_X64
#if EMU_ARCH_BITS == 64
#ifdef _WIN32
// 64 bit
u8* base = (u8*)VirtualAlloc(0, 0xE1000000, MEM_RESERVE, PAGE_READWRITE);
@ -269,7 +270,7 @@ static bool Memory_TryBase(u8 *base, const MemoryView *views, int num_views, u32
if (!*view.out_ptr_low)
goto bail;
}
#ifdef _M_X64
#if EMU_ARCH_BITS == 64
*view.out_ptr = (u8*)arena->CreateView(
position, view.size, base + view.virtual_address);
#else
@ -305,7 +306,7 @@ bail:
}
if (*views[j].out_ptr)
{
#ifdef _M_X64
#if EMU_ARCH_BITS == 64
arena->ReleaseView(*views[j].out_ptr, views[j].size);
#else
if (!(views[j].flags & MV_MIRROR_PREVIOUS))
@ -336,7 +337,7 @@ u8 *MemoryMap_Setup(const MemoryView *views, int num_views, u32 flags, MemArena
arena->GrabLowMemSpace(total_mem);
// Now, create views in high memory where there's plenty of space.
#ifdef _M_X64
#if EMU_ARCH_BITS == 64
u8 *base = MemArena::Find4GBBase();
// This really shouldn't fail - in 64-bit, there will always be enough
// address space.