From 5165917f44b2d05fa0808759e57c6cd244162be3 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 7 Feb 2013 16:46:03 +0100 Subject: [PATCH] Make ExecutableAllocator compile on Windows Use VirtualAlloc and friends instead of mmap. Change-Id: I52a90cebb111cf923d86ce6a821717dc7e02ad85 Reviewed-by: Lars Knoll --- src/3rdparty/masm/stubs/ExecutableAllocator.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/3rdparty/masm/stubs/ExecutableAllocator.h b/src/3rdparty/masm/stubs/ExecutableAllocator.h index de04ffe..47768c6 100644 --- a/src/3rdparty/masm/stubs/ExecutableAllocator.h +++ b/src/3rdparty/masm/stubs/ExecutableAllocator.h @@ -45,8 +45,12 @@ #include #include +#if OS(WINDOWS) +#include +#else #include #include +#endif namespace JSC { @@ -58,14 +62,22 @@ struct ExecutableMemoryHandle : public RefCounted { { size_t pageSize = WTF::pageSize(); m_size = (m_size + pageSize - 1) & ~(pageSize - 1); +#if OS(WINDOWS) + m_data = VirtualAlloc(0, m_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); +#else #if OS(DARWIN) # define MAP_ANONYMOUS MAP_ANON #endif m_data = mmap(0, m_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +#endif } ~ExecutableMemoryHandle() { +#if OS(WINDOWS) + VirtualFree(m_data, 0, MEM_RELEASE); +#else munmap(m_data, m_size); +#endif } inline void shrink(size_t) { @@ -96,8 +108,13 @@ struct ExecutableAllocator { size_t pageSize = WTF::pageSize(); size_t iaddr = reinterpret_cast(addr); size_t roundAddr = iaddr & ~(pageSize - static_cast(1)); +#if OS(WINDOWS) + DWORD oldProtect; + VirtualProtect(reinterpret_cast(roundAddr), size + (iaddr - roundAddr), PAGE_EXECUTE_READWRITE, &oldProtect); +#else int mode = PROT_READ | PROT_WRITE | PROT_EXEC; mprotect(reinterpret_cast(roundAddr), size + (iaddr - roundAddr), mode); +#endif } }; -- 2.7.4