--- qemu/exec.c Sat Sep 4 15:51:23 2004 +++ qemu/exec.c Sat Sep 4 16:12:05 2004 @@ -18,6 +18,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "config.h" +#ifdef _WIN32 +#include +#endif #include #include #include @@ -127,13 +130,35 @@ static void page_init(void) { +#ifdef _WIN32 + SYSTEM_INFO system_info; + DWORD old_protect; +#else + unsigned long address; + unsigned long length; +#endif + /* NOTE: we can always suppose that qemu_host_page_size >= TARGET_PAGE_SIZE */ #ifdef _WIN32 - qemu_real_host_page_size = 4096; + GetSystemInfo(&system_info); + qemu_real_host_page_size = system_info.dwPageSize; + + VirtualProtect(code_gen_buffer, sizeof(code_gen_buffer), + PAGE_EXECUTE_READWRITE, &old_protect); #else qemu_real_host_page_size = getpagesize(); + + address = (unsigned long)code_gen_buffer; + address &= ~(qemu_real_host_page_size - 1); + + length = sizeof(code_gen_buffer); + length += qemu_real_host_page_size - 1; + length &= ~(qemu_real_host_page_size - 1); + + mprotect(address, length, PROT_READ | PROT_WRITE | PROT_EXEC); #endif + if (qemu_host_page_size == 0) qemu_host_page_size = qemu_real_host_page_size; if (qemu_host_page_size < TARGET_PAGE_SIZE)