From 49cfded60bb5b444d1828190eacc52bbb49a9cb8 Mon Sep 17 00:00:00 2001 From: bushing Date: Mon, 8 Dec 2008 05:30:24 +0000 Subject: set svn:eol-style=native for **.cpp git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1442 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Common/Src/MemoryUtil.cpp | 270 +++++++++++++++++----------------- 1 file changed, 135 insertions(+), 135 deletions(-) (limited to 'Source/Core/Common/Src/MemoryUtil.cpp') diff --git a/Source/Core/Common/Src/MemoryUtil.cpp b/Source/Core/Common/Src/MemoryUtil.cpp index 0099158872..10cf448f06 100644 --- a/Source/Core/Common/Src/MemoryUtil.cpp +++ b/Source/Core/Common/Src/MemoryUtil.cpp @@ -1,135 +1,135 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#include "Common.h" -#include "MemoryUtil.h" - -#ifdef _WIN32 -#include -#elif __GNUC__ -#include -#include -#include -#endif - -#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -#define MAP_ANONYMOUS MAP_ANON -#endif - -// MacOSX does not support MAP_VARIABLE -#ifndef MAP_VARIABLE -#define MAP_VARIABLE 0 -#endif - -// This is purposedely not a full wrapper for virtualalloc/mmap, but it -// provides exactly the primitive operations that Dolphin needs. - -void* AllocateExecutableMemory(int size, bool low) -{ -#ifdef _WIN32 - void* ptr = VirtualAlloc(0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); - - if ((u64)ptr >= 0x80000000) - { - PanicAlert("Executable memory ended up above 2GB!"); - // If this happens, we have to implement a free ram search scheme. ector knows how. - } - - return(ptr); - -#else - void* retval = mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_ANONYMOUS | MAP_PRIVATE -#ifdef __x86_64__ - | (low ? MAP_32BIT : 0) -#endif - , -1, 0); // | MAP_FIXED - // printf("Mapped executable memory at %p (size %i)\n", retval, size); - - if (!retval) - { - PanicAlert("Failed to allocate executable memory, errno=%i", errno); - } - - return(retval); -#endif - -} - - -void* AllocateMemoryPages(int size) -{ -#ifdef _WIN32 - void* ptr = VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); - - if (!ptr) - { - PanicAlert("Failed to allocate raw memory"); - } - - return(ptr); - -#else - void* retval = mmap(0, size, PROT_READ | PROT_WRITE, - MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); // | MAP_FIXED - // printf("Mapped memory at %p (size %i)\n", retval, size); - - if (!retval) - { - PanicAlert("Failed to allocate raw memory, errno=%i", errno); - } - - return(retval); -#endif - -} - - -void FreeMemoryPages(void* ptr, int size) -{ -#ifdef _WIN32 - if (ptr) - { - VirtualFree(ptr, 0, MEM_RELEASE); - ptr = NULL; - } -#else - munmap(ptr, size); -#endif -} - - -void WriteProtectMemory(void* ptr, int size, bool allowExecute) -{ -#ifdef _WIN32 - VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READ : PAGE_READONLY, 0); -#else - mprotect(ptr, size, allowExecute ? (PROT_READ | PROT_EXEC) : PROT_READ); -#endif -} - - -void UnWriteProtectMemory(void* ptr, int size, bool allowExecute) -{ -#ifdef _WIN32 - VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READWRITE : PAGE_READONLY, 0); -#else - mprotect(ptr, size, allowExecute ? (PROT_READ | PROT_WRITE | PROT_EXEC) : PROT_WRITE | PROT_READ); -#endif -} - - +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "Common.h" +#include "MemoryUtil.h" + +#ifdef _WIN32 +#include +#elif __GNUC__ +#include +#include +#include +#endif + +#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) +#define MAP_ANONYMOUS MAP_ANON +#endif + +// MacOSX does not support MAP_VARIABLE +#ifndef MAP_VARIABLE +#define MAP_VARIABLE 0 +#endif + +// This is purposedely not a full wrapper for virtualalloc/mmap, but it +// provides exactly the primitive operations that Dolphin needs. + +void* AllocateExecutableMemory(int size, bool low) +{ +#ifdef _WIN32 + void* ptr = VirtualAlloc(0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); + + if ((u64)ptr >= 0x80000000) + { + PanicAlert("Executable memory ended up above 2GB!"); + // If this happens, we have to implement a free ram search scheme. ector knows how. + } + + return(ptr); + +#else + void* retval = mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_ANONYMOUS | MAP_PRIVATE +#ifdef __x86_64__ + | (low ? MAP_32BIT : 0) +#endif + , -1, 0); // | MAP_FIXED + // printf("Mapped executable memory at %p (size %i)\n", retval, size); + + if (!retval) + { + PanicAlert("Failed to allocate executable memory, errno=%i", errno); + } + + return(retval); +#endif + +} + + +void* AllocateMemoryPages(int size) +{ +#ifdef _WIN32 + void* ptr = VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); + + if (!ptr) + { + PanicAlert("Failed to allocate raw memory"); + } + + return(ptr); + +#else + void* retval = mmap(0, size, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); // | MAP_FIXED + // printf("Mapped memory at %p (size %i)\n", retval, size); + + if (!retval) + { + PanicAlert("Failed to allocate raw memory, errno=%i", errno); + } + + return(retval); +#endif + +} + + +void FreeMemoryPages(void* ptr, int size) +{ +#ifdef _WIN32 + if (ptr) + { + VirtualFree(ptr, 0, MEM_RELEASE); + ptr = NULL; + } +#else + munmap(ptr, size); +#endif +} + + +void WriteProtectMemory(void* ptr, int size, bool allowExecute) +{ +#ifdef _WIN32 + VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READ : PAGE_READONLY, 0); +#else + mprotect(ptr, size, allowExecute ? (PROT_READ | PROT_EXEC) : PROT_READ); +#endif +} + + +void UnWriteProtectMemory(void* ptr, int size, bool allowExecute) +{ +#ifdef _WIN32 + VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READWRITE : PAGE_READONLY, 0); +#else + mprotect(ptr, size, allowExecute ? (PROT_READ | PROT_WRITE | PROT_EXEC) : PROT_WRITE | PROT_READ); +#endif +} + + -- cgit v1.2.3