On 21/02/2024 17:47, Evgeny Karpov wrote: > Hello, > > We would like to take your attention to the review of changes for the > new GCC target, aarch64-w64-mingw32. The new target will be > supported, tested, added to CI, and maintained by Linaro. This marks > the first of three planned patch series contributing to the GCC C > compiler's support for Windows Arm64. > > 1. Minimal aarch64-w64-mingw32 C implementation to cross-compile > hello-world with libgcc for Windows Arm64 using MinGW. > 2. Extension of the aarch64-w64-mingw32 C implementation to > cross-compile OpenSSL, OpenBLAS, FFmpeg, and libjpeg-turbo. All > packages successfully pass tests. > 3. Addition of call stack support for debugging, resolution of > optimization issues in the C compiler, and DLL export/import for the > aarch64-w64-mingw32 target. > > This patch series introduces the 1st point, which involves building > hello-world for the aarch64-w64-mingw32 target. The patch depends on > the binutils changes for the aarch64-w64-mingw32 target that have > already been merged. > > The binutils should include recent relocation fixes. > f87eaf8ff3995a5888c6dc4996a20c770e6bcd36 > aarch64: Add new relocations and limit COFF AArch64 relocation offsets > > The series is structured in a way to trivially show that it should not > affect any other targets. > > In this patch, several changes have been made to support the > aarch64-w64-mingw32 target for GCC. The modifications include the > definition of the MS ABI for aarch64, adjustments to FIXED_REGISTERS > and STATIC_CHAIN_REGNUM for different ABIs, and specific definitions > for COFF format on AArch64. Additionally, the patch reuses MinGW > <stdint.h> types and definitions from i386, relocating them to a new > mingw folder for shared usage between both targets. > > MinGW-specific options have been introduced for AArch64, along with > override options for aarch64-w64-mingw32. Builtin stack probing for > override options for aarch64-w64-mingw32. Builtin stack probing for > AArch64 has been enabled as an alternative for chkstk. Symbol name > encoding and section information handling for aarch64-w64-mingw32 have > been incorporated, and the MinGW environment has been added, which > will also be utilized for defining the Cygwin environment in the > future. > > The patch includes renaming "x86 Windows Options" to "Cygwin and MinGW > Options," which now encompasses AArch64 as well. AArch64-specific > Cygwin and MinGW Options have been introduced for the unique > requirements of the AArch64 architecture. > > Function type declaration and named sections support have been added. > The necessary objects for Cygwin and MinGW have been built for the > aarch64-w64-mingw32 target, and relevant files such as msformat-c.cc > and winnt-d.cc have been moved to the mingw folder for reuse in > AArch64. > > Furthermore, the aarch64-w64-mingw32 target has been included in both > libatomic and libgcc, ensuring support for the AArch64 architecture > within these libraries. These changes collectively enhance the > capabilities of GCC for the specified target. > > Coauthors: Zac Walker <zacwal...@microsoft.com>, > Mark Harmstone <m...@harmstone.com> and > Ron Riddle <ron.rid...@microsoft.com> > > Refactored, prepared, and validated by > Radek Barton <radek.bar...@microsoft.com> and > Evgeny Karpov <evgeny.kar...@microsoft.com> > > Special thanks to the Linaro GNU toolchain team for internal review > and assistance in preparing the patch series! > > Regards, > Evgeny
Thanks for posting this. I've only read quickly through this patch series and responded where I think some action is obviously required. That doesn't necessarily mean the other patches are perfect, though, just that nothing immediately caught my attention. R. > > > Zac Walker (13): > Introduce aarch64-w64-mingw32 target > aarch64: The aarch64-w64-mingw32 target implements the MS ABI > aarch64: Mark x18 register as a fixed register for MS ABI > aarch64: Add aarch64-w64-mingw32 COFF > Reuse MinGW from i386 for AArch64 > Rename section and encoding functions from i386 which will be used in > aarch64 > Exclude i386 functionality from aarch64 build > aarch64: Add Cygwin and MinGW environments for AArch64 > aarch64: Add SEH to machine_function > Rename "x86 Windows Options" to "Cygwin and MinGW Options" > aarch64: Build and add objects for Cygwin and MinGW for AArch64 > aarch64: Add aarch64-w64-mingw32 target to libatomic > Add aarch64-w64-mingw32 target to libgcc > > fixincludes/mkfixinc.sh | 3 +- > gcc/config.gcc | 47 +++-- > gcc/config/aarch64/aarch64-coff.h | 92 +++++++++ > gcc/config/aarch64/aarch64-opts.h | 7 + > gcc/config/aarch64/aarch64-protos.h | 5 + > gcc/config/aarch64/aarch64.h | 25 ++- > gcc/config/aarch64/cygming.h | 178 ++++++++++++++++++ > gcc/config/i386/cygming.h | 18 +- > gcc/config/i386/cygming.opt.urls | 30 --- > gcc/config/i386/i386-protos.h | 12 +- > gcc/config/i386/mingw-w64.opt.urls | 2 +- > gcc/config/lynx.opt.urls | 2 +- > gcc/config/{i386 => mingw}/cygming.opt | 0 > gcc/config/mingw/cygming.opt.urls | 30 +++ > gcc/config/{i386 => mingw}/cygwin-d.cc | 0 > gcc/config/{i386 => mingw}/mingw-stdint.h | 0 > gcc/config/{i386 => mingw}/mingw.opt | 0 > gcc/config/{i386 => mingw}/mingw.opt.urls | 2 +- > gcc/config/{i386 => mingw}/mingw32.h | 0 > gcc/config/{i386 => mingw}/msformat-c.cc | 0 > gcc/config/{i386 => mingw}/t-cygming | 23 ++- > gcc/config/{i386 => mingw}/winnt-cxx.cc | 0 > gcc/config/{i386 => mingw}/winnt-d.cc | 0 > gcc/config/{i386 => mingw}/winnt-stubs.cc | 0 > gcc/config/{i386 => mingw}/winnt.cc | 30 +-- > gcc/doc/invoke.texi | 12 +- > gcc/varasm.cc | 2 +- > libatomic/configure.tgt | 2 +- > libgcc/config.host | 23 ++- > libgcc/config/aarch64/t-no-eh | 2 + > libgcc/config/{i386 => mingw}/t-gthr-win32 | 0 > libgcc/config/{i386 => mingw}/t-mingw-pthread | 0 > 32 files changed, 450 insertions(+), 97 deletions(-) > create mode 100644 gcc/config/aarch64/aarch64-coff.h > create mode 100644 gcc/config/aarch64/cygming.h > delete mode 100644 gcc/config/i386/cygming.opt.urls > rename gcc/config/{i386 => mingw}/cygming.opt (100%) > create mode 100644 gcc/config/mingw/cygming.opt.urls > rename gcc/config/{i386 => mingw}/cygwin-d.cc (100%) > rename gcc/config/{i386 => mingw}/mingw-stdint.h (100%) > rename gcc/config/{i386 => mingw}/mingw.opt (100%) > rename gcc/config/{i386 => mingw}/mingw.opt.urls (86%) > rename gcc/config/{i386 => mingw}/mingw32.h (100%) > rename gcc/config/{i386 => mingw}/msformat-c.cc (100%) > rename gcc/config/{i386 => mingw}/t-cygming (73%) > rename gcc/config/{i386 => mingw}/winnt-cxx.cc (100%) > rename gcc/config/{i386 => mingw}/winnt-d.cc (100%) > rename gcc/config/{i386 => mingw}/winnt-stubs.cc (100%) > rename gcc/config/{i386 => mingw}/winnt.cc (97%) > create mode 100644 libgcc/config/aarch64/t-no-eh > rename libgcc/config/{i386 => mingw}/t-gthr-win32 (100%) > rename libgcc/config/{i386 => mingw}/t-mingw-pthread (100%) >