From 961c50410926b0d62b9938b438857664cbaca02d Mon Sep 17 00:00:00 2001 From: Evgeny Karpov Date: Thu, 11 Jul 2024 15:27:35 +0200 Subject: [PATCH] Add LTO support The patch reuses the configuration for LTO from ix86 and adds the aarch64 architecture to the list of supported COFF headers. gcc/ChangeLog: * config/aarch64/cygming.h (TARGET_ASM_LTO_START): New. (TARGET_ASM_LTO_END): Likewise. * config/i386/cygming.h (TARGET_ASM_LTO_START): Update. (TARGET_ASM_LTO_END): Likewise. * config/i386/i386-protos.h (i386_pe_asm_lto_start): Delete. (i386_pe_asm_lto_end): Likewise. * config/mingw/winnt.cc (i386_pe_asm_lto_start): Rename into ... (mingw_pe_asm_lto_start): ... this. (i386_pe_asm_lto_end): Rename into ... (mingw_pe_asm_lto_end): ... this. * config/mingw/winnt.h (mingw_pe_asm_lto_start): New. (mingw_pe_asm_lto_end): Likewise. libiberty/ChangeLog: * simple-object-coff.c: Add aarch64. --- gcc/config/aarch64/cygming.h | 6 ++++++ gcc/config/i386/cygming.h | 4 ++-- gcc/config/i386/i386-protos.h | 2 -- gcc/config/mingw/winnt.cc | 4 ++-- gcc/config/mingw/winnt.h | 2 ++ libiberty/simple-object-coff.c | 4 +++- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/gcc/config/aarch64/cygming.h b/gcc/config/aarch64/cygming.h index 3afeb77110d..8b9038ccf88 100644 --- a/gcc/config/aarch64/cygming.h +++ b/gcc/config/aarch64/cygming.h @@ -245,4 +245,10 @@ still needed for compilation. */ #define HAVE_64BIT_POINTERS 1 +/* Kludge because of missing PE-COFF support for early LTO debug. */ +#undef TARGET_ASM_LTO_START +#define TARGET_ASM_LTO_START mingw_pe_asm_lto_start +#undef TARGET_ASM_LTO_END +#define TARGET_ASM_LTO_END mingw_pe_asm_lto_end + #endif diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index 7852af6050a..7a97d02b81b 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -348,9 +348,9 @@ do { \ /* Kludge because of missing PE-COFF support for early LTO debug. */ #undef TARGET_ASM_LTO_START -#define TARGET_ASM_LTO_START i386_pe_asm_lto_start +#define TARGET_ASM_LTO_START mingw_pe_asm_lto_start #undef TARGET_ASM_LTO_END -#define TARGET_ASM_LTO_END i386_pe_asm_lto_end +#define TARGET_ASM_LTO_END mingw_pe_asm_lto_end #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index c26ae5e4f1d..78e72c50c6d 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -320,8 +320,6 @@ extern void i386_pe_asm_output_aligned_decl_common (FILE *, tree, const char *, HOST_WIDE_INT, HOST_WIDE_INT); -extern void i386_pe_asm_lto_start (void); -extern void i386_pe_asm_lto_end (void); extern void i386_pe_start_function (FILE *, const char *, tree); extern void i386_pe_end_function (FILE *, const char *, tree); extern void i386_pe_end_cold_function (FILE *, const char *, tree); diff --git a/gcc/config/mingw/winnt.cc b/gcc/config/mingw/winnt.cc index 59d4a6e27b9..56904925d5d 100644 --- a/gcc/config/mingw/winnt.cc +++ b/gcc/config/mingw/winnt.cc @@ -832,14 +832,14 @@ mingw_pe_file_end (void) static enum debug_info_levels saved_debug_info_level; void -i386_pe_asm_lto_start (void) +mingw_pe_asm_lto_start (void) { saved_debug_info_level = debug_info_level; debug_info_level = DINFO_LEVEL_NONE; } void -i386_pe_asm_lto_end (void) +mingw_pe_asm_lto_end (void) { debug_info_level = saved_debug_info_level; } diff --git a/gcc/config/mingw/winnt.h b/gcc/config/mingw/winnt.h index 14bff19e697..1ac19fd2386 100644 --- a/gcc/config/mingw/winnt.h +++ b/gcc/config/mingw/winnt.h @@ -23,6 +23,8 @@ http://www.gnu.org/licenses/. */ extern tree mingw_handle_selectany_attribute (tree *, tree, tree, int, bool *); extern void mingw_pe_asm_named_section (const char *, unsigned int, tree); +extern void mingw_pe_asm_lto_start (void); +extern void mingw_pe_asm_lto_end (void); extern void mingw_pe_declare_type (FILE *, const char *, bool, bool); extern void mingw_pe_encode_section_info (tree, rtx, int); extern void mingw_pe_file_end (void); diff --git a/libiberty/simple-object-coff.c b/libiberty/simple-object-coff.c index e748205972f..fd3c310db51 100644 --- a/libiberty/simple-object-coff.c +++ b/libiberty/simple-object-coff.c @@ -219,7 +219,9 @@ static const struct coff_magic_struct coff_magic[] = /* i386. */ { 0x14c, 0, F_EXEC | IMAGE_FILE_SYSTEM | IMAGE_FILE_DLL }, /* x86_64. */ - { 0x8664, 0, F_EXEC | IMAGE_FILE_SYSTEM | IMAGE_FILE_DLL } + { 0x8664, 0, F_EXEC | IMAGE_FILE_SYSTEM | IMAGE_FILE_DLL }, + /* AArch64. */ + { 0xaa64, 0, F_EXEC | IMAGE_FILE_SYSTEM | IMAGE_FILE_DLL } }; /* See if we have a COFF file. */