Backport Windows 9x/ME VirtualQuery() fix from GC 6.7.
authorRanjit Mathew <rmathew@gcc.gnu.org>
Tue, 20 Jun 2006 17:10:19 +0000 (17:10 +0000)
committerRanjit Mathew <rmathew@gcc.gnu.org>
Tue, 20 Jun 2006 17:10:19 +0000 (17:10 +0000)
* os_dep.c (GC_wnt): Define.
(GC_init_win32): Set GC_wnt.
* dyn_load.c (GC_register_dynamic_libraries): Consider MEM_PRIVATE
sections also on Windows 9x/ME.

From-SVN: r114818

boehm-gc/ChangeLog
boehm-gc/dyn_load.c
boehm-gc/os_dep.c

index cdb7f7c..ca5f33c 100644 (file)
@@ -1,3 +1,11 @@
+2006-06-20  Ranjit Mathew  <rmathew@gcc.gnu.org>
+       
+       Backport Windows 9x/ME VirtualQuery() fix from GC 6.7.
+       * os_dep.c (GC_wnt): Define.
+       (GC_init_win32): Set GC_wnt.
+       * dyn_load.c (GC_register_dynamic_libraries): Consider MEM_PRIVATE
+       sections also on Windows 9x/ME.
+
 2006-06-02  Geoffrey Keating  <geoffk@apple.com>
 
        * configure.ac: Define HAS_PPC_THREAD_STATE_R0,
index 94e6609..3485474 100644 (file)
@@ -860,6 +860,9 @@ void GC_register_dynamic_libraries()
   }
 # endif /* DEBUG_VIRTUALQUERY */
 
+  extern GC_bool GC_wnt;  /* Is Windows NT derivative.         */
+                         /* Defined and set in os_dep.c.       */
+
   void GC_register_dynamic_libraries()
   {
     MEMORY_BASIC_INFORMATION buf;
@@ -901,7 +904,12 @@ void GC_register_dynamic_libraries()
                 * !is_frame_buffer(p, buf.RegionSize, buf.Type)
                 * instead of just checking for MEM_IMAGE.
                 * If something breaks, change it back. */
-               && buf.Type == MEM_IMAGE) {  
+               /* There is some evidence that we cannot always
+                * ignore MEM_PRIVATE sections under Windows ME
+                * and predecessors.  Hence we now also check for
+                * that case.   */
+               && (buf.Type == MEM_IMAGE ||
+                   !GC_wnt && buf.Type == MEM_PRIVATE)) {  
 #              ifdef DEBUG_VIRTUALQUERY
                  GC_dump_meminfo(&buf);
 #              endif
index fb50a45..13692d9 100644 (file)
@@ -1181,12 +1181,15 @@ void GC_register_data_segments()
        /* This used to be set for gcc, to avoid dealing with           */
        /* the structured exception handling issues.  But we now have   */
        /* assembly code to do that right.                              */
+  GC_bool GC_wnt = FALSE;
+        /* This is a Windows NT derivative, i.e. NT, W2K, XP or later.  */
   
   void GC_init_win32()
   {
     /* if we're running under win32s, assume that no DLLs will be loaded */
     DWORD v = GetVersion();
-    GC_no_win32_dlls |= ((v & 0x80000000) && (v & 0xff) <= 3);
+    GC_wnt = !(v & 0x80000000);
+    GC_no_win32_dlls |= ((!GC_wnt) && (v & 0xff) <= 3);
   }
 
   /* Return the smallest address a such that VirtualQuery              */