summaryrefslogtreecommitdiff
path: root/dyn_load.c
diff options
context:
space:
mode:
authorNaoyuki Sawa <sawa_naoyuki-1@yahoo.co.jp>2018-05-02 13:10:23 +0900
committerIvan Maidanski <ivmai@mail.ru>2018-05-03 10:02:15 +0300
commit19bf43c604522a24d74783e51d3e8661e5ef4bc6 (patch)
treef6a10febd406ba7f66444e495db74cb8a109a1f0 /dyn_load.c
parentb76c7a02ab8393d2602351ef61908aa5d32d44d9 (diff)
downloadbdwgc-19bf43c604522a24d74783e51d3e8661e5ef4bc6.tar.gz
Fix register_dynamic_libraries on Windows 10
Issue #219 (bdwgc). In the past (Windows XP, Windows 7, and older Windows 10), VirtualQuery always returned PAGE_READWRITE for the data section. In the April 2018 Update of Windows 10, it seems that PAGE_WRITECOPY is returned sometimes (thus causing GC_register_dynamic_libraries not to call GC_cond_add_roots for the section). * dyn_load.c [MSWIN32 || MSWINCE || CYGWIN32] (GC_register_dynamic_libraries): Call GC_cond_add_roots() also for PAGE_EXECUTE_WRITECOPY and PAGE_WRITECOPY pages.
Diffstat (limited to 'dyn_load.c')
-rw-r--r--dyn_load.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/dyn_load.c b/dyn_load.c
index 190dc107..9320adb5 100644
--- a/dyn_load.c
+++ b/dyn_load.c
@@ -1030,7 +1030,9 @@ GC_INNER void GC_register_dynamic_libraries(void)
protect = buf.Protect;
if (buf.State == MEM_COMMIT
&& (protect == PAGE_EXECUTE_READWRITE
- || protect == PAGE_READWRITE)
+ || protect == PAGE_EXECUTE_WRITECOPY
+ || protect == PAGE_READWRITE
+ || protect == PAGE_WRITECOPY)
&& (buf.Type == MEM_IMAGE
# ifdef GC_REGISTER_MEM_PRIVATE
|| (protect == PAGE_READWRITE && buf.Type == MEM_PRIVATE)