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

Reply via email to