diff --git a/SOURCES/binutils-AArch64-EFI.patch b/SOURCES/binutils-AArch64-EFI.patch new file mode 100644 index 0000000..06ba201 --- /dev/null +++ b/SOURCES/binutils-AArch64-EFI.patch @@ -0,0 +1,928 @@ +diff -rup binutils.orig/bfd/.gitignore binutils-2.35.2/bfd/.gitignore +--- binutils.orig/bfd/.gitignore 2021-11-30 13:38:24.349744247 +0000 ++++ binutils-2.35.2/bfd/.gitignore 2021-11-30 13:38:37.236657064 +0000 +@@ -11,6 +11,7 @@ + /peigen.c + /pepigen.c + /pex64igen.c ++/pe-aarch64igen.c + /stmp-bfd-h + /targmatch.h + +diff -rup binutils.orig/bfd/Makefile.am binutils-2.35.2/bfd/Makefile.am +--- binutils.orig/bfd/Makefile.am 2021-11-30 13:38:24.358744186 +0000 ++++ binutils-2.35.2/bfd/Makefile.am 2021-11-30 13:38:37.237657058 +0000 +@@ -571,7 +571,9 @@ BFD64_BACKENDS = \ + mach-o-aarch64.lo \ + mach-o-x86-64.lo \ + mmo.lo \ ++ pe-aarch64igen.lo \ + pe-x86_64.lo \ ++ pei-aarch64lo \ + pei-ia64.lo \ + pei-x86_64.lo \ + pepigen.lo \ +@@ -611,6 +613,7 @@ BFD64_BACKENDS_CFILES = \ + mach-o-x86-64.c \ + mmo.c \ + pe-x86_64.c \ ++ pei-aarch64.c \ + pei-ia64.c \ + pei-x86_64.c \ + vms-alpha.c +@@ -670,7 +673,7 @@ BUILD_CFILES = \ + elf32-aarch64.c elf64-aarch64.c \ + elf32-ia64.c elf64-ia64.c \ + elf32-riscv.c elf64-riscv.c \ +- peigen.c pepigen.c pex64igen.c ++ peigen.c pepigen.c pex64igen.c pe-aarch64igen.c + + CFILES = $(SOURCE_CFILES) $(BUILD_CFILES) + +@@ -866,6 +869,10 @@ pex64igen.c: peXXigen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pex64/g < $< >> $@ + ++pe-aarch64igen.c: peXXigen.c ++ echo "#line 1 \"peXXigen.c\"" > $@ ++ $(SED) -e s/XX/peAArch64/g < $< >> $@ ++ + BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h + LOCAL_H_DEPS= libbfd.h sysdep.h config.h bfd_stdint.h + $(BFD32_LIBS) \ +diff -rup binutils.orig/bfd/Makefile.in binutils-2.35.2/bfd/Makefile.in +--- binutils.orig/bfd/Makefile.in 2021-11-30 13:38:24.346744267 +0000 ++++ binutils-2.35.2/bfd/Makefile.in 2021-11-30 13:38:37.238657051 +0000 +@@ -997,7 +997,9 @@ BFD64_BACKENDS = \ + mach-o-aarch64.lo \ + mach-o-x86-64.lo \ + mmo.lo \ ++ pe-aarch64igen.lo \ + pe-x86_64.lo \ ++ pei-aarch64.lo \ + pei-ia64.lo \ + pei-x86_64.lo \ + pepigen.lo \ +@@ -1037,6 +1039,7 @@ BFD64_BACKENDS_CFILES = \ + mach-o-x86-64.c \ + mmo.c \ + pe-x86_64.c \ ++ pei-aarch64.c \ + pei-ia64.c \ + pei-x86_64.c \ + vms-alpha.c +@@ -1095,7 +1098,7 @@ BUILD_CFILES = \ + elf32-aarch64.c elf64-aarch64.c \ + elf32-ia64.c elf64-ia64.c \ + elf32-riscv.c elf64-riscv.c \ +- peigen.c pepigen.c pex64igen.c ++ peigen.c pepigen.c pex64igen.c pe-aarch64igen.c + + CFILES = $(SOURCE_CFILES) $(BUILD_CFILES) + SOURCE_HFILES = \ +@@ -1556,9 +1559,11 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ppc.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-aarch64.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pepigen.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pex64igen.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64igen.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppcboot.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Plo@am__quote@ +@@ -1996,6 +2001,11 @@ pepigen.c : peXXigen.c + pex64igen.c: peXXigen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pex64/g < $< >> $@ ++ ++pe-aarch64igen.c: peXXigen.c ++ echo "#line 1 \"peXXigen.c\"" > $@ ++ $(SED) -e s/XX/peAArch64/g < $< >> $@ ++ + $(BFD32_LIBS) \ + $(BFD64_LIBS) \ + $(ALL_MACHINES) \ +diff -rup binutils.orig/bfd/bfd.c binutils-2.35.2/bfd/bfd.c +--- binutils.orig/bfd/bfd.c 2021-11-30 13:38:24.344744281 +0000 ++++ binutils-2.35.2/bfd/bfd.c 2021-11-30 13:38:37.239657044 +0000 +@@ -1747,6 +1747,7 @@ bfd_get_sign_extend_vma (bfd *abfd) + || strcmp (name, "pei-i386") == 0 + || strcmp (name, "pe-x86-64") == 0 + || strcmp (name, "pei-x86-64") == 0 ++ || strcmp (name, "pei-aarch64-little") == 0 + || strcmp (name, "pe-arm-wince-little") == 0 + || strcmp (name, "pei-arm-wince-little") == 0 + || strcmp (name, "aixcoff-rs6000") == 0 +diff -rup binutils.orig/bfd/coffcode.h binutils-2.35.2/bfd/coffcode.h +--- binutils.orig/bfd/coffcode.h 2021-11-30 13:38:24.345744274 +0000 ++++ binutils-2.35.2/bfd/coffcode.h 2021-11-30 13:38:37.242657024 +0000 +@@ -2195,6 +2195,12 @@ coff_set_arch_mach_hook (bfd *abfd, void + } + break; + #endif ++#ifdef AARCH64MAGIC ++ case AARCH64MAGIC: ++ arch = bfd_arch_aarch64; ++ machine = internal_f->f_flags & F_AARCH64_ARCHITECTURE_MASK; ++ break; ++#endif + #ifdef Z80MAGIC + case Z80MAGIC: + arch = bfd_arch_z80; +@@ -2751,6 +2757,12 @@ coff_set_flags (bfd * abfd, + return TRUE; + #endif + ++#ifdef AARCH64MAGIC ++ case bfd_arch_aarch64: ++ * magicp = AARCH64MAGIC; ++ return TRUE; ++#endif ++ + #ifdef ARMMAGIC + case bfd_arch_arm: + #ifdef ARM_WINCE +@@ -3841,7 +3853,7 @@ coff_write_object_contents (bfd * abfd) + internal_f.f_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE; + #endif + +-#ifndef COFF_WITH_pex64 ++#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + #ifdef COFF_WITH_PE + internal_f.f_flags |= IMAGE_FILE_32BIT_MACHINE; + #else +@@ -3895,6 +3907,11 @@ coff_write_object_contents (bfd * abfd) + internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC; + #endif + ++#if defined(AARCH64) ++#define __A_MAGIC_SET__ ++ internal_a.magic = ZMAGIC; ++#endif ++ + #if defined MCORE_PE + #define __A_MAGIC_SET__ + internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC; +diff -rup binutils.orig/bfd/config.bfd binutils-2.35.2/bfd/config.bfd +--- binutils.orig/bfd/config.bfd 2021-11-30 13:38:24.358744186 +0000 ++++ binutils-2.35.2/bfd/config.bfd 2021-11-30 13:41:24.512525484 +0000 +@@ -256,12 +256,12 @@ case "${targ}" in + ;; + aarch64-*-linux*) + targ_defvec=aarch64_elf64_le_vec +- targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec" ++ targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec" + want64=true + ;; + aarch64_be-*-linux*) + targ_defvec=aarch64_elf64_be_vec +- targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec" ++ targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec aarch64_pei_vec" + want64=true + ;; + alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) +diff -rup binutils.orig/bfd/configure binutils-2.35.2/bfd/configure +--- binutils.orig/bfd/configure 2021-11-30 13:38:24.358744186 +0000 ++++ binutils-2.35.2/bfd/configure 2021-11-30 13:38:37.250656970 +0000 +@@ -14738,6 +14738,7 @@ do + aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;; ++ aarch64_pei_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;; + alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;; + alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; + alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; +diff -rup binutils.orig/bfd/configure.ac binutils-2.35.2/bfd/configure.ac +--- binutils.orig/bfd/configure.ac 2021-11-30 13:38:24.354744213 +0000 ++++ binutils-2.35.2/bfd/configure.ac 2021-11-30 13:38:37.251656963 +0000 +@@ -450,6 +450,7 @@ do + aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;; ++ aarch64_pei_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;; + alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;; + alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; + alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; +diff -rup binutils.orig/bfd/libpei.h binutils-2.35.2/bfd/libpei.h +--- binutils.orig/bfd/libpei.h 2021-11-30 13:38:24.355744206 +0000 ++++ binutils-2.35.2/bfd/libpei.h 2021-11-30 13:41:57.744300692 +0000 +@@ -275,6 +275,41 @@ + #define _bfd_XXi_write_codeview_record _bfd_pepi_write_codeview_record + #define _bfd_XXi_slurp_codeview_record _bfd_pepi_slurp_codeview_record + ++#elif defined COFF_WITH_peAArch64 ++ ++#define GET_OPTHDR_IMAGE_BASE H_GET_64 ++#define PUT_OPTHDR_IMAGE_BASE H_PUT_64 ++#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64 ++#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64 ++#define GET_OPTHDR_SIZE_OF_STACK_COMMIT H_GET_64 ++#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT H_PUT_64 ++#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE H_GET_64 ++#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE H_PUT_64 ++#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT H_GET_64 ++#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT H_PUT_64 ++#define GET_PDATA_ENTRY bfd_get_32 ++ ++#define _bfd_XX_bfd_copy_private_bfd_data_common _bfd_peAArch64_bfd_copy_private_bfd_data_common ++#define _bfd_XX_bfd_copy_private_section_data _bfd_peAArch64_bfd_copy_private_section_data ++#define _bfd_XX_get_symbol_info _bfd_peAArch64_get_symbol_info ++#define _bfd_XX_only_swap_filehdr_out _bfd_peAArch64_only_swap_filehdr_out ++#define _bfd_XX_print_private_bfd_data_common _bfd_peAArch64_print_private_bfd_data_common ++#define _bfd_XXi_final_link_postscript _bfd_peAArch64i_final_link_postscript ++#define _bfd_XXi_only_swap_filehdr_out _bfd_peAArch64i_only_swap_filehdr_out ++#define _bfd_XXi_swap_aouthdr_in _bfd_peAArch64i_swap_aouthdr_in ++#define _bfd_XXi_swap_aouthdr_out _bfd_peAArch64i_swap_aouthdr_out ++#define _bfd_XXi_swap_aux_in _bfd_peAArch64i_swap_aux_in ++#define _bfd_XXi_swap_aux_out _bfd_peAArch64i_swap_aux_out ++#define _bfd_XXi_swap_lineno_in _bfd_peAArch64i_swap_lineno_in ++#define _bfd_XXi_swap_lineno_out _bfd_peAArch64i_swap_lineno_out ++#define _bfd_XXi_swap_scnhdr_out _bfd_peAArch64i_swap_scnhdr_out ++#define _bfd_XXi_swap_sym_in _bfd_peAArch64i_swap_sym_in ++#define _bfd_XXi_swap_sym_out _bfd_peAArch64i_swap_sym_out ++#define _bfd_XXi_swap_debugdir_in _bfd_peAArch64i_swap_debugdir_in ++#define _bfd_XXi_swap_debugdir_out _bfd_peAArch64i_swap_debugdir_out ++#define _bfd_XXi_write_codeview_record _bfd_peAArch64i_write_codeview_record ++#define _bfd_XXi_slurp_codeview_record _bfd_peAArch64i_slurp_codeview_record ++ + #else /* !COFF_WITH_pep */ + + #define GET_OPTHDR_IMAGE_BASE H_GET_32 +@@ -368,4 +403,5 @@ bfd_boolean _bfd_pe_print_ce_compressed_ + bfd_boolean _bfd_pe64_print_ce_compressed_pdata (bfd *, void *); + bfd_boolean _bfd_pex64_print_ce_compressed_pdata (bfd *, void *); + bfd_boolean _bfd_pep_print_ce_compressed_pdata (bfd *, void *); ++bfd_boolean _bfd_peAArch64_print_ce_compressed_pdata (bfd *, void *); + +diff -rup binutils.orig/bfd/peXXigen.c binutils-2.35.2/bfd/peXXigen.c +--- binutils.orig/bfd/peXXigen.c 2021-11-30 13:38:24.352744227 +0000 ++++ binutils-2.35.2/bfd/peXXigen.c 2021-11-30 13:38:37.255656936 +0000 +@@ -60,8 +60,9 @@ + on this code has a chance of getting something accomplished without + wasting too much time. */ + +-/* This expands into COFF_WITH_pe, COFF_WITH_pep, or COFF_WITH_pex64 +- depending on whether we're compiling for straight PE or PE+. */ ++/* This expands into COFF_WITH_pe, COFF_WITH_pep, COFF_WITH_pex64 or ++ COFF_WITH_peAArch64 depending on whether we're compiling for straight ++ PE or PE+. */ + #define COFF_WITH_XX + + #include "sysdep.h" +@@ -87,6 +88,8 @@ + # include "coff/x86_64.h" + #elif defined COFF_WITH_pep + # include "coff/ia64.h" ++#elif defined COFF_WITH_peAArch64 ++# include "coff/aarch64.h" + #else + # include "coff/i386.h" + #endif +@@ -96,7 +99,7 @@ + #include "libpei.h" + #include "safe-ctype.h" + +-#if defined COFF_WITH_pep || defined COFF_WITH_pex64 ++#if defined COFF_WITH_pep || defined COFF_WITH_pex64 || defined COFF_WITH_peAArch64 + # undef AOUTSZ + # define AOUTSZ PEPAOUTSZ + # define PEAOUTHDR PEPAOUTHDR +@@ -485,7 +488,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd, + aouthdr_int->text_start = + GET_AOUTHDR_TEXT_START (abfd, aouthdr_ext->text_start); + +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + /* PE32+ does not have data_start member! */ + aouthdr_int->data_start = + GET_AOUTHDR_DATA_START (abfd, aouthdr_ext->data_start); +@@ -571,7 +574,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd, + if (aouthdr_int->entry) + { + aouthdr_int->entry += a->ImageBase; +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + aouthdr_int->entry &= 0xffffffff; + #endif + } +@@ -579,12 +582,12 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd, + if (aouthdr_int->tsize) + { + aouthdr_int->text_start += a->ImageBase; +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + aouthdr_int->text_start &= 0xffffffff; + #endif + } + +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + /* PE32+ does not have data_start member! */ + if (aouthdr_int->dsize) + { +@@ -653,7 +656,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v + if (aouthdr_in->tsize) + { + aouthdr_in->text_start -= ib; +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + aouthdr_in->text_start &= 0xffffffff; + #endif + } +@@ -661,7 +664,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v + if (aouthdr_in->dsize) + { + aouthdr_in->data_start -= ib; +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + aouthdr_in->data_start &= 0xffffffff; + #endif + } +@@ -669,7 +672,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v + if (aouthdr_in->entry) + { + aouthdr_in->entry -= ib; +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + aouthdr_in->entry &= 0xffffffff; + #endif + } +@@ -773,7 +776,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v + PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start, + aouthdr_out->standard.text_start); + +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + /* PE32+ does not have data_start member! */ + PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start, + aouthdr_out->standard.data_start); +@@ -1886,7 +1889,7 @@ pe_print_edata (bfd * abfd, void * vfile + static bfd_boolean + pe_print_pdata (bfd * abfd, void * vfile) + { +-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + # define PDATA_ROW_SIZE (3 * 8) + #else + # define PDATA_ROW_SIZE (5 * 4) +@@ -1913,7 +1916,7 @@ pe_print_pdata (bfd * abfd, void * vfile + + fprintf (file, + _("\nThe Function Table (interpreted .pdata section contents)\n")); +-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + fprintf (file, + _(" vma:\t\t\tBegin Address End Address Unwind Info\n")); + #else +@@ -1950,7 +1953,7 @@ pe_print_pdata (bfd * abfd, void * vfile + bfd_vma eh_handler; + bfd_vma eh_data; + bfd_vma prolog_end_addr; +-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) + int em_data; + #endif + +@@ -1968,7 +1971,7 @@ pe_print_pdata (bfd * abfd, void * vfile + /* We are probably into the padding of the section now. */ + break; + +-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) + em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3); + #endif + eh_handler &= ~(bfd_vma) 0x3; +@@ -1979,7 +1982,7 @@ pe_print_pdata (bfd * abfd, void * vfile + bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file); + bfd_fprintf_vma (abfd, file, end_addr); fputc (' ', file); + bfd_fprintf_vma (abfd, file, eh_handler); +-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) + fputc (' ', file); + bfd_fprintf_vma (abfd, file, eh_data); fputc (' ', file); + bfd_fprintf_vma (abfd, file, prolog_end_addr); +@@ -2894,7 +2897,7 @@ _bfd_XX_print_private_bfd_data_common (b + bfd_fprintf_vma (abfd, file, i->AddressOfEntryPoint); + fprintf (file, "\nBaseOfCode\t\t"); + bfd_fprintf_vma (abfd, file, i->BaseOfCode); +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + /* PE32+ does not have BaseOfData member! */ + fprintf (file, "\nBaseOfData\t\t"); + bfd_fprintf_vma (abfd, file, i->BaseOfData); +@@ -3163,7 +3166,7 @@ _bfd_XX_get_symbol_info (bfd * abfd, asy + coff_get_symbol_info (abfd, symbol, ret); + } + +-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64) + static int + sort_x64_pdata (const void *l, const void *r) + { +@@ -4595,7 +4598,7 @@ _bfd_XXi_final_link_postscript (bfd * ab + the TLS data directory consists of 4 pointers, followed + by two 4-byte integer. This implies that the total size + is different for 32-bit and 64-bit executables. */ +-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x18; + #else + pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x28; +@@ -4604,7 +4607,7 @@ _bfd_XXi_final_link_postscript (bfd * ab + + /* If there is a .pdata section and we have linked pdata finally, we + need to sort the entries ascending. */ +-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) ++#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64) + { + asection *sec = bfd_get_section_by_name (abfd, ".pdata"); + +Only in binutils-2.35.2/bfd: pei-aarch64.c +diff -rup binutils.orig/bfd/peicode.h binutils-2.35.2/bfd/peicode.h +--- binutils.orig/bfd/peicode.h 2021-11-30 13:38:24.354744213 +0000 ++++ binutils-2.35.2/bfd/peicode.h 2021-11-30 13:38:37.256656929 +0000 +@@ -231,7 +231,7 @@ coff_swap_scnhdr_in (bfd * abfd, void * + { + scnhdr_int->s_vaddr += pe_data (abfd)->pe_opthdr.ImageBase; + /* Do not cut upper 32-bits for 64-bit vma. */ +-#ifndef COFF_WITH_pex64 ++#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64) + scnhdr_int->s_vaddr &= 0xffffffff; + #endif + } +@@ -738,6 +738,16 @@ static jump_table jtab[] = + }, + #endif + ++#ifdef AARCH64MAGIC ++/* We don't currently support jumping to DLLs, so if ++ someone does try emit a runtime trap. Through UDF #0. */ ++ { AARCH64MAGIC, ++ { 0x00, 0x00, 0x00, 0x00 }, ++ 4, 0 ++ }, ++ ++#endif ++ + #ifdef ARMPEMAGIC + { ARMPEMAGIC, + { 0x00, 0xc0, 0x9f, 0xe5, 0x00, 0xf0, +@@ -910,7 +920,7 @@ pe_ILF_build_a_bfd (bfd * abfd, + /* See PR 20907 for a reproducer. */ + goto error_return; + +-#ifdef COFF_WITH_pex64 ++#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) + ((unsigned int *) id4->contents)[0] = ordinal; + ((unsigned int *) id4->contents)[1] = 0x80000000; + ((unsigned int *) id5->contents)[0] = ordinal; +@@ -1206,6 +1216,12 @@ pe_ILF_object_p (bfd * abfd) + #endif + break; + ++ case IMAGE_FILE_MACHINE_ARM64: ++#ifdef AARCH64MAGIC ++ magic = AARCH64MAGIC; ++#endif ++ break; ++ + case IMAGE_FILE_MACHINE_THUMB: + #ifdef THUMBPEMAGIC + { +diff -rup binutils.orig/bfd/targets.c binutils-2.35.2/bfd/targets.c +--- binutils.orig/bfd/targets.c 2021-11-30 13:38:24.354744213 +0000 ++++ binutils-2.35.2/bfd/targets.c 2021-11-30 13:38:37.257656922 +0000 +@@ -668,6 +668,7 @@ extern const bfd_target aarch64_elf64_be + extern const bfd_target aarch64_elf64_le_vec; + extern const bfd_target aarch64_elf64_le_cloudabi_vec; + extern const bfd_target aarch64_mach_o_vec; ++extern const bfd_target aarch64_pei_vec; + extern const bfd_target alpha_ecoff_le_vec; + extern const bfd_target alpha_elf64_vec; + extern const bfd_target alpha_elf64_fbsd_vec; +@@ -983,6 +984,7 @@ static const bfd_target * const _bfd_tar + &aarch64_elf64_le_vec, + &aarch64_elf64_le_cloudabi_vec, + &aarch64_mach_o_vec, ++ &aarch64_pei_vec, + #endif + + #ifdef BFD64 +diff -rup binutils.orig/binutils/NEWS binutils-2.35.2/binutils/NEWS +--- binutils.orig/binutils/NEWS 2021-11-30 13:38:23.874747460 +0000 ++++ binutils-2.35.2/binutils/NEWS 2021-11-30 13:42:31.024075560 +0000 +@@ -1,5 +1,8 @@ + -*- text -*- + ++* Support for efi-app-aarch64, efi-rtdrv-aarch64 and efi-bsdrv-aarch64 has been ++ added to objcopy in order to enable UEFI development using binutils. ++ + Changes in 2.35: + + * Changed readelf's display of symbol names when wide mode is not enabled. +diff -rup binutils.orig/binutils/objcopy.c binutils-2.35.2/binutils/objcopy.c +--- binutils.orig/binutils/objcopy.c 2021-11-30 13:38:23.874747460 +0000 ++++ binutils-2.35.2/binutils/objcopy.c 2021-11-30 13:38:37.260656902 +0000 +@@ -4950,6 +4950,13 @@ convert_efi_target (char *efi) + /* Change x86_64 to x86-64. */ + efi[7] = '-'; + } ++ else if (strcmp (efi + 4, "aarch64") == 0) ++ { ++ /* Change aarch64 to aarch64-little. */ ++ efi = (char *) xrealloc (efi, strlen (efi) + 7); ++ char *t = "aarch64-little"; ++ strcpy (efi + 4, t); ++ } + } + + /* Allocate and return a pointer to a struct section_add, initializing the +diff -rup binutils.orig/include/coff/pe.h binutils-2.35.2/include/coff/pe.h +--- binutils.orig/include/coff/pe.h 2021-11-30 13:38:23.827747778 +0000 ++++ binutils-2.35.2/include/coff/pe.h 2021-11-30 13:38:37.261656895 +0000 +@@ -132,6 +132,7 @@ + #define IMAGE_FILE_MACHINE_AM33 0x01d3 + #define IMAGE_FILE_MACHINE_AMD64 0x8664 + #define IMAGE_FILE_MACHINE_ARM 0x01c0 ++#define IMAGE_FILE_MACHINE_ARM64 0xaa64 + #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 + #define IMAGE_FILE_MACHINE_CEE 0xc0ee + #define IMAGE_FILE_MACHINE_CEF 0x0cef +--- /dev/null 2021-11-30 07:48:35.901044247 +0000 ++++ binutils-2.35.2/bfd/coff-aarch64.c 2021-11-30 13:43:11.774799879 +0000 +@@ -0,0 +1,165 @@ ++/* BFD back-end for AArch64 COFF files. ++ Copyright (C) 2021 Free Software Foundation, Inc. ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, ++ MA 02110-1301, USA. */ ++ ++ ++#ifndef COFF_WITH_peAArch64 ++#define COFF_WITH_peAArch64 ++#endif ++ ++/* Note we have to make sure not to include headers twice. ++ Not all headers are wrapped in #ifdef guards, so we define ++ PEI_HEADERS to prevent double including here. */ ++#ifndef PEI_HEADERS ++#include "sysdep.h" ++#include "bfd.h" ++#include "libbfd.h" ++#include "coff/aarch64.h" ++#include "coff/internal.h" ++#include "coff/pe.h" ++#include "libcoff.h" ++#include "libiberty.h" ++#endif ++ ++#include "libcoff.h" ++ ++/* The page size is a guess based on ELF. */ ++ ++#define COFF_PAGE_SIZE 0x1000 ++ ++/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */ ++#define OCTETS_PER_BYTE(ABFD, SEC) 1 ++ ++#ifndef PCRELOFFSET ++#define PCRELOFFSET TRUE ++#endif ++ ++/* Currently we don't handle any relocations. */ ++static reloc_howto_type pe_aarch64_std_reloc_howto[] = ++ { ++ ++ }; ++ ++#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 2 ++#define COFF_PAGE_SIZE 0x1000 ++ ++#ifndef NUM_ELEM ++#define NUM_ELEM(a) ((sizeof (a)) / sizeof ((a)[0])) ++#endif ++ ++#define NUM_RELOCS NUM_ELEM (pe_aarch64_std_reloc_howto) ++ ++#define RTYPE2HOWTO(cache_ptr, dst) \ ++ (cache_ptr)->howto = NULL ++ ++#ifndef bfd_pe_print_pdata ++#define bfd_pe_print_pdata NULL ++#endif ++ ++/* Return TRUE if this relocation should ++ appear in the output .reloc section. */ ++ ++static bfd_boolean ++in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED, ++ reloc_howto_type * howto) ++{ ++ return !howto->pc_relative; ++} ++ ++#include "coffcode.h" ++ ++/* Target vectors. */ ++const bfd_target ++#ifdef TARGET_SYM ++ TARGET_SYM = ++#else ++ aarch64_pei_vec = ++#endif ++{ ++#ifdef TARGET_NAME ++ TARGET_NAME, ++#else ++ "pei-aarch64-little", /* Name. */ ++#endif ++ bfd_target_coff_flavour, ++ BFD_ENDIAN_LITTLE, /* Data byte order is little. */ ++ BFD_ENDIAN_LITTLE, /* Header byte order is little. */ ++ ++ (HAS_RELOC | EXEC_P /* Object flags. */ ++ | HAS_LINENO | HAS_DEBUG ++ | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS), ++ ++ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */ ++#if defined(COFF_WITH_PE) ++ | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING ++#endif ++ | SEC_CODE | SEC_DATA | SEC_EXCLUDE ), ++ ++#ifdef TARGET_UNDERSCORE ++ TARGET_UNDERSCORE, /* Leading underscore. */ ++#else ++ 0, /* Leading underscore. */ ++#endif ++ '/', /* Ar_pad_char. */ ++ 15, /* Ar_max_namelen. */ ++ 0, /* match priority. */ ++ ++ /* Data conversion functions. */ ++ bfd_getl64, bfd_getl_signed_64, bfd_putl64, ++ bfd_getl32, bfd_getl_signed_32, bfd_putl32, ++ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ ++ /* Header conversion functions. */ ++ bfd_getl64, bfd_getl_signed_64, bfd_putl64, ++ bfd_getl32, bfd_getl_signed_32, bfd_putl32, ++ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ ++ ++ /* Note that we allow an object file to be treated as a core file as well. */ ++ { /* bfd_check_format. */ ++ _bfd_dummy_target, ++ coff_object_p, ++ bfd_generic_archive_p, ++ coff_object_p ++ }, ++ { /* bfd_set_format. */ ++ _bfd_bool_bfd_false_error, ++ coff_mkobject, ++ _bfd_generic_mkarchive, ++ _bfd_bool_bfd_false_error ++ }, ++ { /* bfd_write_contents. */ ++ _bfd_bool_bfd_false_error, ++ coff_write_object_contents, ++ _bfd_write_archive_contents, ++ _bfd_bool_bfd_false_error ++ }, ++ ++ BFD_JUMP_TABLE_GENERIC (coff), ++ BFD_JUMP_TABLE_COPY (coff), ++ BFD_JUMP_TABLE_CORE (_bfd_nocore), ++ BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), ++ BFD_JUMP_TABLE_SYMBOLS (coff), ++ BFD_JUMP_TABLE_RELOCS (coff), ++ BFD_JUMP_TABLE_WRITE (coff), ++ BFD_JUMP_TABLE_LINK (coff), ++ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), ++ ++ NULL, ++ ++ COFF_SWAP_TABLE ++}; +--- /dev/null 2021-11-30 07:48:35.901044247 +0000 ++++ binutils-2.35.2/include/coff/aarch64.h 2021-11-30 13:38:37.261656895 +0000 +@@ -0,0 +1,63 @@ ++/* AArch64 COFF support for BFD. ++ Copyright (C) 2021 Free Software Foundation, Inc. ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ ++ ++#define COFFAARCH64 1 ++ ++#define L_LNNO_SIZE 2 ++#define INCLUDE_COMDAT_FIELDS_IN_AUXENT ++#include "coff/external.h" ++ ++#define F_AARCH64_ARCHITECTURE_MASK (0x4000) ++ ++#define AARCH64MAGIC 0xaa64 /* From Microsoft specification. */ ++ ++#undef BADMAG ++#define BADMAG(x) ((x).f_magic != AARCH64MAGIC) ++#define AARCH64 1 /* Customize coffcode.h. */ ++ ++#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b ++ ++#define OMAGIC 0404 /* Object files, eg as output. */ ++#define ZMAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Demand load format, eg normal ld output 0x10b. */ ++#define STMAGIC 0401 /* Target shlib. */ ++#define SHMAGIC 0443 /* Host shlib. */ ++ ++/* define some NT default values */ ++/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */ ++#define NT_SECTION_ALIGNMENT 0x1000 ++#define NT_FILE_ALIGNMENT 0x200 ++#define NT_DEF_RESERVE 0x100000 ++#define NT_DEF_COMMIT 0x1000 ++ ++/* We use the .rdata section to hold read only data. */ ++#define _LIT ".rdata" ++ ++/********************** RELOCATION DIRECTIVES **********************/ ++struct external_reloc ++{ ++ char r_vaddr[4]; ++ char r_symndx[4]; ++ char r_type[2]; ++ char r_offset[4]; ++}; ++ ++#define RELOC struct external_reloc ++#define RELSZ 14 ++ ++#define ARM_NOTE_SECTION ".note" +--- /dev/null 2021-11-30 07:48:35.901044247 +0000 ++++ binutils-2.35.2/binutils/testsuite/binutils-all/aarch64/pei-aarch64-little.s 2021-11-30 13:38:37.260656902 +0000 +@@ -0,0 +1,42 @@ ++ .arch armv8-a ++ .text ++ .align 2 ++ .global foo ++ .type foo, %function ++foo: ++.LFB0: ++ .cfi_startproc ++ sub sp, sp, #16 ++ .cfi_def_cfa_offset 16 ++ str w0, [sp, 12] ++ ldr w0, [sp, 12] ++ mul w0, w0, w0 ++ add sp, sp, 16 ++ .cfi_def_cfa_offset 0 ++ ret ++ .cfi_endproc ++.LFE0: ++ .size foo, .-foo ++ .align 2 ++ .global main ++ .type main, %function ++main: ++.LFB1: ++ .cfi_startproc ++ stp x29, x30, [sp, -16]! ++ .cfi_def_cfa_offset 16 ++ .cfi_offset 29, -16 ++ .cfi_offset 30, -8 ++ mov x29, sp ++ mov w0, 5 ++ bl foo ++ ldp x29, x30, [sp], 16 ++ .cfi_restore 30 ++ .cfi_restore 29 ++ .cfi_def_cfa_offset 0 ++ ret ++ .cfi_endproc ++.LFE1: ++ .size main, .-main ++ .ident "GCC: (fsf-trunk.2870) 12.0.0 20210930 (experimental)" ++ .section .note.GNU-stack,"",@progbits +--- /dev/null 2021-11-30 07:48:35.901044247 +0000 ++++ binutils-2.35.2/binutils/testsuite/binutils-all/aarch64/pei-aarch64-little.d 2021-11-30 13:38:37.260656902 +0000 +@@ -0,0 +1,16 @@ ++#skip: aarch64_be-*-* ++#ld: -e0 ++#PROG: objcopy ++#objcopy: -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* -j .reloc --target=efi-app-aarch64 ++#objdump: -h -f ++#name: Check if efi app format is recognized ++ ++.*: file format pei-aarch64-little ++architecture: aarch64, flags 0x00000132: ++EXEC_P, HAS_SYMS, HAS_LOCALS, D_PAGED ++start address 0x0000000000000000 ++ ++Sections: ++Idx Name Size VMA LMA File off Algn ++ 0 \.text 00000030 0[^ ]+ 0[^ ]+ 0[^ ]+ 2\*\*2 ++ CONTENTS, ALLOC, LOAD, READONLY, CODE +--- /dev/null 2021-11-30 07:48:35.901044247 +0000 ++++ binutils-2.35.2/bfd/pei-aarch64.c 2021-11-30 13:38:37.255656936 +0000 +@@ -0,0 +1,75 @@ ++/* BFD back-end for AArch64 PE IMAGE COFF files. ++ Copyright (C) 2021 Free Software Foundation, Inc. ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, ++ MA 02110-1301, USA. */ ++ ++#include "sysdep.h" ++#include "bfd.h" ++ ++#define TARGET_SYM aarch64_pei_vec ++#define TARGET_NAME "pei-aarch64-little" ++#define TARGET_ARCHITECTURE bfd_arch_aarch64 ++#define TARGET_PAGESIZE 4096 ++#define TARGET_BIG_ENDIAN 0 ++#define TARGET_ARCHIVE 0 ++#define TARGET_PRIORITY 0 ++ ++#define COFF_IMAGE_WITH_PE ++/* Rename the above into.. */ ++#define COFF_WITH_peAArch64 ++#define COFF_WITH_PE ++#define PCRELOFFSET TRUE ++ ++/* Long section names not allowed in executable images, only object files. */ ++#define COFF_LONG_SECTION_NAMES 0 ++ ++#define COFF_SECTION_ALIGNMENT_ENTRIES \ ++{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ ++{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ ++{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ ++{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ ++{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ ++{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ ++{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \ ++{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \ ++ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 } ++ ++#define PEI_HEADERS ++#include "sysdep.h" ++#include "bfd.h" ++#include "libbfd.h" ++#include "coff/aarch64.h" ++#include "coff/internal.h" ++#include "coff/pe.h" ++#include "libcoff.h" ++#include "libpei.h" ++#include "libiberty.h" ++ ++/* Make sure we're setting a 64-bit format. */ ++#undef AOUTSZ ++#define AOUTSZ PEPAOUTSZ ++#define PEAOUTHDR PEPAOUTHDR ++ ++#include "coff-aarch64.c" diff --git a/SOURCES/binutils-testsuite-failures.patch b/SOURCES/binutils-testsuite-failures.patch index 6d5ab06..d457dcf 100644 --- a/SOURCES/binutils-testsuite-failures.patch +++ b/SOURCES/binutils-testsuite-failures.patch @@ -1205,3 +1205,13 @@ diff -rup binutils.orig/ld/testsuite/ld-powerpc/tlsexe32.r binutils-2.35.1/ld/te if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } { setup_xfail "sparc*-*-linux*" } +--- binutils.orig/ld/testsuite/ld-elfvsb/elfvsb.exp 2021-11-24 11:18:05.490704207 +0000 ++++ binutils-2.35.2/ld/testsuite/ld-elfvsb/elfvsb.exp 2021-11-24 11:20:09.644272756 +0000 +@@ -347,6 +347,7 @@ proc visibility_run {visibility} { + || [ string match $visibility "protected_weak" ] + || [ string match $visibility "normal" ] } { + setup_xfail "powerpc-*-linux*" ++ setup_xfail "s390x-*-linux*" + if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } { + setup_xfail "sparc*-*-linux*" + } diff --git a/SPECS/binutils.spec b/SPECS/binutils.spec index 9e869cc..8ffd02f 100644 --- a/SPECS/binutils.spec +++ b/SPECS/binutils.spec @@ -39,7 +39,7 @@ Summary: A GNU collection of binary utilities Name: binutils%{?name_cross}%{?_with_debug:-debug} Version: 2.35.2 -Release: 10%{?dist} +Release: 13%{?dist} License: GPLv3+ URL: https://sourceware.org/binutils @@ -390,6 +390,10 @@ Patch48: binutils-dwarf-5-dir0.patch # Lifetime: Fixed in 2.38 (maybe) Patch49: binutils.unicode.patch +# Purpose: Add support for an AArch64-EFI target. +# Lifetime: Fixed in 2.38 +Patch50: binutils-AArch64-EFI.patch + #---------------------------------------------------------------------------- Provides: bundled(libiberty) @@ -885,6 +889,9 @@ if [ -x gold/ld-new ]; then cat %{?cross}gold.lang >> %{?cross}binutils.lang fi +# Stop check-rpaths from complaining about standard runpaths. +export QA_RPATHS=0x0001 + #---------------------------------------------------------------------------- %post @@ -975,6 +982,15 @@ exit 0 #---------------------------------------------------------------------------- %changelog +* Tue Nov 30 2021 Nick Clifton - 2.32.2-13 +- Add support for an AArch64-EFI target. (#2027517) + +* Fri Nov 26 2021 Nick Clifton - 2.32.2-12 +- Define QA_RPATH to stop complaints about valid DT_RPATH tags. (#2026296) + +* Wed Nov 24 2021 Nick Clifton - 2.32.2-11 +- Fix linker testsuite failures for s390x. (#2026295) + * Mon Oct 25 2021 Nick Clifton - 2.32.2-10 - Add ability to control the display of unicode characters. (#2009190)