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%)
> 

Reply via email to