From 11d164132bb68764fe09ff0906d5db9dbe9b130a Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Tue, 4 Nov 2003 05:45:53 +0000 Subject: [PATCH] memory alloc alignment --- Cxbx.opt | Bin 67072 -> 67072 bytes Source/Win32/CxbxKrnl/EmuD3D8.cpp | 2 ++ Source/Win32/CxbxKrnl/EmuKrnl.cpp | 42 +++++++++++++++++++++++++++--- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/Cxbx.opt b/Cxbx.opt index 240b68b729f45c0ca722a0a16406751aeccf1e2d..261c288b80447518ad0a22e18db4a9e41a34e517 100644 GIT binary patch literal 67072 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 K{{N-I|Njp@Gv~Ab diff --git a/Source/Win32/CxbxKrnl/EmuD3D8.cpp b/Source/Win32/CxbxKrnl/EmuD3D8.cpp index 49432b687..d70a9b363 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8.cpp @@ -785,6 +785,8 @@ static DWORD WINAPI EmuCreateDeviceProxy(LPVOID) Sleep(1); } + + return 0; } // check if a resource has been registered yet (if not, register it) diff --git a/Source/Win32/CxbxKrnl/EmuKrnl.cpp b/Source/Win32/CxbxKrnl/EmuKrnl.cpp index 5968ce64c..0ac565b07 100644 --- a/Source/Win32/CxbxKrnl/EmuKrnl.cpp +++ b/Source/Win32/CxbxKrnl/EmuKrnl.cpp @@ -729,7 +729,27 @@ XBSYSAPI EXPORTNUM(165) xboxkrnl::PVOID NTAPI xboxkrnl::MmAllocateContiguousMemo } #endif - PVOID pRet = VirtualAlloc(NULL, NumberOfBytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE); + // + // NOTE: Kludgey (but necessary) solution: + // + // Since this memory must be aligned on a page boundary, we must allocate an extra page + // so that we can return a valid page aligned pointer + // + + PVOID pRet = malloc(NumberOfBytes + 0x1000); + + // align to page boundary + { + DWORD dwRet = (DWORD)pRet; + + dwRet += 0x1000 - dwRet%0x1000; + + pRet = (PVOID)dwRet; + } + + #ifdef _DEBUG_TRACE + printf("EmuKrnl (0x%X): MmAllocateContiguous returned 0x%.08X\n", GetCurrentThreadId(), pRet); + #endif EmuSwapFS(); // Xbox FS @@ -766,7 +786,23 @@ XBSYSAPI EXPORTNUM(166) xboxkrnl::PVOID NTAPI xboxkrnl::MmAllocateContiguousMemo } #endif - PVOID pRet = malloc(NumberOfBytes); + // + // NOTE: Kludgey (but necessary) solution: + // + // Since this memory must be aligned on a page boundary, we must allocate an extra page + // so that we can return a valid page aligned pointer + // + + PVOID pRet = malloc(NumberOfBytes + 0x1000); + + // align to page boundary + { + DWORD dwRet = (DWORD)pRet; + + dwRet += 0x1000 - dwRet%0x1000; + + pRet = (PVOID)dwRet; + } static int count = 0; @@ -774,7 +810,7 @@ XBSYSAPI EXPORTNUM(166) xboxkrnl::PVOID NTAPI xboxkrnl::MmAllocateContiguousMemo g_HaloHack[count-1] = (uint32)pRet; #ifdef _DEBUG_TRACE - printf("EmuKrnl (0x%X): MmAllocateContiguous returned 0x%.08X\n", GetCurrentThreadId(), pRet); + printf("EmuKrnl (0x%X): MmAllocateContiguousEx returned 0x%.08X\n", GetCurrentThreadId(), pRet); #endif EmuSwapFS(); // Xbox FS