On 10/31/2018 10:39 PM, Alexandre Oliva wrote: > 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? >
Looks like it causes an error on 64bit: /usr/libexec/gcc/x86_64-w64-mingw32/ld: unrecognized option '--large-address-aware' So it'll need to be excluded for x86_64.
signature.asc
Description: OpenPGP digital signature