On Oct 12, 2018, Alexandre Oliva <ol...@adacore.com> wrote:

>       * config/i386/mingw32.h (LINK_SPEC_LARGE_ADDR_AWARE): Define,
>       based on MINGW_DEFAULT_LARGE_ADDR_AWARE.
>       (LINK_SPEC): Insert it.
>       * config/i386/mingw-264.h: Likewise.
                            ^ s/2/w/, fixing...

Now, it occurred to me that it is possible for biarch64.h to be
included, thus enabling 64-bit mode even by default, without including
mingw-w64.h.  I had assumed in my patch that this was not supposed to
happen, but configuring with --target=x86_64-mingw32 shows it does
happen, and such a toolchain may (after my patch) pass
--large-address-aware to the linker, even when linking -m64 binaries.

Is that target configuration really supposed to be different from
x86_64-w64-mingw32 (or however else the w64 configuration is supposed to
be spelled), or should x86_64-mingw32 also use mingw-w64.h so that
they're equivalent?

It seems to me that we need a further patch like this:

diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index c9d8a7a31f30..848eb8430b30 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -114,11 +114,17 @@ along with GCC; see the file COPYING3.  If not see
 #define SUBTARGET_EXTRA_SPECS                                          \
   { "shared_libgcc_undefs", SHARED_LIBGCC_UNDEFS_SPEC }
 
-#if MINGW_DEFAULT_LARGE_ADDR_AWARE
+#if ! MINGW_DEFAULT_LARGE_ADDR_AWARE
+# define LINK_SPEC_LARGE_ADDR_AWARE ""
+#elif ! TARGET_BI_ARCH
 # define LINK_SPEC_LARGE_ADDR_AWARE \
   "%{!shared:%{!mdll:--large-address-aware}}"
+#elif TARGET_64BIT_DEFAULT
+# define LINK_SPEC_LARGE_ADDR_AWARE \
+  "%{!shared:%{!mdll:%{m32:--large-address-aware}}}"
 #else
-# define LINK_SPEC_LARGE_ADDR_AWARE ""
+# define LINK_SPEC_LARGE_ADDR_AWARE \
+  "%{!shared:%{!mdll:%{!m64:--large-address-aware}}}"
 #endif
 
 #define LINK_SPEC "%{mwindows:--subsystem windows} \

But then, even this wouldn't necessarily do the right thing if e.g.
biarchx32.h is in effect.  Is that even possible?

Or can we just leave mingw32.h as is, considering that (AFAIK) -m64 *is*
--large-address-aware, it just has that enabled by default?

Thanks in advance for your guidance,

-- 
Alexandre Oliva, freedom fighter   https://FSFLA.org/blogs/lxo
Be the change, be Free!         FSF Latin America board member
GNU Toolchain Engineer                Free Software Evangelist
Hay que enGNUrecerse, pero sin perder la terGNUra jamás-GNUChe

Reply via email to