This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] More robust fix for PR target/66488
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 15 Dec 2017 10:38 +0100
- Subject: [patch] More robust fix for PR target/66488
- Authentication-results: sourceware.org; auth=none
Hi,
this PR was about the blow-up of the garbage collector on x86_64-w64-mingw32
when more than 3 GB are allocated. The fix was to set HOST_BITS_PER_PTR to
the appropriate value (64) in config/i386/xm-mingw32.h.
This means that the same issue can happen on other P64 hosts so the attached
patch replaces the fix by a more robust variant. And I'm proposing that it be
installed on all active branches (the original fix is not on the 6 branch).
Tested on x86_64-w64-mingw32 (6 branch) and x86_64-suse-linux (mainline), OK?
2017-12-15 Eric Botcazou <ebotcazou@adacore.com>
PR target/66488
* ggc-page.c (HOST_BITS_PER_PTR): Do not define here...
* hwint.h (HOST_BITS_PER_PTR): ...but here instead.
* config/i386/xm-mingw32.h (HOST_BITS_PER_PTR): Delete.
--
Eric Botcazou
Index: config/i386/xm-mingw32.h
===================================================================
--- config/i386/xm-mingw32.h (revision 255622)
+++ config/i386/xm-mingw32.h (working copy)
@@ -37,8 +37,3 @@ along with GCC; see the file COPYING3.
"long long" values. Instead, we use "I64". */
#define HOST_LONG_LONG_FORMAT "I64"
#endif
-
-/* this is to prevent gcc-heap.c from assuming sizeof(long) == sizeof(intptr_t) */
-#ifdef __x86_64__
-# define HOST_BITS_PER_PTR 64
-#endif
Index: ggc-page.c
===================================================================
--- ggc-page.c (revision 255622)
+++ ggc-page.c (working copy)
@@ -92,11 +92,6 @@ along with GCC; see the file COPYING3.
4: Object marks as well. */
#define GGC_DEBUG_LEVEL (0)
-#ifndef HOST_BITS_PER_PTR
-#define HOST_BITS_PER_PTR HOST_BITS_PER_LONG
-#endif
-
-
/* A two-level tree is used to look up the page-entry for a given
pointer. Two chunks of the pointer's bits are extracted to index
the first and second levels of the tree, as follows:
Index: hwint.h
===================================================================
--- hwint.h (revision 255622)
+++ hwint.h (working copy)
@@ -14,6 +14,7 @@
#define HOST_BITS_PER_SHORT (CHAR_BIT * SIZEOF_SHORT)
#define HOST_BITS_PER_INT (CHAR_BIT * SIZEOF_INT)
#define HOST_BITS_PER_LONG (CHAR_BIT * SIZEOF_LONG)
+#define HOST_BITS_PER_PTR (CHAR_BIT * SIZEOF_VOID_P)
/* The string that should be inserted into a printf style format to
indicate a "long" operand. */