Evgeny Karpov <evgeny.kar...@microsoft.com> writes: > The DLL import/export mingw implementation, originally from ix86, requires > minor adjustments to be compatible with AArch64. > > gcc/ChangeLog: > > * config/mingw/mingw32.h (defined): Use the correct DllMainCRTStartup > entry function. > * config/mingw/winnt-dll.cc (defined): Exclude ix86-related code. > --- > gcc/config/mingw/mingw32.h | 2 +- > gcc/config/mingw/winnt-dll.cc | 4 ++++ > 2 files changed, 5 insertions(+), 1 deletion(-)
Could we provide some abstractions here, rather than testing CPU-specific macros directly? E.g.: > > diff --git a/gcc/config/mingw/mingw32.h b/gcc/config/mingw/mingw32.h > index 08f1b5f0696..efe777051b4 100644 > --- a/gcc/config/mingw/mingw32.h > +++ b/gcc/config/mingw/mingw32.h > @@ -79,7 +79,7 @@ along with GCC; see the file COPYING3. If not see > #endif > > #undef SUB_LINK_ENTRY > -#if TARGET_64BIT_DEFAULT > +#if TARGET_64BIT_DEFAULT || defined (TARGET_AARCH64_MS_ABI) it looks like this is equivalent to something like "HAVE_64BIT_POINTERS" or something, which aarch64 could define to 1 and x86 could define to TARGET_64BIT_DEFAULT. The name is just a suggestion, based on not really knowing what the macro selects. Please use whatever makes most sense :) > #define SUB_LINK_ENTRY SUB_LINK_ENTRY64 > #else > #define SUB_LINK_ENTRY SUB_LINK_ENTRY32 > diff --git a/gcc/config/mingw/winnt-dll.cc b/gcc/config/mingw/winnt-dll.cc > index 349ade6f5c0..294361fab4c 100644 > --- a/gcc/config/mingw/winnt-dll.cc > +++ b/gcc/config/mingw/winnt-dll.cc > @@ -206,9 +206,13 @@ legitimize_pe_coff_symbol (rtx addr, bool inreg) > } > } > > +#if !defined (TARGET_AARCH64_MS_ABI) > + > if (ix86_cmodel != CM_LARGE_PIC && ix86_cmodel != CM_MEDIUM_PIC) > return NULL_RTX; > > +#endif > + Similarly here, it feels like there is a concept underlying this check. Could we just use: if (!NEW_MACRO) return NULL_RTX; with NEW_MACRO describing the underlying property that is common to medium x86 PIC, large x86 PIC, and aarch64. Thanks, Richard > if (GET_CODE (addr) == SYMBOL_REF > && !is_imported_p (addr) > && SYMBOL_REF_EXTERNAL_P (addr)