Commit 971774e4 by Ranjit Mathew

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.

From-SVN: r114818
parent 5a6ccafd
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> 2006-06-02 Geoffrey Keating <geoffk@apple.com>
* configure.ac: Define HAS_PPC_THREAD_STATE_R0, * configure.ac: Define HAS_PPC_THREAD_STATE_R0,
......
...@@ -860,6 +860,9 @@ void GC_register_dynamic_libraries() ...@@ -860,6 +860,9 @@ void GC_register_dynamic_libraries()
} }
# endif /* DEBUG_VIRTUALQUERY */ # endif /* DEBUG_VIRTUALQUERY */
extern GC_bool GC_wnt; /* Is Windows NT derivative. */
/* Defined and set in os_dep.c. */
void GC_register_dynamic_libraries() void GC_register_dynamic_libraries()
{ {
MEMORY_BASIC_INFORMATION buf; MEMORY_BASIC_INFORMATION buf;
...@@ -901,7 +904,12 @@ void GC_register_dynamic_libraries() ...@@ -901,7 +904,12 @@ void GC_register_dynamic_libraries()
* !is_frame_buffer(p, buf.RegionSize, buf.Type) * !is_frame_buffer(p, buf.RegionSize, buf.Type)
* instead of just checking for MEM_IMAGE. * instead of just checking for MEM_IMAGE.
* If something breaks, change it back. */ * 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 # ifdef DEBUG_VIRTUALQUERY
GC_dump_meminfo(&buf); GC_dump_meminfo(&buf);
# endif # endif
......
...@@ -1181,12 +1181,15 @@ void GC_register_data_segments() ...@@ -1181,12 +1181,15 @@ void GC_register_data_segments()
/* This used to be set for gcc, to avoid dealing with */ /* This used to be set for gcc, to avoid dealing with */
/* the structured exception handling issues. But we now have */ /* the structured exception handling issues. But we now have */
/* assembly code to do that right. */ /* 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() void GC_init_win32()
{ {
/* if we're running under win32s, assume that no DLLs will be loaded */ /* if we're running under win32s, assume that no DLLs will be loaded */
DWORD v = GetVersion(); 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 */ /* Return the smallest address a such that VirtualQuery */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment