Ups, that was unintended to send an empty mail :) So, here is a patch. It would be great if somebody could verify that the reported issue is solved by it.
Kai diff --git a/mingw-w64-crt/crt/pseudo-reloc.c b/mingw-w64-crt/crt/pseudo-reloc.c index 4e7f31b..74ad6d1 100644 --- a/mingw-w64-crt/crt/pseudo-reloc.c +++ b/mingw-w64-crt/crt/pseudo-reloc.c @@ -206,7 +206,8 @@ mark_section_writable (LPVOID addr) return; } - if (b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE) + if (b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE + && b.Protect != PAGE_EXECUTE_WRITECOPY && b.Protect != PAGE_WRITECOPY) { if (!VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, @@ -277,7 +278,8 @@ __write_memory (void *addr, const void *src, size_t len) } /* Temporarily allow write access to read-only protected memory. */ - if (b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE) + if (b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE + && b.Protect != PAGE_WRITECOPY || b.Protect != PAGE_EXECUTE_WRITECOPY) { call_unprotect = 1; VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, @@ -287,7 +289,9 @@ __write_memory (void *addr, const void *src, size_t len) /* write the data. */ memcpy (addr, src, len); /* Restore original protection. */ - if (call_unprotect && b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE) + if (call_unprotect + && b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE + && b.Protect != PAGE_WRITECOPY || b.Protect != PAGE_EXECUTE_WRITECOPY) VirtualProtect (b.BaseAddress, b.RegionSize, oldprot, &oldprot); } ------------------------------------------------------------------------------ _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public