[m-rev.] diff: workaround a C stack overflow on MinGW64

Julien Fischer jfischer at opturion.com
Mon Mar 25 18:22:32 AEDT 2013

Workaround a C stack overflow on MinGW64.

The hlc.gc version of the Mercury compiler exhausts the C stack while compiling
the standard library.  This is because the default size of the C stack on
Windows is ridiculously low.

    On the x86_64-w64-mingw32 architecture, bump the default size
    of the C stack up to something more reasonable.

    XXX in the long term, i.e. when we support 64-bit MSVC, we
    should add a --stack option to the ml script and use that.
    (The above is specific to GCC.)


diff --git a/compiler/Mmakefile b/compiler/Mmakefile
index d38fbf4..045d8f5 100644
--- a/compiler/Mmakefile
+++ b/compiler/Mmakefile
@@ -53,7 +53,7 @@ ALL_MLLIBS    = $(MLLIBS) $(EXTRA_MLLIBS)
 MLFLAGS      += --shared

 # Work-around for a fixed limit: on alpha-dec-osf3.2, if we compile with
 # `-O5', then when linking mercury_compile we get an error message of the form
@@ -68,7 +68,7 @@ MLFLAGS += --static
 MCFLAGS += --linkage static

-# -Xmx256m doesn't always seem to be enough memory to build the complier.
+# -Xmx256m doesn't always seem to be enough memory to build the compiler.
 # This bumps up the memory when building the compiler if the javac executable
 # accepts the -J-Xmx flag, without bumping up the memory requirements in
 # general.
@@ -76,6 +76,18 @@ ifneq ("$(findstring -J\"-Xmx,$(JAVACFLAGS))","")
 JAVACFLAGS   += -J\"-Xmx2048m\"

+# The default C stack size of 1Mb on Windows is not enough to compile the
+# standard library in the hlc.gc grade using a Mercury compiler built in
+# the hlc.gc grade with MinGW64.
+# XXX we must match against the full architecture string here since we only
+# want to pass --stack to the linker for MinGW64 GCC.
+# When we support the 64-bit version of the Microsoft toolchain, we will
+# need to do something different here.
+ifeq ($(FULLARCH),x86_64-w64-mingw32)
+LDFLAGS += -Wl,--stack=8388608

 # targets

More information about the reviews mailing list