public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/7] Fix size of external_reloc for pe-aarch64
@ 2023-01-06  1:25 Mark Harmstone
  2023-01-06  1:25 ` [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64 Mark Harmstone
                   ` (6 more replies)
  0 siblings, 7 replies; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

Resubmission of aarch64-w64-mingw32 patches against Nick's arm64pe patch.

---
 bfd/coff-aarch64.c     | 4 ----
 include/coff/aarch64.h | 3 +--
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/bfd/coff-aarch64.c b/bfd/coff-aarch64.c
index 8a514b278ee..236cbb79ffb 100644
--- a/bfd/coff-aarch64.c
+++ b/bfd/coff-aarch64.c
@@ -188,10 +188,6 @@ coff_aarch64_rtype_lookup (unsigned int code)
 #define bfd_pe_print_pdata      NULL
 #endif
 
-/* Handle include/coff/aarch64.h external_reloc.  */
-#define SWAP_IN_RELOC_OFFSET	H_GET_32
-#define SWAP_OUT_RELOC_OFFSET	H_PUT_32
-
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
diff --git a/include/coff/aarch64.h b/include/coff/aarch64.h
index 7592661553f..4616cfef2b8 100644
--- a/include/coff/aarch64.h
+++ b/include/coff/aarch64.h
@@ -54,11 +54,10 @@ 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 RELSZ 10
 
 /* ARM64 relocations types. */
 
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
@ 2023-01-06  1:25 ` Mark Harmstone
  2023-01-06  8:11   ` Jan Beulich
  2023-01-06  1:25 ` [PATCH 3/7] Skip big-obj test for pe-aarch64 Mark Harmstone
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

---
 binutils/testsuite/binutils-all/objcopy.exp                  | 1 +
 gas/testsuite/gas/aarch64/adr_1.d                            | 1 +
 gas/testsuite/gas/aarch64/advsimd-mov-bad.d                  | 1 +
 gas/testsuite/gas/aarch64/b_1.d                              | 1 +
 gas/testsuite/gas/aarch64/beq_1.d                            | 1 +
 gas/testsuite/gas/aarch64/bfloat16-directive-be.d            | 1 +
 gas/testsuite/gas/aarch64/bfloat16-directive-le.d            | 1 +
 gas/testsuite/gas/aarch64/codealign.d                        | 2 +-
 gas/testsuite/gas/aarch64/codealign_1.d                      | 1 +
 gas/testsuite/gas/aarch64/dwarf.d                            | 1 +
 gas/testsuite/gas/aarch64/ilp32-basic.d                      | 1 +
 gas/testsuite/gas/aarch64/int-insns.d                        | 1 +
 gas/testsuite/gas/aarch64/ldr_1.d                            | 1 +
 gas/testsuite/gas/aarch64/litpool.d                          | 2 +-
 gas/testsuite/gas/aarch64/mapmisc.d                          | 2 +-
 gas/testsuite/gas/aarch64/mapping.d                          | 2 +-
 gas/testsuite/gas/aarch64/mapping2.d                         | 2 +-
 gas/testsuite/gas/aarch64/mapping3.d                         | 2 +-
 gas/testsuite/gas/aarch64/mapping4.d                         | 2 +-
 gas/testsuite/gas/aarch64/mapping_5.d                        | 1 +
 gas/testsuite/gas/aarch64/mapping_6.d                        | 1 +
 gas/testsuite/gas/aarch64/mops_invalid_2.d                   | 1 +
 gas/testsuite/gas/aarch64/movw_label.d                       | 1 +
 gas/testsuite/gas/aarch64/optional.d                         | 1 +
 gas/testsuite/gas/aarch64/pac_ab_key.d                       | 1 +
 gas/testsuite/gas/aarch64/pac_negate_ra_state.d              | 1 +
 gas/testsuite/gas/aarch64/pr20364.d                          | 1 +
 gas/testsuite/gas/aarch64/pr27217.d                          | 1 +
 gas/testsuite/gas/aarch64/pr29519.d                          | 1 +
 gas/testsuite/gas/aarch64/programmer-friendly.d              | 1 +
 gas/testsuite/gas/aarch64/reloc-data.d                       | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g0-ilp32.d            | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g0.d                  | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc-ilp32.d         | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc.d               | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g1-ilp32.d            | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g1.d                  | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g1_nc.d               | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_g2.d                  | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_hi12-ilp32.d          | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_hi12.d                | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12-1.d              | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ilp32-1.d        | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst16.d         | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst32.d         | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst64.d         | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst8.d          | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ilp32.d       | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst16.d      | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst32.d      | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst64.d      | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst8.d       | 1 +
 gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc.d             | 1 +
 gas/testsuite/gas/aarch64/reloc-gotoff_g0_nc.d               | 1 +
 gas/testsuite/gas/aarch64/reloc-gotoff_g1.d                  | 1 +
 gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d             | 1 +
 gas/testsuite/gas/aarch64/reloc-gottprel_g1.d                | 1 +
 gas/testsuite/gas/aarch64/reloc-insn.d                       | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g0.d                    | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g0_nc.d                 | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g1.d                    | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g1_nc.d                 | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g2.d                    | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g2_nc.d                 | 1 +
 gas/testsuite/gas/aarch64/reloc-prel_g3.d                    | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g0_nc.d          | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g1.d             | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsgd_g0_nc.d                | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsgd_g1.d                   | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsldm-1.d                   | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsldm-ilp32-1.d             | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d              | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d        | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-1.d           | 1 +
 gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-ilp32-1.d     | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16-ilp32.d    | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16.d          | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32-ilp32.d    | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32.d          | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64-ilp32.d    | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64.d          | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8-ilp32.d     | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8.d           | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16-ilp32.d | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16.d       | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32-ilp32.d | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32.d       | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64-ilp32.d | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64.d       | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8-ilp32.d  | 1 +
 gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8.d        | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_1.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_10.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_11.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_12.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_13.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_14.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_15.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_16.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_17.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_18.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_19.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_2.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_20.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_21.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_22.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_23.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_24.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_25.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_26.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_27.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_28.d                   | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_3.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_4.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_5.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_6.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_7.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_8.d                    | 1 +
 gas/testsuite/gas/aarch64/sve-movprfx_9.d                    | 1 +
 gas/testsuite/gas/aarch64/symbol-variant_pcs-1.d             | 1 +
 gas/testsuite/gas/aarch64/symbol-variant_pcs-2.d             | 1 +
 gas/testsuite/gas/aarch64/symbol-variant_pcs-3.d             | 1 +
 gas/testsuite/gas/aarch64/system.d                           | 1 +
 gas/testsuite/gas/aarch64/tail_padding.d                     | 1 +
 gas/testsuite/gas/aarch64/tbz_1.d                            | 1 +
 gas/testsuite/gas/aarch64/tls-desc.d                         | 1 +
 gas/testsuite/gas/aarch64/tls.d                              | 1 +
 127 files changed, 127 insertions(+), 7 deletions(-)

diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index 77af5ba84ba..c74853cf3ba 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -1411,6 +1411,7 @@ proc objcopy_test_without_global_symbol { } {
 # The AArch64 and ARM targets preserve mapping symbols
 # in object files, so they will fail this test.
 setup_xfail aarch64*-*-* arm*-*-*
+clear_xfail aarch64*-*-pe* aarch64*-*-mingw*
 
 objcopy_test_without_global_symbol
 
diff --git a/gas/testsuite/gas/aarch64/adr_1.d b/gas/testsuite/gas/aarch64/adr_1.d
index 4b5cc56144b..09ac6abe2a6 100644
--- a/gas/testsuite/gas/aarch64/adr_1.d
+++ b/gas/testsuite/gas/aarch64/adr_1.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
index 6ca98873ac2..02ac2a12715 100644
--- a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
+++ b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
@@ -1,5 +1,6 @@
 #source: advsimd-mov-bad.s
 #readelf: -s --wide
+#notarget: *-*-pe* *-*-mingw*
 
 Symbol table '.symtab' contains 6 entries:
  +Num:.*
diff --git a/gas/testsuite/gas/aarch64/b_1.d b/gas/testsuite/gas/aarch64/b_1.d
index 4815decb0c6..6268a8f9aec 100644
--- a/gas/testsuite/gas/aarch64/b_1.d
+++ b/gas/testsuite/gas/aarch64/b_1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/beq_1.d b/gas/testsuite/gas/aarch64/beq_1.d
index 525a17e75e5..4571e39e608 100644
--- a/gas/testsuite/gas/aarch64/beq_1.d
+++ b/gas/testsuite/gas/aarch64/beq_1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/bfloat16-directive-be.d b/gas/testsuite/gas/aarch64/bfloat16-directive-be.d
index 132d04e44fa..fad1c832f4d 100644
--- a/gas/testsuite/gas/aarch64/bfloat16-directive-be.d
+++ b/gas/testsuite/gas/aarch64/bfloat16-directive-be.d
@@ -2,6 +2,7 @@
 # source: bfloat16-directive.s
 # as: -mbig-endian
 # objdump: -s --section=.data
+#notarget: *-*-pe* *-*-mingw*
 
 .*: +file format .*
 
diff --git a/gas/testsuite/gas/aarch64/bfloat16-directive-le.d b/gas/testsuite/gas/aarch64/bfloat16-directive-le.d
index f22d610d84b..af96f4ad7b5 100644
--- a/gas/testsuite/gas/aarch64/bfloat16-directive-le.d
+++ b/gas/testsuite/gas/aarch64/bfloat16-directive-le.d
@@ -2,6 +2,7 @@
 # source: bfloat16-directive.s
 # as: -mlittle-endian
 # objdump: -s --section=.data
+#notarget: *-*-pe* *-*-mingw*
 
 .*: +file format .*
 
diff --git a/gas/testsuite/gas/aarch64/codealign.d b/gas/testsuite/gas/aarch64/codealign.d
index a44c1073e09..a3db195fc0e 100644
--- a/gas/testsuite/gas/aarch64/codealign.d
+++ b/gas/testsuite/gas/aarch64/codealign.d
@@ -2,7 +2,7 @@
 #as: --generate-missing-build-notes=no
 # Minimum code alignment should be set.
 # This test is only valid on ELF based ports.
-#notarget: *-*-pe *-*-wince
+#notarget: *-*-pe* *-*-wince *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/codealign_1.d b/gas/testsuite/gas/aarch64/codealign_1.d
index c4dc5270195..2b9819f174c 100644
--- a/gas/testsuite/gas/aarch64/codealign_1.d
+++ b/gas/testsuite/gas/aarch64/codealign_1.d
@@ -1,6 +1,7 @@
 #objdump: --section-headers
 #as: --generate-missing-build-notes=no
 # Minimum code alignment should be set.
+#notarget: *-*-pe* *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/dwarf.d b/gas/testsuite/gas/aarch64/dwarf.d
index 9e4184ab6e8..98c202e3613 100644
--- a/gas/testsuite/gas/aarch64/dwarf.d
+++ b/gas/testsuite/gas/aarch64/dwarf.d
@@ -1,5 +1,6 @@
 #readelf: -s --debug-dump=aranges
 #as: -g --generate-missing-build-notes=no
+#notarget: *-*-pe* *-*-mingw*
 
 Symbol table '.symtab' contains 11 entries:
    Num:[ ]+Value[ ]+Size[ ]+Type[ ]+Bind[ ]+Vis[ ]+Ndx[ ]+Name
diff --git a/gas/testsuite/gas/aarch64/ilp32-basic.d b/gas/testsuite/gas/aarch64/ilp32-basic.d
index 876f28cba28..9adb6876ac0 100644
--- a/gas/testsuite/gas/aarch64/ilp32-basic.d
+++ b/gas/testsuite/gas/aarch64/ilp32-basic.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format elf32-.*aarch64
 
diff --git a/gas/testsuite/gas/aarch64/int-insns.d b/gas/testsuite/gas/aarch64/int-insns.d
index 76f937c4fbf..9fe31551bde 100644
--- a/gas/testsuite/gas/aarch64/int-insns.d
+++ b/gas/testsuite/gas/aarch64/int-insns.d
@@ -1,5 +1,6 @@
 #objdump: -dr
 #as: -march=armv8-a -mabi=lp64
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/ldr_1.d b/gas/testsuite/gas/aarch64/ldr_1.d
index f68b01d6838..399edd63672 100644
--- a/gas/testsuite/gas/aarch64/ldr_1.d
+++ b/gas/testsuite/gas/aarch64/ldr_1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/litpool.d b/gas/testsuite/gas/aarch64/litpool.d
index e37e07df22f..e0e0e3a30dd 100644
--- a/gas/testsuite/gas/aarch64/litpool.d
+++ b/gas/testsuite/gas/aarch64/litpool.d
@@ -1,7 +1,7 @@
 #objdump: -d
 #name: AArch64 Bignums in Literal Pool (PR 16688)
 # This test is only valid on ELF based ports.
-#notarget: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/mapmisc.d b/gas/testsuite/gas/aarch64/mapmisc.d
index 95dcd81a0cc..395e8b7b6ef 100644
--- a/gas/testsuite/gas/aarch64/mapmisc.d
+++ b/gas/testsuite/gas/aarch64/mapmisc.d
@@ -3,7 +3,7 @@
 #name: AArch64 Mapping Symbols for miscellaneous directives
 #source: mapmisc.s
 # This test is only valid on ELF based ports.
-#notarget: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-mingw*
 
 
 .*: +file format .*aarch64.*
diff --git a/gas/testsuite/gas/aarch64/mapping.d b/gas/testsuite/gas/aarch64/mapping.d
index d23c0fdbd54..c0255bf7d15 100644
--- a/gas/testsuite/gas/aarch64/mapping.d
+++ b/gas/testsuite/gas/aarch64/mapping.d
@@ -2,7 +2,7 @@
 #as: --generate-missing-build-notes=no
 #name: AArch64 Mapping Symbols
 # This test is only valid on ELF based ports.
-#notarget: *-*-pe *-*-wince
+#notarget: *-*-pe* *-*-wince *-*-mingw*
 
 # Test the generation of AArch64 ELF Mapping Symbols
 
diff --git a/gas/testsuite/gas/aarch64/mapping2.d b/gas/testsuite/gas/aarch64/mapping2.d
index 4ad1a079aa5..927a5cc80a2 100644
--- a/gas/testsuite/gas/aarch64/mapping2.d
+++ b/gas/testsuite/gas/aarch64/mapping2.d
@@ -2,7 +2,7 @@
 #as: --generate-missing-build-notes=no
 #name: AArch64 Mapping Symbols Test 2
 # This test is only valid on ELF based ports.
-#notarget: *-*-pe *-*-wince
+#notarget: *-*-pe* *-*-wince *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/mapping3.d b/gas/testsuite/gas/aarch64/mapping3.d
index e6e087c23c7..0ea19cb127e 100644
--- a/gas/testsuite/gas/aarch64/mapping3.d
+++ b/gas/testsuite/gas/aarch64/mapping3.d
@@ -2,7 +2,7 @@
 #as: --generate-missing-build-notes=no
 #name: AArch64 Mapping Symbols Test 3
 # This test is only valid on ELF based ports.
-#notarget: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/mapping4.d b/gas/testsuite/gas/aarch64/mapping4.d
index 0012f4efd3b..26c6cb9566e 100644
--- a/gas/testsuite/gas/aarch64/mapping4.d
+++ b/gas/testsuite/gas/aarch64/mapping4.d
@@ -2,7 +2,7 @@
 #as: --generate-missing-build-notes=no
 #name: AArch64 Mapping Symbols Test 4
 # This test is only valid on ELF based ports.
-#notarget: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/mapping_5.d b/gas/testsuite/gas/aarch64/mapping_5.d
index 04263484ae6..1c2ae76aef3 100644
--- a/gas/testsuite/gas/aarch64/mapping_5.d
+++ b/gas/testsuite/gas/aarch64/mapping_5.d
@@ -1,6 +1,7 @@
 #objdump: --syms --special-syms
 #as: --generate-missing-build-notes=no
 #name: AArch64 Mapping Symbols Test 5
+#notarget: *-*-pe* *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/mapping_6.d b/gas/testsuite/gas/aarch64/mapping_6.d
index 96d0ed663c9..9da44901a65 100644
--- a/gas/testsuite/gas/aarch64/mapping_6.d
+++ b/gas/testsuite/gas/aarch64/mapping_6.d
@@ -1,6 +1,7 @@
 #objdump: --syms --special-syms
 #as: --generate-missing-build-notes=no
 #name: AArch64 Mapping Symbols Test 6
+#notarget: *-*-pe* *-*-mingw*
 
 .*: +file format.*aarch64.*
 
diff --git a/gas/testsuite/gas/aarch64/mops_invalid_2.d b/gas/testsuite/gas/aarch64/mops_invalid_2.d
index f5e7228f6e7..8acdc8edfb4 100644
--- a/gas/testsuite/gas/aarch64/mops_invalid_2.d
+++ b/gas/testsuite/gas/aarch64/mops_invalid_2.d
@@ -1,5 +1,6 @@
 # warning_output: mops_invalid_2.l
 # objdump: -dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .*
 
diff --git a/gas/testsuite/gas/aarch64/movw_label.d b/gas/testsuite/gas/aarch64/movw_label.d
index 8466570b33c..cff34433756 100644
--- a/gas/testsuite/gas/aarch64/movw_label.d
+++ b/gas/testsuite/gas/aarch64/movw_label.d
@@ -1,5 +1,6 @@
 #objdump: -dr
 #name: movw relocation symbol name
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/optional.d b/gas/testsuite/gas/aarch64/optional.d
index b2a123d55a2..c9971bbaf97 100644
--- a/gas/testsuite/gas/aarch64/optional.d
+++ b/gas/testsuite/gas/aarch64/optional.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/pac_ab_key.d b/gas/testsuite/gas/aarch64/pac_ab_key.d
index 5e7496a86bd..4a31fbfe631 100644
--- a/gas/testsuite/gas/aarch64/pac_ab_key.d
+++ b/gas/testsuite/gas/aarch64/pac_ab_key.d
@@ -2,6 +2,7 @@
 # Test assembling a file with functions signed by two different pointer
 # authentication keys. It must interpret .cfi_b_key_frame properly and emit a
 # 'B' character into the correct CIE's augmentation string.
+#notarget: *-*-pe* *-*-mingw*
 
 .+:     file .+
 
diff --git a/gas/testsuite/gas/aarch64/pac_negate_ra_state.d b/gas/testsuite/gas/aarch64/pac_negate_ra_state.d
index 62717767608..3ca21522734 100644
--- a/gas/testsuite/gas/aarch64/pac_negate_ra_state.d
+++ b/gas/testsuite/gas/aarch64/pac_negate_ra_state.d
@@ -1,4 +1,5 @@
 #objdump: --dwarf=frames
+#notarget: *-*-pe* *-*-mingw*
 
 .+:     file .+
 
diff --git a/gas/testsuite/gas/aarch64/pr20364.d b/gas/testsuite/gas/aarch64/pr20364.d
index babcff10304..1b77a9d4ceb 100644
--- a/gas/testsuite/gas/aarch64/pr20364.d
+++ b/gas/testsuite/gas/aarch64/pr20364.d
@@ -1,6 +1,7 @@
 # Check that ".align <size>, <fill>" does not set the mapping state to DATA, causing unnecessary frag generation.
 #name: PR20364 
 #objdump: -d
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/pr27217.d b/gas/testsuite/gas/aarch64/pr27217.d
index 3397dfa2481..24434824323 100644
--- a/gas/testsuite/gas/aarch64/pr27217.d
+++ b/gas/testsuite/gas/aarch64/pr27217.d
@@ -1,6 +1,7 @@
 # Check that expressions that generate relocations work when the symbol is a constant.
 #name: PR27217
 #objdump: -rd
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/pr29519.d b/gas/testsuite/gas/aarch64/pr29519.d
index 4bfea09bee0..c70e05f95ae 100644
--- a/gas/testsuite/gas/aarch64/pr29519.d
+++ b/gas/testsuite/gas/aarch64/pr29519.d
@@ -1,6 +1,7 @@
 # Check that AArch64 specific pseudo-ops can be separated by the ; line separator character.
 #name: PR29519 (Separating AArch64 pseudo-ops with ;)
 #objdump: -rd
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/programmer-friendly.d b/gas/testsuite/gas/aarch64/programmer-friendly.d
index 8fa6aa70dbf..20ace20f707 100644
--- a/gas/testsuite/gas/aarch64/programmer-friendly.d
+++ b/gas/testsuite/gas/aarch64/programmer-friendly.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-data.d b/gas/testsuite/gas/aarch64/reloc-data.d
index 7bcf300f78c..9976585e40e 100644
--- a/gas/testsuite/gas/aarch64/reloc-data.d
+++ b/gas/testsuite/gas/aarch64/reloc-data.d
@@ -1,6 +1,7 @@
 #as: -mabi=lp64
 #objdump: -dr
 #skip: aarch64_be-*-*
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g0-ilp32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g0-ilp32.d
index 44b66762673..7a4e5c45c0e 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g0-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g0-ilp32.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g0.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g0.d
index 6a6ec00a56d..fc25265732e 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g0.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g0.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc-ilp32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc-ilp32.d
index c319e3d8dc8..7a944be92df 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc-ilp32.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc.d
index 5d7f6cf3d5d..4da4da340fb 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g0_nc.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g1-ilp32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g1-ilp32.d
index 6a918065dfd..0b87c2f691c 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g1-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g1-ilp32.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g1.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g1.d
index c5995f5541a..abee16b1d21 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g1.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g1_nc.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g1_nc.d
index 739eaa313d6..0782c758f70 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g1_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g1_nc.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_g2.d b/gas/testsuite/gas/aarch64/reloc-dtprel_g2.d
index 00d278b53d1..6a9d4e6de6b 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_g2.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_g2.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_hi12-ilp32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_hi12-ilp32.d
index 0235aeb9729..76479531db2 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_hi12-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_hi12-ilp32.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_hi12.d b/gas/testsuite/gas/aarch64/reloc-dtprel_hi12.d
index f904850a9ed..f29c94c0863 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_hi12.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_hi12.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-1.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-1.d
index ee1f504baf5..61465b4087c 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ilp32-1.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ilp32-1.d
index a44f9d23066..403bdbad126 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ilp32-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ilp32-1.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst16.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst16.d
index cd793bb8b12..b4bcdb3691d 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst16.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst16.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst32.d
index ab5d869baaa..1db57093e42 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst32.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst64.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst64.d
index fa46d7b1f56..14032a05570 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst64.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst64.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst8.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst8.d
index f754449701e..f397cbc9b62 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst8.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12-ldst8.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ilp32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ilp32.d
index b232b2f51fb..30501411c71 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ilp32.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst16.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst16.d
index 62ff7ab420e..5c457849bae 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst16.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst16.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst32.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst32.d
index 78074f5edb2..a2600f5e7f4 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst32.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst32.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst64.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst64.d
index 8eac3bd99d5..dcdca5e3fba 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst64.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst64.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst8.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst8.d
index 02695047fc9..4609ce91836 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst8.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc-ldst8.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc.d b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc.d
index 0a231f9f062..7f04bb82059 100644
--- a/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-dtprel_lo12_nc.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-gotoff_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-gotoff_g0_nc.d
index 858898a0748..4ceb95986ba 100644
--- a/gas/testsuite/gas/aarch64/reloc-gotoff_g0_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-gotoff_g0_nc.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-gotoff_g1.d b/gas/testsuite/gas/aarch64/reloc-gotoff_g1.d
index e6a68f06e47..2599b85a84c 100644
--- a/gas/testsuite/gas/aarch64/reloc-gotoff_g1.d
+++ b/gas/testsuite/gas/aarch64/reloc-gotoff_g1.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d
index bae4e37b27d..46005c976db 100644
--- a/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d b/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d
index 3061c2f5007..770c4e0a932 100644
--- a/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d
+++ b/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-insn.d b/gas/testsuite/gas/aarch64/reloc-insn.d
index 0f3b4143d96..4626b6f57a3 100644
--- a/gas/testsuite/gas/aarch64/reloc-insn.d
+++ b/gas/testsuite/gas/aarch64/reloc-insn.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g0.d b/gas/testsuite/gas/aarch64/reloc-prel_g0.d
index c5a7685b381..79667fed4c7 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g0.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g0.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-prel_g0_nc.d
index f7a29194be2..7fd954cb0ac 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g0_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g0_nc.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g1.d b/gas/testsuite/gas/aarch64/reloc-prel_g1.d
index 63c91e0d7e8..4295fcab0fe 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g1.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g1_nc.d b/gas/testsuite/gas/aarch64/reloc-prel_g1_nc.d
index 4c0a1d943cc..438d9b3b7d2 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g1_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g1_nc.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g2.d b/gas/testsuite/gas/aarch64/reloc-prel_g2.d
index 80d18704a57..e4c6cd21cc2 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g2.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g2.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g2_nc.d b/gas/testsuite/gas/aarch64/reloc-prel_g2_nc.d
index dc3c58e44fd..8aeab101059 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g2_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g2_nc.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-prel_g3.d b/gas/testsuite/gas/aarch64/reloc-prel_g3.d
index 4a476ab954f..2b540f154a3 100644
--- a/gas/testsuite/gas/aarch64/reloc-prel_g3.d
+++ b/gas/testsuite/gas/aarch64/reloc-prel_g3.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g0_nc.d
index 606c801d053..35a061489ca 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g0_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g0_nc.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g1.d b/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g1.d
index a046e787306..abe6811e1d4 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsdesc_off_g1.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 .*:     file format .*
 
 Disassembly of section \.text:
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsgd_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-tlsgd_g0_nc.d
index f25913f4170..9749716983f 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsgd_g0_nc.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsgd_g0_nc.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsgd_g1.d b/gas/testsuite/gas/aarch64/reloc-tlsgd_g1.d
index 52a37aed62b..13864591246 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsgd_g1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsgd_g1.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm-1.d
index 6b7132fb07e..7034e299a4b 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsldm-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsldm-1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-ilp32-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm-ilp32-1.d
index 28686cd04ef..a7417eca554 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsldm-ilp32-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsldm-ilp32-1.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d
index f4faa4bddeb..472f8c33efd 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d
index e2c81efdfd5..b3f47b180cc 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-1.d
index c7d1f6b0448..24ea06cb479 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-ilp32-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-ilp32-1.d
index f068cfb85bb..c7a96501804 100644
--- a/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-ilp32-1.d
+++ b/gas/testsuite/gas/aarch64/reloc-tlsldm_lo12_nc-ilp32-1.d
@@ -1,5 +1,6 @@
 #as: -mabi=ilp32
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16-ilp32.d
index 11ff08f8b17..1f537fb3bc8 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12-ldst16.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16.d
index 66c17a444d6..06774a3b573 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst16.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32-ilp32.d
index 79cffb51bbd..b1d45bf2c26 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12-ldst32.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32.d
index 17b2de3ee48..c2caaca6f34 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst32.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64-ilp32.d
index 25c6f2353e3..1969595c7ea 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12-ldst64.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64.d
index 73277b38c56..30eb3fa2138 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst64.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8-ilp32.d
index 5b6f2330e6a..6a428c49f0b 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12-ldst8.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8.d
index 781997473ce..3e5cb6796ef 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12-ldst8.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16-ilp32.d
index 896c6ca8447..28757a8a3c9 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12_nc-ldst16.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16.d
index 06aa052b949..3ccc1b432a5 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst16.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32-ilp32.d
index 7b8f6bf495f..98ac7660969 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12_nc-ldst32.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32.d
index c83044b3ac0..ae9432ee952 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst32.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64-ilp32.d
index f8827505a63..34d6832583a 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12_nc-ldst64.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64.d
index 8e16b09d97c..6b176f9e287 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst64.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8-ilp32.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8-ilp32.d
index 14e3345b7d3..8464db797ca 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8-ilp32.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8-ilp32.d
@@ -1,6 +1,7 @@
 #as: -mabi=ilp32
 #source: reloc-tprel_lo12_nc-ldst8.s
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8.d b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8.d
index a87429f85d5..76a1e76ccd4 100644
--- a/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8.d
+++ b/gas/testsuite/gas/aarch64/reloc-tprel_lo12_nc-ldst8.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_1.d b/gas/testsuite/gas/aarch64/sve-movprfx_1.d
index 13035db1d82..5ead32cfe4e 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_1.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_1.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_1.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_10.d b/gas/testsuite/gas/aarch64/sve-movprfx_10.d
index 575632f9a40..1dcbbacbaf3 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_10.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_10.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_10.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_11.d b/gas/testsuite/gas/aarch64/sve-movprfx_11.d
index 71bab8abd55..90ba848b615 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_11.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_11.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_11.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_12.d b/gas/testsuite/gas/aarch64/sve-movprfx_12.d
index dde3a926965..4698567b6d3 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_12.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_12.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_12.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_13.d b/gas/testsuite/gas/aarch64/sve-movprfx_13.d
index 46b0bb0a18f..4a12efe5008 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_13.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_13.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_13.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_14.d b/gas/testsuite/gas/aarch64/sve-movprfx_14.d
index 1024339a7c2..9d2a8f0c29c 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_14.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_14.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_14.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_15.d b/gas/testsuite/gas/aarch64/sve-movprfx_15.d
index 436e59f8269..9e77f04fed7 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_15.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_15.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_15.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_16.d b/gas/testsuite/gas/aarch64/sve-movprfx_16.d
index a6550b78990..e998e62afe5 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_16.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_16.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_16.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_17.d b/gas/testsuite/gas/aarch64/sve-movprfx_17.d
index ce96138339d..a873bfdfaa2 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_17.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_17.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_17.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_18.d b/gas/testsuite/gas/aarch64/sve-movprfx_18.d
index e158131331b..2868d8ed8ef 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_18.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_18.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_18.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_19.d b/gas/testsuite/gas/aarch64/sve-movprfx_19.d
index bf3b0631ef0..996316ad599 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_19.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_19.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_19.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_2.d b/gas/testsuite/gas/aarch64/sve-movprfx_2.d
index 905c1f4c120..81965828201 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_2.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_2.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_2.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_20.d b/gas/testsuite/gas/aarch64/sve-movprfx_20.d
index 80621d64adb..002879d6f33 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_20.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_20.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_20.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_21.d b/gas/testsuite/gas/aarch64/sve-movprfx_21.d
index 20eb85b3377..2c1eeb998dd 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_21.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_21.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_21.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_22.d b/gas/testsuite/gas/aarch64/sve-movprfx_22.d
index de4d1a3693b..32c1f79a101 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_22.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_22.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_22.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_23.d b/gas/testsuite/gas/aarch64/sve-movprfx_23.d
index e1c6c2c2cce..dac3a818408 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_23.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_23.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_23.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_24.d b/gas/testsuite/gas/aarch64/sve-movprfx_24.d
index ff1bdbe7109..8459324a354 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_24.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_24.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_24.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_25.d b/gas/testsuite/gas/aarch64/sve-movprfx_25.d
index 83a6500710c..02bcfd561a5 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_25.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_25.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_25.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_26.d b/gas/testsuite/gas/aarch64/sve-movprfx_26.d
index f0830cc718b..9a5827759c5 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_26.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_26.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_26.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_27.d b/gas/testsuite/gas/aarch64/sve-movprfx_27.d
index e71d1715b61..5e96bd328db 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_27.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_27.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_27.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_28.d b/gas/testsuite/gas/aarch64/sve-movprfx_28.d
index 808d07da892..3121b71ebec 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_28.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_28.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_28.l
 #as: -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_3.d b/gas/testsuite/gas/aarch64/sve-movprfx_3.d
index 03909dbc62c..1aec576d130 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_3.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_3.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_3.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_4.d b/gas/testsuite/gas/aarch64/sve-movprfx_4.d
index fd71a4bac28..a3dedae230d 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_4.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_4.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_4.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_5.d b/gas/testsuite/gas/aarch64/sve-movprfx_5.d
index 511cf66c665..74a43dfd3e4 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_5.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_5.d
@@ -1,6 +1,7 @@
 #source: sve-movprfx_5.s
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_6.d b/gas/testsuite/gas/aarch64/sve-movprfx_6.d
index 4af626993aa..1ae23ed68b3 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_6.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_6.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_6.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_7.d b/gas/testsuite/gas/aarch64/sve-movprfx_7.d
index 725a8a8604b..9be980436a4 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_7.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_7.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_7.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_8.d b/gas/testsuite/gas/aarch64/sve-movprfx_8.d
index f853e218b93..33be771eddd 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_8.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_8.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_8.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/sve-movprfx_9.d b/gas/testsuite/gas/aarch64/sve-movprfx_9.d
index 54a1733937b..34d85ba6d33 100644
--- a/gas/testsuite/gas/aarch64/sve-movprfx_9.d
+++ b/gas/testsuite/gas/aarch64/sve-movprfx_9.d
@@ -2,6 +2,7 @@
 #warning_output: sve-movprfx_9.l
 #as: -march=armv8-a+sve -I$srcdir/$subdir --generate-missing-build-notes=no
 #objdump: -Dr -M notes
+#notarget: *-*-pe* *-*-mingw*
 
 .* file format .*
 
diff --git a/gas/testsuite/gas/aarch64/symbol-variant_pcs-1.d b/gas/testsuite/gas/aarch64/symbol-variant_pcs-1.d
index ce99514b3da..85468aa0b0e 100644
--- a/gas/testsuite/gas/aarch64/symbol-variant_pcs-1.d
+++ b/gas/testsuite/gas/aarch64/symbol-variant_pcs-1.d
@@ -1,5 +1,6 @@
 #objdump: -t
 #as:  --generate-missing-build-notes=no
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/symbol-variant_pcs-2.d b/gas/testsuite/gas/aarch64/symbol-variant_pcs-2.d
index 5f46f27236d..001cf0da1e3 100644
--- a/gas/testsuite/gas/aarch64/symbol-variant_pcs-2.d
+++ b/gas/testsuite/gas/aarch64/symbol-variant_pcs-2.d
@@ -1,5 +1,6 @@
 #objdump: -t
 #as:  --generate-missing-build-notes=no
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/symbol-variant_pcs-3.d b/gas/testsuite/gas/aarch64/symbol-variant_pcs-3.d
index 8d05c1a6361..486a6c083b1 100644
--- a/gas/testsuite/gas/aarch64/symbol-variant_pcs-3.d
+++ b/gas/testsuite/gas/aarch64/symbol-variant_pcs-3.d
@@ -1,5 +1,6 @@
 #objdump: -t
 #as:  --generate-missing-build-notes=no
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/system.d b/gas/testsuite/gas/aarch64/system.d
index 93c84a72982..4c1d9ff16a9 100644
--- a/gas/testsuite/gas/aarch64/system.d
+++ b/gas/testsuite/gas/aarch64/system.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/tail_padding.d b/gas/testsuite/gas/aarch64/tail_padding.d
index a816ac4a2de..5ef1e3a1c5e 100644
--- a/gas/testsuite/gas/aarch64/tail_padding.d
+++ b/gas/testsuite/gas/aarch64/tail_padding.d
@@ -1,6 +1,7 @@
 #as: -mabi=lp64
 #readelf: -S
 #name: AArch64 section tail padding
+#notarget: *-*-pe* *-*-mingw*
 
 There are .* section headers, starting at offset .*:
 
diff --git a/gas/testsuite/gas/aarch64/tbz_1.d b/gas/testsuite/gas/aarch64/tbz_1.d
index 54b7dbab079..e7ca8db5466 100644
--- a/gas/testsuite/gas/aarch64/tbz_1.d
+++ b/gas/testsuite/gas/aarch64/tbz_1.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/tls-desc.d b/gas/testsuite/gas/aarch64/tls-desc.d
index e393d455461..85d1f4b6a64 100644
--- a/gas/testsuite/gas/aarch64/tls-desc.d
+++ b/gas/testsuite/gas/aarch64/tls-desc.d
@@ -1,5 +1,6 @@
 #as: -mabi=lp64
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
diff --git a/gas/testsuite/gas/aarch64/tls.d b/gas/testsuite/gas/aarch64/tls.d
index dc18949bd0c..f8ed49725e5 100644
--- a/gas/testsuite/gas/aarch64/tls.d
+++ b/gas/testsuite/gas/aarch64/tls.d
@@ -1,4 +1,5 @@
 #objdump: -dr
+#notarget: *-*-pe* *-*-mingw*
 
 .*:     file format .*
 
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 3/7] Skip big-obj test for pe-aarch64
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
  2023-01-06  1:25 ` [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64 Mark Harmstone
@ 2023-01-06  1:25 ` Mark Harmstone
  2023-01-06  8:12   ` Jan Beulich
  2023-01-06  1:25 ` [PATCH 4/7] Add pe-aarch64 relocations Mark Harmstone
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

---
 gas/testsuite/gas/pe/big-obj.d | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gas/testsuite/gas/pe/big-obj.d b/gas/testsuite/gas/pe/big-obj.d
index 27b351a7d60..ad44cd51310 100644
--- a/gas/testsuite/gas/pe/big-obj.d
+++ b/gas/testsuite/gas/pe/big-obj.d
@@ -1,6 +1,7 @@
 #as: -mbig-obj
 #objdump: -h
 #name: PE big obj
+#notarget: aarch64-*
 
 .*: *file format pe-bigobj-.*
 
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 4/7] Add pe-aarch64 relocations
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
  2023-01-06  1:25 ` [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64 Mark Harmstone
  2023-01-06  1:25 ` [PATCH 3/7] Skip big-obj test for pe-aarch64 Mark Harmstone
@ 2023-01-06  1:25 ` Mark Harmstone
  2023-01-06  1:25 ` [PATCH 5/7] Add .secrel32 for pe-aarch64 Mark Harmstone
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

---
 bfd/coff-aarch64.c                | 674 +++++++++++++++++++++++++++++-
 bfd/config.bfd                    |   6 -
 gas/config/tc-aarch64.c           |  24 +-
 gas/testsuite/gas/pe/pe-aarch64.d | 230 +++++++++-
 gas/testsuite/gas/pe/pe-aarch64.s | 162 ++++++-
 ld/testsuite/ld-pe/aarch64.d      | 158 +++++++
 ld/testsuite/ld-pe/aarch64a.s     | 159 +++++++
 ld/testsuite/ld-pe/aarch64b.s     |   8 +
 ld/testsuite/ld-pe/pe.exp         |  10 +-
 9 files changed, 1388 insertions(+), 43 deletions(-)
 create mode 100644 ld/testsuite/ld-pe/aarch64.d
 create mode 100644 ld/testsuite/ld-pe/aarch64a.s
 create mode 100644 ld/testsuite/ld-pe/aarch64b.s

diff --git a/bfd/coff-aarch64.c b/bfd/coff-aarch64.c
index 236cbb79ffb..d6c48eba63b 100644
--- a/bfd/coff-aarch64.c
+++ b/bfd/coff-aarch64.c
@@ -39,59 +39,310 @@
 
 #include "libcoff.h"
 
+static bfd_reloc_status_type
+coff_aarch64_addr64_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			   arelent *reloc_entry,
+			   asymbol *symbol ATTRIBUTE_UNUSED,
+			   void *data,
+			   asection *input_section ATTRIBUTE_UNUSED,
+			   bfd *output_bfd ATTRIBUTE_UNUSED,
+			   char **error_message ATTRIBUTE_UNUSED)
+{
+  uint64_t val = reloc_entry->addend;
+
+  bfd_putl64 (val, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_addr32_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			   arelent *reloc_entry,
+			   asymbol *symbol ATTRIBUTE_UNUSED,
+			   void *data,
+			   asection *input_section ATTRIBUTE_UNUSED,
+			   bfd *output_bfd ATTRIBUTE_UNUSED,
+			   char **error_message ATTRIBUTE_UNUSED)
+{
+  uint64_t val;
+
+  if ((int64_t) reloc_entry->addend > 0x7fffffff
+      || (int64_t) reloc_entry->addend < -0x7fffffff)
+    return bfd_reloc_overflow;
+
+  val = reloc_entry->addend;
+
+  bfd_putl32 ((uint32_t) val, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_branch26_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			     arelent *reloc_entry,
+			     asymbol *symbol ATTRIBUTE_UNUSED,
+			     void *data,
+			     asection *input_section ATTRIBUTE_UNUSED,
+			     bfd *output_bfd ATTRIBUTE_UNUSED,
+			     char **error_message ATTRIBUTE_UNUSED)
+{
+  uint32_t op;
+  int32_t param;
+
+  op = bfd_getl32 (data + reloc_entry->address);
+  param = reloc_entry->addend;
+
+  if (param > 0x7ffffff || param < -0x8000000)
+    return bfd_reloc_overflow;
+
+  op &= 0xfc000000;
+  op |= (param >> 2) & 0x3ffffff;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_rel21_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			  arelent *reloc_entry,
+			  asymbol *symbol ATTRIBUTE_UNUSED,
+			  void *data,
+			  asection *input_section ATTRIBUTE_UNUSED,
+			  bfd *output_bfd ATTRIBUTE_UNUSED,
+			  char **error_message ATTRIBUTE_UNUSED)
+{
+  uint32_t op;
+  int32_t param;
+
+  op = bfd_getl32 (data + reloc_entry->address);
+  param = reloc_entry->addend;
+
+  if (param > 0xfffff || param < -0x100000)
+    return bfd_reloc_overflow;
+
+  op &= 0x9f00001f;
+  op |= (param & 0x1ffffc) << 3;
+  op |= (param & 0x3) << 29;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_po12l_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			  arelent *reloc_entry,
+			  asymbol *symbol ATTRIBUTE_UNUSED,
+			  void *data,
+			  asection *input_section ATTRIBUTE_UNUSED,
+			  bfd *output_bfd ATTRIBUTE_UNUSED,
+			  char **error_message ATTRIBUTE_UNUSED)
+{
+  uint32_t op;
+  int32_t param;
+  uint8_t shift;
+
+  op = bfd_getl32 (data + reloc_entry->address);
+  param = reloc_entry->addend & 0xfff;
+
+  if ((op & 0xff800000) == 0x3d800000)
+    {
+      /* LDR / STR with q register */
+      shift = 4;
+    }
+  else
+    {
+      /* top two bits represent how much addend should be shifted */
+      shift = op >> 30;
+    }
+
+  if (param & ((1 << shift) - 1))
+    return bfd_reloc_overflow;
+
+  param >>= shift;
+
+  op &= 0xffc003ff;
+  op |= param << 10;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_branch19_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			     arelent *reloc_entry,
+			     asymbol *symbol ATTRIBUTE_UNUSED,
+			     void *data,
+			     asection *input_section ATTRIBUTE_UNUSED,
+			     bfd *output_bfd ATTRIBUTE_UNUSED,
+			     char **error_message ATTRIBUTE_UNUSED)
+{
+  uint32_t op;
+  int32_t param;
+
+  op = bfd_getl32 (data + reloc_entry->address);
+  param = reloc_entry->addend;
+
+  if (param > 0xfffff || param < -0x100000)
+    return bfd_reloc_overflow;
+
+  op &= 0xff00001f;
+  op |= ((param >> 2) & 0x7ffff) << 5;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_branch14_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			     arelent *reloc_entry,
+			     asymbol *symbol ATTRIBUTE_UNUSED,
+			     void *data,
+			     asection *input_section ATTRIBUTE_UNUSED,
+			     bfd *output_bfd ATTRIBUTE_UNUSED,
+			     char **error_message ATTRIBUTE_UNUSED)
+{
+  uint32_t op;
+  int32_t param;
+
+  op = bfd_getl32 (data + reloc_entry->address);
+  param = reloc_entry->addend;
+
+  if (param > 0x7fff || param < -0x8000)
+    return bfd_reloc_overflow;
+
+  op &= 0xfff8001f;
+  op |= ((param >> 2) & 0x3fff) << 5;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_po12a_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			  arelent *reloc_entry,
+			  asymbol *symbol ATTRIBUTE_UNUSED,
+			  void *data,
+			  asection *input_section ATTRIBUTE_UNUSED,
+			  bfd *output_bfd ATTRIBUTE_UNUSED,
+			  char **error_message ATTRIBUTE_UNUSED)
+{
+  uint32_t op;
+  int32_t param;
+
+  op = bfd_getl32 (data + reloc_entry->address);
+  param = reloc_entry->addend;
+
+  op &= 0xffc003ff;
+  op |= (param & 0xfff) << 10;
+
+  bfd_putl32 (op, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+coff_aarch64_addr32nb_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			     arelent *reloc_entry,
+			     asymbol *symbol ATTRIBUTE_UNUSED,
+			     void *data,
+			     asection *input_section ATTRIBUTE_UNUSED,
+			     bfd *output_bfd ATTRIBUTE_UNUSED,
+			     char **error_message ATTRIBUTE_UNUSED)
+{
+  uint64_t val;
+
+  if ((int64_t) reloc_entry->addend > 0x7fffffff
+      || (int64_t) reloc_entry->addend < -0x7fffffff)
+    return bfd_reloc_overflow;
+
+  val = reloc_entry->addend;
+
+  bfd_putl32 ((uint32_t) val, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value.  */
 #define MINUS_ONE (~ (bfd_vma) 0)
 
+static const reloc_howto_type arm64_reloc_howto_abs = HOWTO(IMAGE_REL_ARM64_ABSOLUTE, 0, 1, 0, false, 0,
+	 complain_overflow_dont,
+	 NULL, "IMAGE_REL_ARM64_ABSOLUTE",
+	 false, 0, 0, false);
+
 static const reloc_howto_type arm64_reloc_howto_64 = HOWTO(IMAGE_REL_ARM64_ADDR64, 0, 8, 64, false, 0,
 	 complain_overflow_bitfield,
-	 NULL, "64",
+	 coff_aarch64_addr64_reloc, "IMAGE_REL_ARM64_ADDR64",
 	 false, MINUS_ONE, MINUS_ONE, false);
 
 static const reloc_howto_type arm64_reloc_howto_32 = HOWTO (IMAGE_REL_ARM64_ADDR32, 0, 4, 32, false, 0,
 	 complain_overflow_bitfield,
-	 NULL, "32",
+	 coff_aarch64_addr32_reloc, "IMAGE_REL_ARM64_ADDR32",
 	 false, 0xffffffff, 0xffffffff, false);
 
 static const reloc_howto_type arm64_reloc_howto_32_pcrel = HOWTO (IMAGE_REL_ARM64_REL32, 0, 4, 32, true, 0,
 	 complain_overflow_bitfield,
-	 NULL, "DISP32",
+	 NULL, "IMAGE_REL_ARM64_REL32",
 	 false, 0xffffffff, 0xffffffff, true);
 
 static const reloc_howto_type arm64_reloc_howto_branch26 = HOWTO (IMAGE_REL_ARM64_BRANCH26, 0, 4, 26, true, 0,
 	 complain_overflow_bitfield,
-	 NULL, "BRANCH26",
+	 coff_aarch64_branch26_reloc, "IMAGE_REL_ARM64_BRANCH26",
 	 false, 0x03ffffff, 0x03ffffff, true);
 
 static const reloc_howto_type arm64_reloc_howto_page21 = HOWTO (IMAGE_REL_ARM64_PAGEBASE_REL21, 12, 4, 21, true, 0,
 	 complain_overflow_signed,
-	 NULL, "PAGE21",
+	 coff_aarch64_rel21_reloc, "IMAGE_REL_ARM64_PAGEBASE_REL21",
 	 false, 0x1fffff, 0x1fffff, false);
 
 static const reloc_howto_type arm64_reloc_howto_lo21 = HOWTO (IMAGE_REL_ARM64_REL21, 0, 4, 21, true, 0,
 	 complain_overflow_signed,
-	 NULL, "LO21",
+	 coff_aarch64_rel21_reloc, "IMAGE_REL_ARM64_REL21",
 	 false, 0x1fffff, 0x1fffff, true);
 
-static const reloc_howto_type arm64_reloc_howto_pgoff12 = HOWTO (IMAGE_REL_ARM64_PAGEOFFSET_12L, 1, 4, 12, true, 0,
+static const reloc_howto_type arm64_reloc_howto_pgoff12l = HOWTO (IMAGE_REL_ARM64_PAGEOFFSET_12L, 1, 4, 12, true, 0,
 	 complain_overflow_signed,
-	 NULL, "PGOFF12",
+	 coff_aarch64_po12l_reloc, "IMAGE_REL_ARM64_PAGEOFFSET_12L",
 	 false, 0xffe, 0xffe, true);
 
 static const reloc_howto_type arm64_reloc_howto_branch19 = HOWTO (IMAGE_REL_ARM64_BRANCH19, 2, 4, 19, true, 0,
 	 complain_overflow_signed,
-	 NULL, "BRANCH19",
+	 coff_aarch64_branch19_reloc, "IMAGE_REL_ARM64_BRANCH19",
 	 false, 0x7ffff, 0x7ffff, true);
 
+static const reloc_howto_type arm64_reloc_howto_branch14 = HOWTO (IMAGE_REL_ARM64_BRANCH14, 2, 4, 14, true, 0,
+	 complain_overflow_signed,
+	 coff_aarch64_branch14_reloc, "IMAGE_REL_ARM64_BRANCH14",
+	 false, 0x3fff, 0x3fff, true);
+
+static const reloc_howto_type arm64_reloc_howto_pgoff12a = HOWTO (IMAGE_REL_ARM64_PAGEOFFSET_12A, 2, 4, 12, true, 10,
+	 complain_overflow_dont,
+	 coff_aarch64_po12a_reloc, "IMAGE_REL_ARM64_PAGEOFFSET_12A",
+	 false, 0x3ffc00, 0x3ffc00, false);
+
+static const reloc_howto_type arm64_reloc_howto_32nb = HOWTO (IMAGE_REL_ARM64_ADDR32NB, 0, 4, 32, false, 0,
+	 complain_overflow_bitfield,
+	 coff_aarch64_addr32nb_reloc, "IMAGE_REL_ARM64_ADDR32NB",
+	 false, 0xffffffff, 0xffffffff, false);
 
 static const reloc_howto_type* const arm64_howto_table[] = {
+     &arm64_reloc_howto_abs,
      &arm64_reloc_howto_64,
      &arm64_reloc_howto_32,
      &arm64_reloc_howto_32_pcrel,
      &arm64_reloc_howto_branch26,
      &arm64_reloc_howto_page21,
      &arm64_reloc_howto_lo21,
-     &arm64_reloc_howto_pgoff12,
-     &arm64_reloc_howto_branch19
+     &arm64_reloc_howto_pgoff12l,
+     &arm64_reloc_howto_branch19,
+     &arm64_reloc_howto_branch14,
+     &arm64_reloc_howto_pgoff12a,
+     &arm64_reloc_howto_32nb
 };
 
 #ifndef NUM_ELEM
@@ -118,13 +369,24 @@ coff_aarch64_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real
   case BFD_RELOC_AARCH64_JUMP26:
     return &arm64_reloc_howto_branch26;
   case BFD_RELOC_AARCH64_ADR_HI21_PCREL:
+  case BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL:
     return &arm64_reloc_howto_page21;
+  case BFD_RELOC_AARCH64_TSTBR14:
+    return &arm64_reloc_howto_branch14;
   case BFD_RELOC_AARCH64_ADR_LO21_PCREL:
     return &arm64_reloc_howto_lo21;
+  case BFD_RELOC_AARCH64_ADD_LO12:
+    return &arm64_reloc_howto_pgoff12a;
+  case BFD_RELOC_AARCH64_LDST8_LO12:
   case BFD_RELOC_AARCH64_LDST16_LO12:
-    return &arm64_reloc_howto_pgoff12;
+  case BFD_RELOC_AARCH64_LDST32_LO12:
+  case BFD_RELOC_AARCH64_LDST64_LO12:
+  case BFD_RELOC_AARCH64_LDST128_LO12:
+    return &arm64_reloc_howto_pgoff12l;
   case BFD_RELOC_AARCH64_BRANCH19:
     return &arm64_reloc_howto_branch19;
+  case BFD_RELOC_RVA:
+    return &arm64_reloc_howto_32nb;
   default:
     BFD_FAIL ();
     return NULL;
@@ -155,6 +417,8 @@ coff_aarch64_rtype_lookup (unsigned int code)
 {
   switch (code)
   {
+    case IMAGE_REL_ARM64_ABSOLUTE:
+      return &arm64_reloc_howto_abs;
     case IMAGE_REL_ARM64_ADDR64:
       return &arm64_reloc_howto_64;
     case IMAGE_REL_ARM64_ADDR32:
@@ -168,9 +432,15 @@ coff_aarch64_rtype_lookup (unsigned int code)
     case IMAGE_REL_ARM64_REL21:
       return &arm64_reloc_howto_lo21;
     case IMAGE_REL_ARM64_PAGEOFFSET_12L:
-      return &arm64_reloc_howto_pgoff12;
+      return &arm64_reloc_howto_pgoff12l;
     case IMAGE_REL_ARM64_BRANCH19:
       return &arm64_reloc_howto_branch19;
+    case IMAGE_REL_ARM64_BRANCH14:
+      return &arm64_reloc_howto_branch14;
+    case IMAGE_REL_ARM64_PAGEOFFSET_12A:
+      return &arm64_reloc_howto_pgoff12a;
+    case IMAGE_REL_ARM64_ADDR32NB:
+      return &arm64_reloc_howto_32nb;
     default:
       BFD_FAIL ();
       return NULL;
@@ -188,6 +458,7 @@ coff_aarch64_rtype_lookup (unsigned int code)
 #define bfd_pe_print_pdata      NULL
 #endif
 
+#ifdef COFF_WITH_PE
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
@@ -197,9 +468,384 @@ in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
 {
   return !howto->pc_relative;
 }
+#endif
+
+static bool
+coff_pe_aarch64_relocate_section (bfd *output_bfd,
+				  struct bfd_link_info *info,
+				  bfd *input_bfd,
+				  asection *input_section,
+				  bfd_byte *contents,
+				  struct internal_reloc *relocs,
+				  struct internal_syment *syms,
+				  asection **sections)
+{
+  struct internal_reloc *rel;
+  struct internal_reloc *relend;
+
+  if (bfd_link_relocatable (info))
+    return true;
+
+  rel = relocs;
+  relend = rel + input_section->reloc_count;
+
+  /* The addend for a relocation is stored in the immediate bits of each
+     opcode.  So for each relocation, we need to extract the immediate value,
+     use this to calculate what it should be for the symbol, and rewrite the
+     opcode into the section stream.  */
+
+  for (; rel < relend; rel++)
+    {
+      long symndx;
+      struct coff_link_hash_entry *h;
+      bfd_vma sym_value;
+      asection *sec = NULL;
+      uint64_t dest_vma;
+
+      /* skip trivial relocations */
+      if (rel->r_type == IMAGE_REL_ARM64_ADDR32
+	  || rel->r_type == IMAGE_REL_ARM64_ADDR64
+	  || rel->r_type == IMAGE_REL_ARM64_ABSOLUTE)
+	continue;
+
+      symndx = rel->r_symndx;
+      sym_value = syms[symndx].n_value;
+
+      h = obj_coff_sym_hashes (input_bfd)[symndx];
+
+      if (h && h->root.type == bfd_link_hash_defined)
+	{
+	  sec = h->root.u.def.section;
+	  sym_value = h->root.u.def.value;
+	}
+      else
+	{
+	  sec = sections[symndx];
+	}
+
+      if (!sec)
+	continue;
+
+      if (bfd_is_und_section (sec))
+	continue;
+
+      if (discarded_section (sec))
+	continue;
+
+      dest_vma = sec->output_section->vma + sec->output_offset + sym_value;
+
+      if (symndx < 0
+	  || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+	continue;
+
+      switch (rel->r_type)
+	{
+	case IMAGE_REL_ARM64_ADDR32NB:
+	  {
+	    uint64_t val;
+	    int32_t addend;
+
+	    addend = bfd_getl32 (contents + rel->r_vaddr);
+
+	    dest_vma += addend;
+
+	    val = dest_vma;
+	    val -= pe_data (output_bfd)->pe_opthdr.ImageBase;
+
+	    if (val > 0xffffffff)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_ADDR32NB", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    bfd_putl32 (val, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_BRANCH26:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x3ffffff) << 2;
+
+	    if (addend & 0x8000000)
+	      addend |= 0xfffffffff0000000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 2) - (cur_vma >> 2);
+
+	    if (val > 0x1ffffff || val < -0x2000000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_BRANCH26", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0xfc000000;
+	    opcode |= val & 0x3ffffff;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_BRANCH19:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0xffffe0) >> 3;
+
+	    if (addend & 0x100000)
+	      addend |= 0xffffffffffe00000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 2) - (cur_vma >> 2);
+
+	    if (val > 0x3ffff || val < -0x40000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_BRANCH19", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0xff00001f;
+	    opcode |= (val & 0x7ffff) << 5;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_BRANCH14:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x7ffe0) >> 3;
+
+	    if (addend & 0x8000)
+	      addend |= 0xffffffffffff0000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 2) - (cur_vma >> 2);
+
+	    if (val > 0x1fff || val < -0x2000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_BRANCH14", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0xfff8001f;
+	    opcode |= (val & 0x3fff) << 5;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_PAGEBASE_REL21:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = ((opcode & 0xffffe0) >> 3)
+		     | ((opcode & 0x60000000) >> 29);
+
+	    if (addend & 0x100000)
+	      addend |= 0xffffffffffe00000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = (dest_vma >> 12) - (cur_vma >> 12);
+
+	    if (val > 0xfffff || val < -0x100000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_PAGEBASE_REL21", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0x9f00001f;
+	    opcode |= (val & 0x3) << 29;
+	    opcode |= (val & 0x1ffffc) << 3;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_REL21:
+	  {
+	    uint64_t cur_vma;
+	    uint32_t opcode;
+	    int64_t addend, val;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = ((opcode & 0xffffe0) >> 3)
+		     | ((opcode & 0x60000000) >> 29);
+
+	    if (addend & 0x100000)
+	      addend |= 0xffffffffffe00000;
+
+	    dest_vma += addend;
+	    cur_vma = input_section->output_section->vma
+		      + input_section->output_offset
+		      + rel->r_vaddr;
+
+	    val = dest_vma - cur_vma;
+
+	    if (val > 0xfffff || val < -0x100000)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_REL21", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    opcode &= 0x9f00001f;
+	    opcode |= (val & 0x3) << 29;
+	    opcode |= (val & 0x1ffffc) << 3;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_PAGEOFFSET_12L:
+	  {
+	    uint32_t opcode, val;
+	    uint8_t shift;
+	    int32_t addend;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x3ffc00) >> 10;
+
+	    if ((opcode & 0xff800000) == 0x3d800000)
+	      {
+		/* LDR / STR with q register */
+		shift = 4;
+	      }
+	    else
+	      {
+		/* top two bits represent how much addend should be shifted */
+		shift = opcode >> 30;
+	      }
+
+	    addend <<= shift;
+
+	    dest_vma += addend;
+
+	    /* only interested in bottom 12 bits */
+	    val = dest_vma & 0xfff;
+
+	    if (val & ((1 << shift) - 1))
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_PAGEOFFSET_12L", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    val >>= shift;
+
+	    opcode &= 0xffc003ff;
+	    opcode |= val << 10;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	case IMAGE_REL_ARM64_PAGEOFFSET_12A:
+	  {
+	    uint32_t opcode, val;
+	    int32_t addend;
+
+	    opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+	    addend = (opcode & 0x3ffc00) >> 10;
+
+	    dest_vma += addend;
+
+	    /* only interested in bottom 12 bits */
+	    val = dest_vma & 0xfff;
+
+	    opcode &= 0xffc003ff;
+	    opcode |= val << 10;
+
+	    bfd_putl32 (opcode, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
+	default:
+	  info->callbacks->einfo (_("%F%P: Unhandled relocation type %u\n"),
+				  rel->r_type);
+	  BFD_FAIL ();
+	  return false;
+	}
+    }
+
+  return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
+					     input_section, contents,
+					     relocs, syms, sections);
+}
+
+#define coff_relocate_section coff_pe_aarch64_relocate_section
 
 #include "coffcode.h"
 
+/* Prevent assertion in md_apply_fix by forcing use_rela_p on for new
+   sections.  */
+static bool
+coff_aarch64_new_section_hook (bfd *abfd, asection *section)
+{
+  if (!coff_new_section_hook (abfd, section))
+    return false;
+
+  section->use_rela_p = 1;
+
+  return true;
+}
+
+#define coff_aarch64_close_and_cleanup coff_close_and_cleanup
+#define coff_aarch64_bfd_free_cached_info coff_bfd_free_cached_info
+#define coff_aarch64_get_section_contents coff_get_section_contents
+#define coff_aarch64_get_section_contents_in_window coff_get_section_contents_in_window
+
 /* Target vectors.  */
 const bfd_target
 #ifdef TARGET_SYM
@@ -266,7 +912,7 @@ const bfd_target
     _bfd_bool_bfd_false_error
   },
 
-  BFD_JUMP_TABLE_GENERIC (coff),
+  BFD_JUMP_TABLE_GENERIC (coff_aarch64),
   BFD_JUMP_TABLE_COPY (coff),
   BFD_JUMP_TABLE_CORE (_bfd_nocore),
   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 3672b6a3602..800afa8105f 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -1493,12 +1493,6 @@ case "${targ}" in
     ;;
 esac
 
-if test x"$targ_defvec" = x"aarch64-pe"; then
-  # Not currently complete (and probably not stable), warn user
-  echo "*** WARNING BFD aarch64-pe support not complete nor stable"
-  echo "*** Do not rely on this for production purposes"
-fi
-
 # All MIPS ELF targets need a 64-bit bfd_vma.
 case "${targ_defvec} ${targ_selvecs}" in
   *mips_elf*)
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 132f8db7c50..25e79431046 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -1889,10 +1889,9 @@ s_ltorg (int ignored ATTRIBUTE_UNUSED)
     }
 }
 
-#ifdef OBJ_ELF
+#if defined(OBJ_ELF) || defined(OBJ_COFF)
 /* Forward declarations for functions below, in the MD interface
    section.  */
-static fixS *fix_new_aarch64 (fragS *, int, short, expressionS *, int, int);
 static struct reloc_table_entry * find_reloc_table_entry (char **);
 
 /* Directives: Data.  */
@@ -1900,7 +1899,7 @@ static struct reloc_table_entry * find_reloc_table_entry (char **);
    implemented properly.  */
 
 static void
-s_aarch64_elf_cons (int nbytes)
+s_aarch64_cons (int nbytes)
 {
   expressionS exp;
 
@@ -1950,6 +1949,12 @@ s_aarch64_elf_cons (int nbytes)
   input_line_pointer--;
   demand_empty_rest_of_line ();
 }
+#endif
+
+#ifdef OBJ_ELF
+/* Forward declarations for functions below, in the MD interface
+   section.  */
+ static fixS *fix_new_aarch64 (fragS *, int, short, expressionS *, int, int);
 
 /* Mark symbol that it follows a variant PCS convention.  */
 
@@ -2119,11 +2124,13 @@ const pseudo_typeS md_pseudo_table[] = {
   {"tlsdescadd", s_tlsdescadd, 0},
   {"tlsdesccall", s_tlsdesccall, 0},
   {"tlsdescldr", s_tlsdescldr, 0},
-  {"word", s_aarch64_elf_cons, 4},
-  {"long", s_aarch64_elf_cons, 4},
-  {"xword", s_aarch64_elf_cons, 8},
-  {"dword", s_aarch64_elf_cons, 8},
   {"variant_pcs", s_variant_pcs, 0},
+#endif
+#if defined(OBJ_ELF) || defined(OBJ_COFF)
+  {"word", s_aarch64_cons, 4},
+  {"long", s_aarch64_cons, 4},
+  {"xword", s_aarch64_cons, 8},
+  {"dword", s_aarch64_cons, 8},
 #endif
   {"float16", float_cons, 'h'},
   {"bfloat16", float_cons, 'b'},
@@ -9260,6 +9267,9 @@ md_apply_fix (fixS * fixP, valueT * valP, segT seg)
       /* An error will already have been reported.  */
       break;
 
+    case BFD_RELOC_RVA:
+      break;
+
     default:
       as_bad_where (fixP->fx_file, fixP->fx_line,
 		    _("unexpected %s fixup"),
diff --git a/gas/testsuite/gas/pe/pe-aarch64.d b/gas/testsuite/gas/pe/pe-aarch64.d
index 0b8009da5c4..eb611031183 100644
--- a/gas/testsuite/gas/pe/pe-aarch64.d
+++ b/gas/testsuite/gas/pe/pe-aarch64.d
@@ -1,14 +1,232 @@
 #as:
-#objdump: -d
+#objdump: -dr
 
 .*:     file format pe-aarch64-little
 
 
 Disassembly of section .text:
 
-0000000000000000 <_start>:
-   0:	d2800281 	mov	x1, #0x14                  	// #20
-   4:	14000001 	b	8 <foo>
+0000000000000000 <.text>:
+	...
 
-0000000000000008 <foo>:
-   8:	d65f03c0 	ret
+0000000000000010 <foo>:
+  10:	12345678 	and	w24, w19, #0xfffff003
+  14:	12345678 	and	w24, w19, #0xfffff003
+  18:	00000010 	udf	#16
+			18: IMAGE_REL_ARM64_ADDR32	.text
+  1c:	00000010 	udf	#16
+			1c: IMAGE_REL_ARM64_ADDR32	.text
+	...
+			20: IMAGE_REL_ARM64_ADDR32	bar
+			24: IMAGE_REL_ARM64_ADDR32	bar
+  28:	00000011 	udf	#17
+			28: IMAGE_REL_ARM64_ADDR32	.text
+  2c:	00000011 	udf	#17
+			2c: IMAGE_REL_ARM64_ADDR32	.text
+  30:	00000001 	udf	#1
+			30: IMAGE_REL_ARM64_ADDR32	bar
+  34:	00000001 	udf	#1
+			34: IMAGE_REL_ARM64_ADDR32	bar
+  38:	0000000f 	udf	#15
+			38: IMAGE_REL_ARM64_ADDR32	.text
+  3c:	0000000f 	udf	#15
+			3c: IMAGE_REL_ARM64_ADDR32	.text
+  40:	ffffffff 	.inst	0xffffffff ; undefined
+			40: IMAGE_REL_ARM64_ADDR32	bar
+  44:	ffffffff 	.inst	0xffffffff ; undefined
+			44: IMAGE_REL_ARM64_ADDR32	bar
+  48:	9abcdef0 	.inst	0x9abcdef0 ; undefined
+  4c:	12345678 	and	w24, w19, #0xfffff003
+  50:	9abcdef0 	.inst	0x9abcdef0 ; undefined
+  54:	12345678 	and	w24, w19, #0xfffff003
+  58:	00000010 	udf	#16
+			58: IMAGE_REL_ARM64_ADDR64	.text
+  5c:	00000000 	udf	#0
+  60:	00000010 	udf	#16
+			60: IMAGE_REL_ARM64_ADDR64	.text
+	...
+			68: IMAGE_REL_ARM64_ADDR64	bar
+			70: IMAGE_REL_ARM64_ADDR64	bar
+  78:	00000011 	udf	#17
+			78: IMAGE_REL_ARM64_ADDR64	.text
+  7c:	00000000 	udf	#0
+  80:	00000011 	udf	#17
+			80: IMAGE_REL_ARM64_ADDR64	.text
+  84:	00000000 	udf	#0
+  88:	00000001 	udf	#1
+			88: IMAGE_REL_ARM64_ADDR64	bar
+  8c:	00000000 	udf	#0
+  90:	00000001 	udf	#1
+			90: IMAGE_REL_ARM64_ADDR64	bar
+  94:	00000000 	udf	#0
+  98:	0000000f 	udf	#15
+			98: IMAGE_REL_ARM64_ADDR64	.text
+  9c:	00000000 	udf	#0
+  a0:	0000000f 	udf	#15
+			a0: IMAGE_REL_ARM64_ADDR64	.text
+  a4:	00000000 	udf	#0
+  a8:	ffffffff 	.inst	0xffffffff ; undefined
+			a8: IMAGE_REL_ARM64_ADDR64	bar
+  ac:	ffffffff 	.inst	0xffffffff ; undefined
+  b0:	ffffffff 	.inst	0xffffffff ; undefined
+			b0: IMAGE_REL_ARM64_ADDR64	bar
+  b4:	ffffffff 	.inst	0xffffffff ; undefined
+  b8:	00000010 	udf	#16
+			b8: IMAGE_REL_ARM64_ADDR32NB	.text
+  bc:	00000000 	udf	#0
+			bc: IMAGE_REL_ARM64_ADDR32NB	bar
+  c0:	00000011 	udf	#17
+			c0: IMAGE_REL_ARM64_ADDR32NB	.text
+  c4:	00000001 	udf	#1
+			c4: IMAGE_REL_ARM64_ADDR32NB	bar
+  c8:	0000000f 	udf	#15
+			c8: IMAGE_REL_ARM64_ADDR32NB	.text
+  cc:	ffffffff 	.inst	0xffffffff ; undefined
+			cc: IMAGE_REL_ARM64_ADDR32NB	bar
+  d0:	17ffffd0 	b	10 <foo>
+  d4:	17ffffd0 	b	14 <foo\+0x4>
+  d8:	17ffffcd 	b	c <.text\+0xc>
+  dc:	14000000 	b	0 <bar>
+			dc: IMAGE_REL_ARM64_BRANCH26	bar
+  e0:	14000001 	b	4 <bar\+0x4>
+			e0: IMAGE_REL_ARM64_BRANCH26	bar
+  e4:	17ffffff 	b	fffffffffffffffc <bar\+0xfffffffffffffffc>
+			e4: IMAGE_REL_ARM64_BRANCH26	bar
+  e8:	97ffffca 	bl	10 <foo>
+  ec:	97ffffca 	bl	14 <foo\+0x4>
+  f0:	97ffffc7 	bl	c <.text\+0xc>
+  f4:	94000000 	bl	0 <bar>
+			f4: IMAGE_REL_ARM64_BRANCH26	bar
+  f8:	94000001 	bl	4 <bar\+0x4>
+			f8: IMAGE_REL_ARM64_BRANCH26	bar
+  fc:	97ffffff 	bl	fffffffffffffffc <bar\+0xfffffffffffffffc>
+			fc: IMAGE_REL_ARM64_BRANCH26	bar
+ 100:	97ffffbf 	bl	fffffffffffffffc <foo\+0xffffffffffffffec>
+ 104:	b4fff860 	cbz	x0, 10 <foo>
+ 108:	b4fff860 	cbz	x0, 14 <foo\+0x4>
+ 10c:	b4fff800 	cbz	x0, c <.text\+0xc>
+ 110:	b4000000 	cbz	x0, 0 <bar>
+			110: IMAGE_REL_ARM64_BRANCH19	bar
+ 114:	b4000020 	cbz	x0, 4 <bar\+0x4>
+			114: IMAGE_REL_ARM64_BRANCH19	bar
+ 118:	b4ffffe0 	cbz	x0, fffffffffffffffc <bar\+0xfffffffffffffffc>
+			118: IMAGE_REL_ARM64_BRANCH19	bar
+ 11c:	b4fff700 	cbz	x0, fffffffffffffffc <foo\+0xffffffffffffffec>
+ 120:	3607f780 	tbz	w0, #0, 10 <foo>
+ 124:	3607f780 	tbz	w0, #0, 14 <foo\+0x4>
+ 128:	3607f720 	tbz	w0, #0, c <.text\+0xc>
+ 12c:	36000000 	tbz	w0, #0, 0 <bar>
+			12c: IMAGE_REL_ARM64_BRANCH14	bar
+ 130:	36000020 	tbz	w0, #0, 4 <bar\+0x4>
+			130: IMAGE_REL_ARM64_BRANCH14	bar
+ 134:	3607ffe0 	tbz	w0, #0, fffffffffffffffc <bar\+0xfffffffffffffffc>
+			134: IMAGE_REL_ARM64_BRANCH14	bar
+ 138:	3607f620 	tbz	w0, #0, fffffffffffffffc <foo\+0xffffffffffffffec>
+ 13c:	90000080 	adrp	x0, 10000 <foo\+0xfff0>
+			13c: IMAGE_REL_ARM64_PAGEBASE_REL21	.text
+ 140:	b0000080 	adrp	x0, 11000 <foo\+0x10ff0>
+			140: IMAGE_REL_ARM64_PAGEBASE_REL21	.text
+ 144:	f0000060 	adrp	x0, f000 <foo\+0xeff0>
+			144: IMAGE_REL_ARM64_PAGEBASE_REL21	.text
+ 148:	90000000 	adrp	x0, 0 <bar>
+			148: IMAGE_REL_ARM64_PAGEBASE_REL21	bar
+ 14c:	b0000000 	adrp	x0, 1000 <bar\+0x1000>
+			14c: IMAGE_REL_ARM64_PAGEBASE_REL21	bar
+ 150:	f0ffffe0 	adrp	x0, fffffffffffff000 <bar\+0xfffffffffffff000>
+			150: IMAGE_REL_ARM64_PAGEBASE_REL21	bar
+ 154:	90ffffe0 	adrp	x0, ffffffffffffc000 <foo\+0xffffffffffffbff0>
+			154: IMAGE_REL_ARM64_PAGEBASE_REL21	.text
+ 158:	10fff5c0 	adr	x0, 10 <foo>
+ 15c:	30fff5a0 	adr	x0, 11 <foo\+0x1>
+ 160:	70fff560 	adr	x0, f <.text\+0xf>
+ 164:	10000000 	adr	x0, 0 <bar>
+			164: IMAGE_REL_ARM64_REL21	bar
+ 168:	30000000 	adr	x0, 1 <bar\+0x1>
+			168: IMAGE_REL_ARM64_REL21	bar
+ 16c:	70ffffe0 	adr	x0, ffffffffffffffff <bar\+0xffffffffffffffff>
+			16c: IMAGE_REL_ARM64_REL21	bar
+ 170:	70fff460 	adr	x0, ffffffffffffffff <foo\+0xffffffffffffffef>
+ 174:	39004000 	strb	w0, \[x0, #16\]
+			174: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 178:	39005000 	strb	w0, \[x0, #20\]
+			178: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 17c:	39003000 	strb	w0, \[x0, #12\]
+			17c: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 180:	39000000 	strb	w0, \[x0\]
+			180: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 184:	39001000 	strb	w0, \[x0, #4\]
+			184: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 188:	393ff000 	strb	w0, \[x0, #4092\]
+			188: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 18c:	393ff000 	strb	w0, \[x0, #4092\]
+			18c: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 190:	79002000 	strh	w0, \[x0, #16\]
+			190: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 194:	79002800 	strh	w0, \[x0, #20\]
+			194: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 198:	79001800 	strh	w0, \[x0, #12\]
+			198: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 19c:	79000000 	strh	w0, \[x0\]
+			19c: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1a0:	79000800 	strh	w0, \[x0, #4\]
+			1a0: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1a4:	791ff800 	strh	w0, \[x0, #4092\]
+			1a4: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1a8:	791ff800 	strh	w0, \[x0, #4092\]
+			1a8: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1ac:	b9001000 	str	w0, \[x0, #16\]
+			1ac: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1b0:	b9001400 	str	w0, \[x0, #20\]
+			1b0: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1b4:	b9000c00 	str	w0, \[x0, #12\]
+			1b4: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1b8:	b9000000 	str	w0, \[x0\]
+			1b8: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1bc:	b9000400 	str	w0, \[x0, #4\]
+			1bc: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1c0:	b90ffc00 	str	w0, \[x0, #4092\]
+			1c0: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1c4:	b90ffc00 	str	w0, \[x0, #4092\]
+			1c4: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1c8:	f9000800 	str	x0, \[x0, #16\]
+			1c8: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1cc:	f9000c00 	str	x0, \[x0, #24\]
+			1cc: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1d0:	f9000400 	str	x0, \[x0, #8\]
+			1d0: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1d4:	f9000000 	str	x0, \[x0\]
+			1d4: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1d8:	f9000400 	str	x0, \[x0, #8\]
+			1d8: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1dc:	f907fc00 	str	x0, \[x0, #4088\]
+			1dc: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1e0:	f907fc00 	str	x0, \[x0, #4088\]
+			1e0: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1e4:	3d800400 	str	q0, \[x0, #16\]
+			1e4: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1e8:	3d800800 	str	q0, \[x0, #32\]
+			1e8: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1ec:	3d800000 	str	q0, \[x0\]
+			1ec: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 1f0:	3d800000 	str	q0, \[x0\]
+			1f0: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1f4:	3d800400 	str	q0, \[x0, #16\]
+			1f4: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1f8:	3d83fc00 	str	q0, \[x0, #4080\]
+			1f8: IMAGE_REL_ARM64_PAGEOFFSET_12L	bar
+ 1fc:	3d83fc00 	str	q0, \[x0, #4080\]
+			1fc: IMAGE_REL_ARM64_PAGEOFFSET_12L	.text
+ 200:	91004000 	add	x0, x0, #0x10
+			200: IMAGE_REL_ARM64_PAGEOFFSET_12A	.text
+ 204:	91004400 	add	x0, x0, #0x11
+			204: IMAGE_REL_ARM64_PAGEOFFSET_12A	.text
+ 208:	91003c00 	add	x0, x0, #0xf
+			208: IMAGE_REL_ARM64_PAGEOFFSET_12A	.text
+ 20c:	91000000 	add	x0, x0, #0x0
+			20c: IMAGE_REL_ARM64_PAGEOFFSET_12A	bar
+ 210:	91000400 	add	x0, x0, #0x1
+			210: IMAGE_REL_ARM64_PAGEOFFSET_12A	bar
+ 214:	913ffc00 	add	x0, x0, #0xfff
+			214: IMAGE_REL_ARM64_PAGEOFFSET_12A	bar
+ 218:	913ffc00 	add	x0, x0, #0xfff
+			218: IMAGE_REL_ARM64_PAGEOFFSET_12A	.text
diff --git a/gas/testsuite/gas/pe/pe-aarch64.s b/gas/testsuite/gas/pe/pe-aarch64.s
index 546d55fc361..2a02d2d1c0d 100644
--- a/gas/testsuite/gas/pe/pe-aarch64.s
+++ b/gas/testsuite/gas/pe/pe-aarch64.s
@@ -1,11 +1,157 @@
-# A little test to ensure pe-aarch64 is working in GAS.
-# Currently, the poor pe-aarch64 implementation in binutils
-# couldn't do anything useful, hence, this test is rather short
+.text
 
-.section .text
+.dword 0
+.dword 0
 
-_start:
-    mov x1, 20
-    b foo
 foo:
-    ret
+
+# 4-byte literal
+.long 0x12345678
+.word 0x12345678
+
+# IMAGE_REL_ARM64_ADDR32 (BFD_RELOC_32)
+.long foo
+.word foo
+.long bar
+.word bar
+.long foo + 1
+.word foo + 1
+.long bar + 1
+.word bar + 1
+.long foo - 1
+.word foo - 1
+.long bar - 1
+.word bar - 1
+
+# 8-byte literal
+.dword 0x123456789abcdef0
+.xword 0x123456789abcdef0
+
+# IMAGE_REL_ARM64_ADDR64 (BFD_RELOC_64)
+.dword foo
+.xword foo
+.dword bar
+.xword bar
+.dword foo + 1
+.xword foo + 1
+.dword bar + 1
+.xword bar + 1
+.dword foo - 1
+.xword foo - 1
+.dword bar - 1
+.xword bar - 1
+
+# IMAGE_REL_ARM64_ADDR32NB (BFD_RELOC_RVA)
+.rva foo
+.rva bar
+.rva foo + 1
+.rva bar + 1
+.rva foo - 1
+.rva bar - 1
+
+# IMAGE_REL_ARM64_BRANCH26 (BFD_RELOC_AARCH64_JUMP26)
+b foo
+b foo + 4
+b foo - 4
+b bar
+b bar + 4
+b bar - 4
+
+# IMAGE_REL_ARM64_BRANCH26 (BFD_RELOC_AARCH64_CALL26)
+bl foo
+bl foo + 4
+bl foo - 4
+bl bar
+bl bar + 4
+bl bar - 4
+bl .text - 4
+
+# IMAGE_REL_ARM64_BRANCH19 (BFD_RELOC_AARCH64_BRANCH19)
+cbz x0, foo
+cbz x0, foo + 4
+cbz x0, foo - 4
+cbz x0, bar
+cbz x0, bar + 4
+cbz x0, bar - 4
+cbz x0, .text - 4
+
+# IMAGE_REL_ARM64_BRANCH14 (BFD_RELOC_AARCH64_TSTBR14)
+tbz x0, 0, foo
+tbz x0, 0, foo + 4
+tbz x0, 0, foo - 4
+tbz x0, 0, bar
+tbz x0, 0, bar + 4
+tbz x0, 0, bar - 4
+tbz x0, 0, .text - 4
+
+# IMAGE_REL_ARM64_PAGEBASE_REL21 (BFD_RELOC_AARCH64_ADR_HI21_PCREL)
+adrp x0, foo
+adrp x0, foo + 1
+adrp x0, foo - 1
+adrp x0, bar
+adrp x0, bar + 1
+adrp x0, bar - 1
+adrp x0, .text - 4
+
+# IMAGE_REL_ARM64_REL21 (BFD_RELOC_AARCH64_ADR_LO21_PCREL)
+adr x0, foo
+adr x0, foo + 1
+adr x0, foo - 1
+adr x0, bar
+adr x0, bar + 1
+adr x0, bar - 1
+adr x0, .text - 1
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST8_LO12)
+strb w0, [x0,:lo12:foo]
+strb w0, [x0,:lo12:foo + 4]
+strb w0, [x0,:lo12:foo - 4]
+strb w0, [x0,:lo12:bar]
+strb w0, [x0,:lo12:bar + 4]
+strb w0, [x0,:lo12:bar - 4]
+strb w0, [x0,:lo12:.text - 4]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST16_LO12)
+strh w0, [x0,:lo12:foo]
+strh w0, [x0,:lo12:foo + 4]
+strh w0, [x0,:lo12:foo - 4]
+strh w0, [x0,:lo12:bar]
+strh w0, [x0,:lo12:bar + 4]
+strh w0, [x0,:lo12:bar - 4]
+strh w0, [x0,:lo12:.text - 4]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST32_LO12)
+str w0, [x0,:lo12:foo]
+str w0, [x0,:lo12:foo + 4]
+str w0, [x0,:lo12:foo - 4]
+str w0, [x0,:lo12:bar]
+str w0, [x0,:lo12:bar + 4]
+str w0, [x0,:lo12:bar - 4]
+str w0, [x0,:lo12:.text - 4]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST64_LO12)
+str x0, [x0,:lo12:foo]
+str x0, [x0,:lo12:foo + 8]
+str x0, [x0,:lo12:foo - 8]
+str x0, [x0,:lo12:bar]
+str x0, [x0,:lo12:bar + 8]
+str x0, [x0,:lo12:bar - 8]
+str x0, [x0,:lo12:.text - 8]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST128_LO12)
+str q0, [x0,:lo12:foo]
+str q0, [x0,:lo12:foo + 16]
+str q0, [x0,:lo12:foo - 16]
+str q0, [x0,:lo12:bar]
+str q0, [x0,:lo12:bar + 16]
+str q0, [x0,:lo12:bar - 16]
+str q0, [x0,:lo12:.text - 16]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12A (BFD_RELOC_AARCH64_ADD_LO12)
+add x0, x0, #:lo12:foo
+add x0, x0, #:lo12:foo + 1
+add x0, x0, #:lo12:foo - 1
+add x0, x0, #:lo12:bar
+add x0, x0, #:lo12:bar + 1
+add x0, x0, #:lo12:bar - 1
+add x0, x0, #:lo12:.text - 1
diff --git a/ld/testsuite/ld-pe/aarch64.d b/ld/testsuite/ld-pe/aarch64.d
new file mode 100644
index 00000000000..cc3daf9e9cd
--- /dev/null
+++ b/ld/testsuite/ld-pe/aarch64.d
@@ -0,0 +1,158 @@
+
+tmpdir/aarch64.x:     file format pei-aarch64-little
+
+
+Disassembly of section .text:
+
+0000000000002000 <__rt_psrelocs_end>:
+	...
+
+0000000000002010 <foo>:
+    2010:	12345678 	and	w24, w19, #0xfffff003
+    2014:	12345678 	and	w24, w19, #0xfffff003
+    2018:	00002000 	udf	#8192
+    201c:	00002000 	udf	#8192
+    2020:	00002220 	udf	#8736
+    2024:	00002220 	udf	#8736
+    2028:	00002001 	udf	#8193
+    202c:	00002001 	udf	#8193
+    2030:	00002221 	udf	#8737
+    2034:	00002221 	udf	#8737
+    2038:	00001fff 	udf	#8191
+    203c:	00001fff 	udf	#8191
+    2040:	0000221f 	udf	#8735
+    2044:	0000221f 	udf	#8735
+    2048:	9abcdef0 	.inst	0x9abcdef0 ; undefined
+    204c:	12345678 	and	w24, w19, #0xfffff003
+    2050:	9abcdef0 	.inst	0x9abcdef0 ; undefined
+    2054:	12345678 	and	w24, w19, #0xfffff003
+    2058:	00002000 	udf	#8192
+    205c:	00000000 	udf	#0
+    2060:	00002000 	udf	#8192
+    2064:	00000000 	udf	#0
+    2068:	00002220 	udf	#8736
+    206c:	00000000 	udf	#0
+    2070:	00002220 	udf	#8736
+    2074:	00000000 	udf	#0
+    2078:	00002001 	udf	#8193
+    207c:	00000000 	udf	#0
+    2080:	00002001 	udf	#8193
+    2084:	00000000 	udf	#0
+    2088:	00002221 	udf	#8737
+    208c:	00000000 	udf	#0
+    2090:	00002221 	udf	#8737
+    2094:	00000000 	udf	#0
+    2098:	00001fff 	udf	#8191
+    209c:	00000000 	udf	#0
+    20a0:	00001fff 	udf	#8191
+    20a4:	00000000 	udf	#0
+    20a8:	0000221f 	udf	#8735
+    20ac:	00000000 	udf	#0
+    20b0:	0000221f 	udf	#8735
+    20b4:	00000000 	udf	#0
+    20b8:	00001010 	udf	#4112
+    20bc:	00001220 	udf	#4640
+    20c0:	00001011 	udf	#4113
+    20c4:	00001221 	udf	#4641
+    20c8:	0000100f 	udf	#4111
+    20cc:	0000121f 	udf	#4639
+    20d0:	17ffffd0 	b	2010 <foo>
+    20d4:	17ffffd0 	b	2014 <foo\+0x4>
+    20d8:	17ffffcd 	b	200c <__rt_psrelocs_end\+0xc>
+    20dc:	14000051 	b	2220 <bar>
+    20e0:	14000051 	b	2224 <bar\+0x4>
+    20e4:	1400004e 	b	221c <.text>
+    20e8:	97ffffca 	bl	2010 <foo>
+    20ec:	97ffffca 	bl	2014 <foo\+0x4>
+    20f0:	97ffffc7 	bl	200c <__rt_psrelocs_end\+0xc>
+    20f4:	9400004b 	bl	2220 <bar>
+    20f8:	9400004b 	bl	2224 <bar\+0x4>
+    20fc:	94000048 	bl	221c <.text>
+    2100:	97ffffbf 	bl	1ffc <__ImageBase\+0xffc>
+    2104:	b4fff860 	cbz	x0, 2010 <foo>
+    2108:	b4fff860 	cbz	x0, 2014 <foo\+0x4>
+    210c:	b4fff800 	cbz	x0, 200c <__rt_psrelocs_end\+0xc>
+    2110:	b4000880 	cbz	x0, 2220 <bar>
+    2114:	b4000880 	cbz	x0, 2224 <bar\+0x4>
+    2118:	b4000820 	cbz	x0, 221c <.text>
+    211c:	b4fff700 	cbz	x0, 1ffc <__ImageBase\+0xffc>
+    2120:	3607f780 	tbz	w0, #0, 2010 <foo>
+    2124:	3607f780 	tbz	w0, #0, 2014 <foo\+0x4>
+    2128:	3607f720 	tbz	w0, #0, 200c <__rt_psrelocs_end\+0xc>
+    212c:	360007a0 	tbz	w0, #0, 2220 <bar>
+    2130:	360007a0 	tbz	w0, #0, 2224 <bar\+0x4>
+    2134:	36000740 	tbz	w0, #0, 221c <.text>
+    2138:	3607f620 	tbz	w0, #0, 1ffc <__ImageBase\+0xffc>
+    213c:	90000000 	adrp	x0, 2000 <__rt_psrelocs_end>
+    2140:	90000000 	adrp	x0, 2000 <__rt_psrelocs_end>
+    2144:	90000000 	adrp	x0, 2000 <__rt_psrelocs_end>
+    2148:	90000000 	adrp	x0, 2000 <__rt_psrelocs_end>
+    214c:	90000000 	adrp	x0, 2000 <__rt_psrelocs_end>
+    2150:	90000000 	adrp	x0, 2000 <__rt_psrelocs_end>
+    2154:	f0ffffe0 	adrp	x0, 1000 <__ImageBase>
+    2158:	10fff5c0 	adr	x0, 2010 <foo>
+    215c:	30fff5a0 	adr	x0, 2011 <foo\+0x1>
+    2160:	70fff560 	adr	x0, 200f <__rt_psrelocs_end\+0xf>
+    2164:	100005e0 	adr	x0, 2220 <bar>
+    2168:	300005c0 	adr	x0, 2221 <bar\+0x1>
+    216c:	70000580 	adr	x0, 221f <.text\+0x3>
+    2170:	70fff460 	adr	x0, 1fff <__ImageBase\+0xfff>
+    2174:	39004000 	strb	w0, \[x0, #16\]
+    2178:	39005000 	strb	w0, \[x0, #20\]
+    217c:	39003000 	strb	w0, \[x0, #12\]
+    2180:	39088000 	strb	w0, \[x0, #544\]
+    2184:	39089000 	strb	w0, \[x0, #548\]
+    2188:	39087000 	strb	w0, \[x0, #540\]
+    218c:	393ff000 	strb	w0, \[x0, #4092\]
+    2190:	79002000 	strh	w0, \[x0, #16\]
+    2194:	79002800 	strh	w0, \[x0, #20\]
+    2198:	79001800 	strh	w0, \[x0, #12\]
+    219c:	79044000 	strh	w0, \[x0, #544\]
+    21a0:	79044800 	strh	w0, \[x0, #548\]
+    21a4:	79043800 	strh	w0, \[x0, #540\]
+    21a8:	791ff800 	strh	w0, \[x0, #4092\]
+    21ac:	b9001000 	str	w0, \[x0, #16\]
+    21b0:	b9001400 	str	w0, \[x0, #20\]
+    21b4:	b9000c00 	str	w0, \[x0, #12\]
+    21b8:	b9022000 	str	w0, \[x0, #544\]
+    21bc:	b9022400 	str	w0, \[x0, #548\]
+    21c0:	b9021c00 	str	w0, \[x0, #540\]
+    21c4:	b90ffc00 	str	w0, \[x0, #4092\]
+    21c8:	f9000800 	str	x0, \[x0, #16\]
+    21cc:	f9000c00 	str	x0, \[x0, #24\]
+    21d0:	f9000400 	str	x0, \[x0, #8\]
+    21d4:	f9011000 	str	x0, \[x0, #544\]
+    21d8:	f9011400 	str	x0, \[x0, #552\]
+    21dc:	f9010c00 	str	x0, \[x0, #536\]
+    21e0:	f907fc00 	str	x0, \[x0, #4088\]
+    21e4:	3d800400 	str	q0, \[x0, #16\]
+    21e8:	3d800800 	str	q0, \[x0, #32\]
+    21ec:	3d800000 	str	q0, \[x0\]
+    21f0:	3d808800 	str	q0, \[x0, #544\]
+    21f4:	3d808c00 	str	q0, \[x0, #560\]
+    21f8:	3d808400 	str	q0, \[x0, #528\]
+    21fc:	3d83fc00 	str	q0, \[x0, #4080\]
+    2200:	91004000 	add	x0, x0, #0x10
+    2204:	91004400 	add	x0, x0, #0x11
+    2208:	91003c00 	add	x0, x0, #0xf
+    220c:	91088000 	add	x0, x0, #0x220
+    2210:	91088400 	add	x0, x0, #0x221
+    2214:	91087c00 	add	x0, x0, #0x21f
+    2218:	913ffc00 	add	x0, x0, #0xfff
+
+000000000000221c <.text>:
+    221c:	00000000 	udf	#0
+
+0000000000002220 <bar>:
+    2220:	9abcdef0 	.inst	0x9abcdef0 ; undefined
+    2224:	12345678 	and	w24, w19, #0xfffff003
+
+0000000000002228 <__CTOR_LIST__>:
+    2228:	ffffffff 	.inst	0xffffffff ; undefined
+    222c:	ffffffff 	.inst	0xffffffff ; undefined
+	...
+
+0000000000002238 <__DTOR_LIST__>:
+    2238:	ffffffff 	.inst	0xffffffff ; undefined
+    223c:	ffffffff 	.inst	0xffffffff ; undefined
+	...
diff --git a/ld/testsuite/ld-pe/aarch64a.s b/ld/testsuite/ld-pe/aarch64a.s
new file mode 100644
index 00000000000..58b8f5a00c0
--- /dev/null
+++ b/ld/testsuite/ld-pe/aarch64a.s
@@ -0,0 +1,159 @@
+.text
+
+.dword 0
+.dword 0
+
+# 2010
+.global foo
+foo:
+
+# 4-byte literal
+.long 0x12345678
+.word 0x12345678
+
+# IMAGE_REL_ARM64_ADDR32 (BFD_RELOC_32)
+.long foo
+.word foo
+.long bar
+.word bar
+.long foo + 1
+.word foo + 1
+.long bar + 1
+.word bar + 1
+.long foo - 1
+.word foo - 1
+.long bar - 1
+.word bar - 1
+
+# 8-byte literal
+.dword 0x123456789abcdef0
+.xword 0x123456789abcdef0
+
+# IMAGE_REL_ARM64_ADDR64 (BFD_RELOC_64)
+.dword foo
+.xword foo
+.dword bar
+.xword bar
+.dword foo + 1
+.xword foo + 1
+.dword bar + 1
+.xword bar + 1
+.dword foo - 1
+.xword foo - 1
+.dword bar - 1
+.xword bar - 1
+
+# IMAGE_REL_ARM64_ADDR32NB (BFD_RELOC_RVA)
+.rva foo
+.rva bar
+.rva foo + 1
+.rva bar + 1
+.rva foo - 1
+.rva bar - 1
+
+# IMAGE_REL_ARM64_BRANCH26 (BFD_RELOC_AARCH64_JUMP26)
+b foo
+b foo + 4
+b foo - 4
+b bar
+b bar + 4
+b bar - 4
+
+# IMAGE_REL_ARM64_BRANCH26 (BFD_RELOC_AARCH64_CALL26)
+bl foo
+bl foo + 4
+bl foo - 4
+bl bar
+bl bar + 4
+bl bar - 4
+bl .text - 4
+
+# IMAGE_REL_ARM64_BRANCH19 (BFD_RELOC_AARCH64_BRANCH19)
+cbz x0, foo
+cbz x0, foo + 4
+cbz x0, foo - 4
+cbz x0, bar
+cbz x0, bar + 4
+cbz x0, bar - 4
+cbz x0, .text - 4
+
+# IMAGE_REL_ARM64_BRANCH14 (BFD_RELOC_AARCH64_TSTBR14)
+tbz x0, 0, foo
+tbz x0, 0, foo + 4
+tbz x0, 0, foo - 4
+tbz x0, 0, bar
+tbz x0, 0, bar + 4
+tbz x0, 0, bar - 4
+tbz x0, 0, .text - 4
+
+# IMAGE_REL_ARM64_PAGEBASE_REL21 (BFD_RELOC_AARCH64_ADR_HI21_PCREL)
+adrp x0, foo
+adrp x0, foo + 1
+adrp x0, foo - 1
+adrp x0, bar
+adrp x0, bar + 1
+adrp x0, bar - 1
+adrp x0, .text - 4
+
+# IMAGE_REL_ARM64_REL21 (BFD_RELOC_AARCH64_ADR_LO21_PCREL)
+adr x0, foo
+adr x0, foo + 1
+adr x0, foo - 1
+adr x0, bar
+adr x0, bar + 1
+adr x0, bar - 1
+adr x0, .text - 1
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST8_LO12)
+strb w0, [x0,:lo12:foo]
+strb w0, [x0,:lo12:foo + 4]
+strb w0, [x0,:lo12:foo - 4]
+strb w0, [x0,:lo12:bar]
+strb w0, [x0,:lo12:bar + 4]
+strb w0, [x0,:lo12:bar - 4]
+strb w0, [x0,:lo12:.text - 4]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST16_LO12)
+strh w0, [x0,:lo12:foo]
+strh w0, [x0,:lo12:foo + 4]
+strh w0, [x0,:lo12:foo - 4]
+strh w0, [x0,:lo12:bar]
+strh w0, [x0,:lo12:bar + 4]
+strh w0, [x0,:lo12:bar - 4]
+strh w0, [x0,:lo12:.text - 4]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST32_LO12)
+str w0, [x0,:lo12:foo]
+str w0, [x0,:lo12:foo + 4]
+str w0, [x0,:lo12:foo - 4]
+str w0, [x0,:lo12:bar]
+str w0, [x0,:lo12:bar + 4]
+str w0, [x0,:lo12:bar - 4]
+str w0, [x0,:lo12:.text - 4]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST64_LO12)
+str x0, [x0,:lo12:foo]
+str x0, [x0,:lo12:foo + 8]
+str x0, [x0,:lo12:foo - 8]
+str x0, [x0,:lo12:bar]
+str x0, [x0,:lo12:bar + 8]
+str x0, [x0,:lo12:bar - 8]
+str x0, [x0,:lo12:.text - 8]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12L (BFD_RELOC_AARCH64_LDST128_LO12)
+str q0, [x0,:lo12:foo]
+str q0, [x0,:lo12:foo + 16]
+str q0, [x0,:lo12:foo - 16]
+str q0, [x0,:lo12:bar]
+str q0, [x0,:lo12:bar + 16]
+str q0, [x0,:lo12:bar - 16]
+str q0, [x0,:lo12:.text - 16]
+
+# IMAGE_REL_ARM64_PAGEOFFSET_12A (BFD_RELOC_AARCH64_ADD_LO12)
+add x0, x0, #:lo12:foo
+add x0, x0, #:lo12:foo + 1
+add x0, x0, #:lo12:foo - 1
+add x0, x0, #:lo12:bar
+add x0, x0, #:lo12:bar + 1
+add x0, x0, #:lo12:bar - 1
+add x0, x0, #:lo12:.text - 1
diff --git a/ld/testsuite/ld-pe/aarch64b.s b/ld/testsuite/ld-pe/aarch64b.s
new file mode 100644
index 00000000000..3f4ec48f724
--- /dev/null
+++ b/ld/testsuite/ld-pe/aarch64b.s
@@ -0,0 +1,8 @@
+.text
+
+.long 0
+
+# 2220
+.global bar
+bar:
+.dword 0x123456789abcdef0
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index 613635fd609..c22c6d449f9 100644
--- a/ld/testsuite/ld-pe/pe.exp
+++ b/ld/testsuite/ld-pe/pe.exp
@@ -79,9 +79,15 @@ if {[istarget i*86-*-cygwin*]
 }
 
 if {[istarget "aarch64-*-pe*"]} {
-	run_dump_test "pe-aarch64"
-}
+    run_dump_test "pe-aarch64"
+
+    set pe_tests {
+      {"aarch64" "--image-base 0x1000" "" "" {aarch64a.s aarch64b.s}
+	{{objdump -dr aarch64.d}} "aarch64.x"}
+    }
 
+    run_ld_link_tests $pe_tests
+}
 
 run_dump_test "image_size"
 run_dump_test "export_dynamic_warning"
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 5/7] Add .secrel32 for pe-aarch64
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
                   ` (2 preceding siblings ...)
  2023-01-06  1:25 ` [PATCH 4/7] Add pe-aarch64 relocations Mark Harmstone
@ 2023-01-06  1:25 ` Mark Harmstone
  2023-01-06  1:25 ` [PATCH 6/7] Add aarch64-w64-mingw32 target Mark Harmstone
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

---
 bfd/coff-aarch64.c        | 47 +++++++++++++++++++++++-
 gas/config/tc-aarch64.c   | 75 +++++++++++++++++++++++++++++----------
 gas/config/tc-aarch64.h   |  4 +++
 ld/testsuite/ld-pe/pe.exp |  2 ++
 4 files changed, 108 insertions(+), 20 deletions(-)

diff --git a/bfd/coff-aarch64.c b/bfd/coff-aarch64.c
index d6c48eba63b..8e9081a0e74 100644
--- a/bfd/coff-aarch64.c
+++ b/bfd/coff-aarch64.c
@@ -267,6 +267,20 @@ coff_aarch64_addr32nb_reloc (bfd *abfd ATTRIBUTE_UNUSED,
   return bfd_reloc_ok;
 }
 
+static bfd_reloc_status_type
+coff_aarch64_secrel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			   arelent *reloc_entry,
+			   asymbol *symbol ATTRIBUTE_UNUSED,
+			   void *data,
+			   asection *input_section ATTRIBUTE_UNUSED,
+			   bfd *output_bfd ATTRIBUTE_UNUSED,
+			   char **error_message ATTRIBUTE_UNUSED)
+{
+  bfd_putl32 (reloc_entry->addend, data + reloc_entry->address);
+
+  return bfd_reloc_ok;
+}
+
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value.  */
 #define MINUS_ONE (~ (bfd_vma) 0)
 
@@ -330,6 +344,11 @@ static const reloc_howto_type arm64_reloc_howto_32nb = HOWTO (IMAGE_REL_ARM64_AD
 	 coff_aarch64_addr32nb_reloc, "IMAGE_REL_ARM64_ADDR32NB",
 	 false, 0xffffffff, 0xffffffff, false);
 
+static const reloc_howto_type arm64_reloc_howto_secrel = HOWTO (IMAGE_REL_ARM64_SECREL, 0, 4, 32, false, 0,
+	 complain_overflow_bitfield,
+	 coff_aarch64_secrel_reloc, "IMAGE_REL_ARM64_SECREL",
+	 false, 0xffffffff, 0xffffffff, false);
+
 static const reloc_howto_type* const arm64_howto_table[] = {
      &arm64_reloc_howto_abs,
      &arm64_reloc_howto_64,
@@ -342,7 +361,8 @@ static const reloc_howto_type* const arm64_howto_table[] = {
      &arm64_reloc_howto_branch19,
      &arm64_reloc_howto_branch14,
      &arm64_reloc_howto_pgoff12a,
-     &arm64_reloc_howto_32nb
+     &arm64_reloc_howto_32nb,
+     &arm64_reloc_howto_secrel
 };
 
 #ifndef NUM_ELEM
@@ -387,6 +407,8 @@ coff_aarch64_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real
     return &arm64_reloc_howto_branch19;
   case BFD_RELOC_RVA:
     return &arm64_reloc_howto_32nb;
+  case BFD_RELOC_32_SECREL:
+    return &arm64_reloc_howto_secrel;
   default:
     BFD_FAIL ();
     return NULL;
@@ -441,6 +463,8 @@ coff_aarch64_rtype_lookup (unsigned int code)
       return &arm64_reloc_howto_pgoff12a;
     case IMAGE_REL_ARM64_ADDR32NB:
       return &arm64_reloc_howto_32nb;
+    case IMAGE_REL_ARM64_SECREL:
+      return &arm64_reloc_howto_secrel;
     default:
       BFD_FAIL ();
       return NULL;
@@ -811,6 +835,27 @@ coff_pe_aarch64_relocate_section (bfd *output_bfd,
 	    break;
 	  }
 
+	case IMAGE_REL_ARM64_SECREL:
+	  {
+	    uint64_t val;
+	    int32_t addend;
+
+	    addend = bfd_getl32 (contents + rel->r_vaddr);
+
+	    val = sec->output_offset + sym_value + addend;
+
+	    if (val > 0xffffffff)
+	      (*info->callbacks->reloc_overflow)
+		(info, h ? &h->root : NULL, syms[symndx]._n._n_name,
+		"IMAGE_REL_ARM64_SECREL", addend, input_bfd,
+		input_section, rel->r_vaddr - input_section->vma);
+
+	    bfd_putl32 (val, contents + rel->r_vaddr);
+	    rel->r_type = IMAGE_REL_ARM64_ABSOLUTE;
+
+	    break;
+	  }
+
 	default:
 	  info->callbacks->einfo (_("%F%P: Unhandled relocation type %u\n"),
 				  rel->r_type);
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 25e79431046..ad070cd0618 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -2097,6 +2097,27 @@ s_tlsdescldr (int ignored ATTRIBUTE_UNUSED)
 }
 #endif	/* OBJ_ELF */
 
+#ifdef TE_PE
+static void
+s_secrel (int dummy ATTRIBUTE_UNUSED)
+{
+  expressionS exp;
+
+  do
+    {
+      expression (&exp);
+      if (exp.X_op == O_symbol)
+	exp.X_op = O_secrel;
+
+      emit_expr (&exp, 4);
+    }
+  while (*input_line_pointer++ == ',');
+
+  input_line_pointer--;
+  demand_empty_rest_of_line ();
+}
+#endif	/* TE_PE */
+
 static void s_aarch64_arch (int);
 static void s_aarch64_cpu (int);
 static void s_aarch64_arch_extension (int);
@@ -2131,6 +2152,9 @@ const pseudo_typeS md_pseudo_table[] = {
   {"long", s_aarch64_cons, 4},
   {"xword", s_aarch64_cons, 8},
   {"dword", s_aarch64_cons, 8},
+#endif
+#ifdef TE_PE
+  {"secrel32", s_secrel, 0},
 #endif
   {"float16", float_cons, 'h'},
   {"bfloat16", float_cons, 'b'},
@@ -9268,6 +9292,7 @@ md_apply_fix (fixS * fixP, valueT * valP, segT seg)
       break;
 
     case BFD_RELOC_RVA:
+    case BFD_RELOC_32_SECREL:
       break;
 
     default:
@@ -9353,27 +9378,39 @@ cons_fix_new_aarch64 (fragS * frag, int where, int size, expressionS * exp)
   bfd_reloc_code_real_type type;
   int pcrel = 0;
 
-  /* Pick a reloc.
-     FIXME: @@ Should look at CPU word size.  */
-  switch (size)
+#ifdef TE_PE
+  if (exp->X_op == O_secrel)
     {
-    case 1:
-      type = BFD_RELOC_8;
-      break;
-    case 2:
-      type = BFD_RELOC_16;
-      break;
-    case 4:
-      type = BFD_RELOC_32;
-      break;
-    case 8:
-      type = BFD_RELOC_64;
-      break;
-    default:
-      as_bad (_("cannot do %u-byte relocation"), size);
-      type = BFD_RELOC_UNUSED;
-      break;
+      exp->X_op = O_symbol;
+      type = BFD_RELOC_32_SECREL;
     }
+  else
+    {
+#endif
+    /* Pick a reloc.
+       FIXME: @@ Should look at CPU word size.  */
+    switch (size)
+      {
+      case 1:
+	type = BFD_RELOC_8;
+	break;
+      case 2:
+	type = BFD_RELOC_16;
+	break;
+      case 4:
+	type = BFD_RELOC_32;
+	break;
+      case 8:
+	type = BFD_RELOC_64;
+	break;
+      default:
+	as_bad (_("cannot do %u-byte relocation"), size);
+	type = BFD_RELOC_UNUSED;
+	break;
+      }
+#ifdef TE_PE
+    }
+#endif
 
   fix_new_exp (frag, where, (int) size, exp, pcrel, type);
 }
diff --git a/gas/config/tc-aarch64.h b/gas/config/tc-aarch64.h
index d7d782ca29e..fa4b3ac577e 100644
--- a/gas/config/tc-aarch64.h
+++ b/gas/config/tc-aarch64.h
@@ -314,4 +314,8 @@ extern void aarch64_handle_align (struct frag *);
 extern int tc_aarch64_regname_to_dw2regnum (char *regname);
 extern void tc_aarch64_frame_initial_instructions (void);
 
+#ifdef TE_PE
+#define O_secrel O_md1
+#endif /* TE_PE */
+
 #endif /* TC_AARCH64 */
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index c22c6d449f9..dae8c34066b 100644
--- a/ld/testsuite/ld-pe/pe.exp
+++ b/ld/testsuite/ld-pe/pe.exp
@@ -84,6 +84,8 @@ if {[istarget "aarch64-*-pe*"]} {
     set pe_tests {
       {"aarch64" "--image-base 0x1000" "" "" {aarch64a.s aarch64b.s}
 	{{objdump -dr aarch64.d}} "aarch64.x"}
+      {".secrel32" "--disable-reloc-section" "" "" {secrel1.s secrel2.s}
+	{{objdump -s secrel_64.d}} "secrel.x"}
     }
 
     run_ld_link_tests $pe_tests
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 6/7] Add aarch64-w64-mingw32 target
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
                   ` (3 preceding siblings ...)
  2023-01-06  1:25 ` [PATCH 5/7] Add .secrel32 for pe-aarch64 Mark Harmstone
@ 2023-01-06  1:25 ` Mark Harmstone
  2023-01-06  1:25 ` [PATCH 7/7] gas: Restore tc_pe_dwarf2_emit_offset for pe-aarch64 Mark Harmstone
  2023-01-06  9:47 ` [PATCH 1/7] Fix size of external_reloc " Christophe Lyon
  6 siblings, 0 replies; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

---
 bfd/config.bfd                   |  4 +--
 bfd/peicode.h                    |  2 +-
 binutils/configure               | 10 ++++++
 binutils/configure.ac            | 10 ++++++
 binutils/dlltool.c               | 57 +++++++++++++++++++++++++++++---
 binutils/rescoff.c               |  3 ++
 gas/configure.tgt                |  2 +-
 gas/testsuite/gas/pe/pe.exp      |  2 +-
 ld/configure.tgt                 |  4 +--
 ld/emultempl/pep.em              | 11 +++---
 ld/pe-dll.c                      | 12 +++----
 ld/testsuite/ld-pe/pe-aarch64.d  | 13 ++++++--
 ld/testsuite/ld-pe/pe.exp        |  2 +-
 ld/testsuite/ld-scripts/weak.exp |  1 +
 14 files changed, 109 insertions(+), 24 deletions(-)

diff --git a/bfd/config.bfd b/bfd/config.bfd
index 800afa8105f..0b0f7d50602 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -247,9 +247,9 @@ case "${targ}" in
     targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_le_vec aarch64_pe_le_vec"
     want64=true
     ;;
-  aarch64-*-pe*)
+  aarch64-*-pe* | aarch64-*-mingw*)
     targ_defvec=aarch64_pe_le_vec
-    targ_selvecs="aarch64_pe_le_vec aarch64_pei_le_vec"
+    targ_selvecs="aarch64_pe_le_vec aarch64_pei_le_vec aarch64_elf64_le_vec aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec pdb_vec"
     want64=true
     targ_underscore=no
     ;;
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 6b71f204826..3613b44b48b 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -440,7 +440,7 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 #define SIZEOF_IDATA2		(5 * 4)
 
 /* For PEx64 idata4 & 5 have thumb size of 8 bytes.  */
-#ifdef COFF_WITH_pex64
+#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
 #define SIZEOF_IDATA4		(2 * 4)
 #define SIZEOF_IDATA5		(2 * 4)
 #else
diff --git a/binutils/configure b/binutils/configure
index 20fd420dbaa..f27ee48be73 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -14578,6 +14578,16 @@ do
 	esac
 
 	case $targ in
+	aarch64-*-mingw*)
+	  BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+	  if test -z "$DLLTOOL_DEFAULT"; then
+	    DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_AARCH64"
+	  fi
+	  DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_AARCH64"
+	  BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+	  BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+	  BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
+	  ;;
 	arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*)
   	  BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
 	  if test -z "$DLLTOOL_DEFAULT"; then
diff --git a/binutils/configure.ac b/binutils/configure.ac
index a217c81858f..dc93ac1f390 100644
--- a/binutils/configure.ac
+++ b/binutils/configure.ac
@@ -355,6 +355,16 @@ do
 	esac
 
 	case $targ in
+	aarch64-*-mingw*)
+	  BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
+	  if test -z "$DLLTOOL_DEFAULT"; then
+	    DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_AARCH64"
+	  fi
+	  DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_AARCH64"
+	  BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
+	  BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
+	  BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
+	  ;;
 	arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*)
   	  BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
 	  if test -z "$DLLTOOL_DEFAULT"; then
diff --git a/binutils/dlltool.c b/binutils/dlltool.c
index 7ca6906e2bd..31c864d7d5c 100644
--- a/binutils/dlltool.c
+++ b/binutils/dlltool.c
@@ -442,6 +442,11 @@ static const char *mname = "arm";
 static const char *mname = "arm-wince";
 #endif
 
+#ifdef DLLTOOL_DEFAULT_AARCH64
+/* arm64 rather than aarch64 to match llvm-dlltool */
+static const char *mname = "arm64";
+#endif
+
 #ifdef DLLTOOL_DEFAULT_I386
 static const char *mname = "i386";
 #endif
@@ -560,6 +565,14 @@ static const unsigned char mcore_le_jtab[] =
   0x00, 0x00, 0x00, 0x00 /* <address>      */
 };
 
+static const unsigned char aarch64_jtab[] =
+{
+  0x10, 0x00, 0x00, 0x90, /* adrp x16, 0        */
+  0x10, 0x02, 0x00, 0x91, /* add x16, x16, #0x0 */
+  0x10, 0x02, 0x40, 0xf9, /* ldr x16, [x16]     */
+  0x00, 0x02, 0x1f, 0xd6  /* br x16             */
+};
+
 static const char i386_trampoline[] =
   "\tpushl %%ecx\n"
   "\tpushl %%edx\n"
@@ -717,6 +730,15 @@ mtable[] =
     i386_x64_dljtab, sizeof (i386_x64_dljtab), 2, 9, 14, true, i386_x64_trampoline
   }
   ,
+  {
+#define MAARCH64 10
+    "arm64", ".byte", ".short", ".long", ".asciz", "//",
+    "bl ", ".global", ".space", ".balign\t2", ".balign\t4", "",
+    "pe-aarch64-little", bfd_arch_aarch64,
+    aarch64_jtab, sizeof (aarch64_jtab), 0,
+    0, 0, 0, 0, 0, false, 0
+  }
+  ,
   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
 };
 
@@ -864,6 +886,7 @@ rvaafter (int mach)
     case MMCORE_ELF:
     case MMCORE_ELF_LE:
     case MARM_WINCE:
+    case MAARCH64:
       break;
     default:
       /* xgettext:c-format */
@@ -888,6 +911,7 @@ rvabefore (int mach)
     case MMCORE_ELF:
     case MMCORE_ELF_LE:
     case MARM_WINCE:
+    case MAARCH64:
       return ".rva\t";
     default:
       /* xgettext:c-format */
@@ -910,6 +934,7 @@ asm_prefix (int mach, const char *name)
     case MMCORE_ELF:
     case MMCORE_ELF_LE:
     case MARM_WINCE:
+    case MAARCH64:
       break;
     case M386:
     case MX86:
@@ -2474,6 +2499,8 @@ make_one_lib_file (export_type *exp, int i, int delay)
 	case TEXT:
 	  if (! exp->data)
 	    {
+	      unsigned int rpp_len;
+
 	      si->size = HOW_JTAB_SIZE;
 	      si->data = xmalloc (HOW_JTAB_SIZE);
 	      memcpy (si->data, HOW_JTAB, HOW_JTAB_SIZE);
@@ -2481,7 +2508,12 @@ make_one_lib_file (export_type *exp, int i, int delay)
 	      /* Add the reloc into idata$5.  */
 	      rel = xmalloc (sizeof (arelent));
 
-	      rpp = xmalloc (sizeof (arelent *) * (delay ? 4 : 2));
+	      rpp_len = delay ? 4 : 2;
+
+	      if (machine == MAARCH64)
+		rpp_len++;
+
+	      rpp = xmalloc (sizeof (arelent *) * rpp_len);
 	      rpp[0] = rel;
 	      rpp[1] = 0;
 
@@ -2507,6 +2539,22 @@ make_one_lib_file (export_type *exp, int i, int delay)
 						      BFD_RELOC_32_PCREL);
 		  rel->sym_ptr_ptr = iname_pp;
 		}
+	      else if (machine == MAARCH64)
+		{
+		  arelent *rel_add;
+
+		  rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL);
+		  rel->sym_ptr_ptr = secdata[IDATA5].sympp;
+
+		  rel_add = xmalloc (sizeof (arelent));
+		  rel_add->address = 4;
+		  rel_add->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_AARCH64_ADD_LO12);
+		  rel_add->sym_ptr_ptr = secdata[IDATA5].sympp;
+		  rel_add->addend = 0;
+
+		  rpp[rpp_len - 2] = rel_add;
+		  rpp[rpp_len - 1] = 0;
+		}
 	      else
 		{
 		  rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
@@ -2527,7 +2575,7 @@ make_one_lib_file (export_type *exp, int i, int delay)
 	        }
 
 	      sec->orelocation = rpp;
-	      sec->reloc_count = delay ? 3 : 1;
+	      sec->reloc_count = rpp_len - 1;
 	    }
 	  break;
 
@@ -3674,7 +3722,7 @@ usage (FILE *file, int status)
   fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), program_name);
   /* xgetext:c-format */
   fprintf (file, _("   -m --machine <machine>    Create as DLL for <machine>.  [default: %s]\n"), mname);
-  fprintf (file, _("        possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"));
+  fprintf (file, _("        possible <machine>: arm[_interwork], arm64, i386, mcore[-elf]{-le|-be}, thumb\n"));
   fprintf (file, _("   -e --output-exp <outname> Generate an export file.\n"));
   fprintf (file, _("   -l --output-lib <outname> Generate an interface library.\n"));
   fprintf (file, _("   -y --output-delaylib <outname> Create a delay-import library.\n"));
@@ -3967,7 +4015,8 @@ main (int ac, char **av)
   machine = i;
 
   /* Check if we generated PE+.  */
-  create_for_pep = strcmp (mname, "i386:x86-64") == 0;
+  create_for_pep = strcmp (mname, "i386:x86-64") == 0 ||
+		   strcmp (mname, "arm64") == 0;
 
   {
     /* Check the default underscore */
diff --git a/binutils/rescoff.c b/binutils/rescoff.c
index 1fb6bf41105..40a8f452a1f 100644
--- a/binutils/rescoff.c
+++ b/binutils/rescoff.c
@@ -463,6 +463,9 @@ write_coff_file (const char *filename, const char *target,
 #elif defined DLLTOOL_ARM
   if (! bfd_set_arch_mach (abfd, bfd_arch_arm, 0))
     bfd_fatal ("bfd_set_arch_mach(arm)");
+#elif defined DLLTOOL_AARCH64
+  if (! bfd_set_arch_mach (abfd, bfd_arch_aarch64, 0))
+    bfd_fatal ("bfd_set_arch_mach(aarch64)");
 #else
   /* FIXME: This is obviously i386 specific.  */
   if (! bfd_set_arch_mach (abfd, bfd_arch_i386, 0))
diff --git a/gas/configure.tgt b/gas/configure.tgt
index c210845d567..b7a1874781f 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -135,7 +135,7 @@ case ${generic_target} in
     esac ;;
   aarch64*-*-netbsd*)			fmt=elf em=nbsd;;
   aarch64*-*-openbsd*)			fmt=elf;;
-  aarch64*-*-pe*)			fmt=coff em=pepaarch64 ;;
+  aarch64*-*-pe* | aarch64*-*-mingw*)	fmt=coff em=pepaarch64 ;;
   alpha-*-*vms*)			fmt=evax ;;
   alpha-*-osf*)				fmt=ecoff ;;
   alpha-*-linux*ecoff*)			fmt=ecoff ;;
diff --git a/gas/testsuite/gas/pe/pe.exp b/gas/testsuite/gas/pe/pe.exp
index a1bb4bc6a11..172bc3caf6e 100644
--- a/gas/testsuite/gas/pe/pe.exp
+++ b/gas/testsuite/gas/pe/pe.exp
@@ -54,7 +54,7 @@ if ([istarget "x86_64-*-mingw*"]) then {
 
 
 # This test is only for AArch64
-if ([istarget "aarch64-*-pe*"]) {
+if {[istarget "aarch64-*-pe*"] || [istarget "aarch64-*-mingw*"]} {
 	run_dump_test "pe-aarch64"
 }
 
diff --git a/ld/configure.tgt b/ld/configure.tgt
index aa74d2521bf..4f9a61f95ce 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -118,10 +118,10 @@ aarch64-*-linux*)	targ_emul=aarch64linux
 aarch64-*-haiku*)	targ_emul=aarch64haiku
 			targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb armelf_haiku $targ_extra_libpath"
 			;;
-aarch64-*-pe*)
+aarch64-*-pe* | aarch64-*-mingw*)
 			targ_emul=aarch64pe
 			targ_extra_emuls="arm64pe"
-			targ_extra_ofiles="deffilep.o pep-dll-aarch64.o"
+			targ_extra_ofiles="deffilep.o pep-dll-aarch64.o pe-dll.o"
 			;;
 alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
 			targ_emul=elf64alpha_fbsd
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index d61cab86d75..d900e384d51 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -117,7 +117,7 @@ ${pdb_support+#include \"pdb.h\"}
 #define PE_DEF_SECTION_ALIGNMENT ${OVERRIDE_SECTION_ALIGNMENT}
 #endif
 
-#ifdef TARGET_IS_i386pep
+#if defined(TARGET_IS_i386pep) || defined(COFF_WITH_peAArch64)
 #define DLL_SUPPORT
 #endif
 
@@ -126,7 +126,7 @@ ${pdb_support+#include \"pdb.h\"}
 					 | IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA \
   					 | IMAGE_DLL_CHARACTERISTICS_NX_COMPAT)
 
-#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
+#if defined(TARGET_IS_i386pep) || defined(COFF_WITH_peAArch64) || ! defined(DLL_SUPPORT)
 #define	PE_DEF_SUBSYSTEM		3
 #undef NT_EXE_IMAGE_BASE
 #define NT_EXE_IMAGE_BASE \
@@ -1218,6 +1218,7 @@ make_import_fixup (arelent *rel, asection *s, char *name, const char *symname)
       else if (suc)
 	_addend = bfd_get_16 (s->owner, addend);
       break;
+    case 26:
     case 32:
       suc = bfd_get_section_contents (s->owner, s, addend, rel->address, 4);
       if (suc && rel->howto->pc_relative)
@@ -1573,14 +1574,14 @@ gld${EMULATION_NAME}_after_open (void)
   if (pep_enable_stdcall_fixup) /* -1=warn or 1=enable */
     pep_fixup_stdcalls ();
 
-#ifndef TARGET_IS_i386pep
+#if !defined(TARGET_IS_i386pep) && !defined(COFF_WITH_peAArch64)
   if (bfd_link_pic (&link_info))
 #else
   if (!bfd_link_relocatable (&link_info))
 #endif
     pep_dll_build_sections (link_info.output_bfd, &link_info);
 
-#ifndef TARGET_IS_i386pep
+#if !defined(TARGET_IS_i386pep) && !defined(COFF_WITH_peAArch64)
   else
     pep_exe_build_sections (link_info.output_bfd, &link_info);
 #endif
@@ -1876,6 +1877,8 @@ gld${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE
 #ifdef DLL_SUPPORT
 #ifdef TARGET_IS_i386pep
   pep_dll_id_target ("pei-x86-64");
+#elif defined(COFF_WITH_peAArch64)
+  pep_dll_id_target ("pei-aarch64-little");
 #endif
   if (pep_bfd_is_dll (entry->the_bfd))
     return pep_implied_import_dll (entry->filename);
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index de876ca5094..a2584c39d0d 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -2257,13 +2257,12 @@ static const unsigned char jmp_ix86_bytes[] =
   0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90
 };
 
-/* _function:
-  b <__imp_function>
-  nop */
 static const unsigned char jmp_aarch64_bytes[] =
 {
-  0x00, 0x00, 0x00, 0x14,
-  0x1f, 0x20, 0x03, 0xD5
+  0x10, 0x00, 0x00, 0x90, /* adrp x16, 0        */
+  0x10, 0x02, 0x00, 0x91, /* add x16, x16, #0x0 */
+  0x10, 0x02, 0x40, 0xf9, /* ldr x16, [x16]     */
+  0x00, 0x02, 0x1f, 0xd6  /* br x16             */
 };
 
 /* _function:
@@ -2431,7 +2430,8 @@ make_one (def_file_export *exp, bfd *parent, bool include_jmp_stub)
 	  quick_reloc (abfd, 8, BFD_RELOC_32, 2);
 	  break;
 	case PE_ARCH_aarch64:
-	  quick_reloc (abfd, 0, BFD_RELOC_AARCH64_JUMP26, 2);
+	  quick_reloc (abfd, 0, BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL, 2);
+	  quick_reloc (abfd, 4, BFD_RELOC_AARCH64_ADD_LO12, 2);
 	  break;
 	default:
 	  abort ();
diff --git a/ld/testsuite/ld-pe/pe-aarch64.d b/ld/testsuite/ld-pe/pe-aarch64.d
index fac02b5fd87..ab6370fb514 100644
--- a/ld/testsuite/ld-pe/pe-aarch64.d
+++ b/ld/testsuite/ld-pe/pe-aarch64.d
@@ -6,11 +6,20 @@
 
 Disassembly of section .text:
 
-0000000140001000 <__rt_psrelocs_end>:
+0000000140001000 <___crt_xc_end__>:
    140001000:	d2800281 	mov	x1, #0x14                  	// #20
    140001004:	14000001 	b	140001008 <foo>
 
 0000000140001008 <foo>:
    140001008:	d65f03c0 	ret
    14000100c:	00000000 	udf	#0
-#...
+
+0000000140001010 <__CTOR_LIST__>:
+   140001010:	ffffffff 	.inst	0xffffffff ; undefined
+   140001014:	ffffffff 	.inst	0xffffffff ; undefined
+	...
+
+0000000140001020 <__DTOR_LIST__>:
+   140001020:	ffffffff 	.inst	0xffffffff ; undefined
+   140001024:	ffffffff 	.inst	0xffffffff ; undefined
+	...
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index dae8c34066b..c4d48bb8c08 100644
--- a/ld/testsuite/ld-pe/pe.exp
+++ b/ld/testsuite/ld-pe/pe.exp
@@ -78,7 +78,7 @@ if {[istarget i*86-*-cygwin*]
     run_ld_link_tests $pe_tests
 }
 
-if {[istarget "aarch64-*-pe*"]} {
+if {[istarget "aarch64-*-pe*"] || [istarget "aarch64-*-mingw*"]} {
     run_dump_test "pe-aarch64"
 
     set pe_tests {
diff --git a/ld/testsuite/ld-scripts/weak.exp b/ld/testsuite/ld-scripts/weak.exp
index 78d0616a0e1..bf6f8862571 100644
--- a/ld/testsuite/ld-scripts/weak.exp
+++ b/ld/testsuite/ld-scripts/weak.exp
@@ -31,6 +31,7 @@ if {! [is_elf_format] && ! [is_pecoff_format]} {
 # Weak symbols are broken for most PE targets.
 if {! [istarget i?86-*-*] && ! [istarget sh-*-*]} {
     setup_xfail *-*-pe*
+    setup_xfail *-*-mingw*
 }
 
 # hppa64 is incredibly broken
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 7/7] gas: Restore tc_pe_dwarf2_emit_offset for pe-aarch64
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
                   ` (4 preceding siblings ...)
  2023-01-06  1:25 ` [PATCH 6/7] Add aarch64-w64-mingw32 target Mark Harmstone
@ 2023-01-06  1:25 ` Mark Harmstone
  2023-01-06  9:47 ` [PATCH 1/7] Fix size of external_reloc " Christophe Lyon
  6 siblings, 0 replies; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06  1:25 UTC (permalink / raw)
  To: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker
  Cc: Mark Harmstone

---
 gas/config/tc-aarch64.c | 11 +++++++++++
 gas/config/tc-aarch64.h |  5 +++++
 2 files changed, 16 insertions(+)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index ad070cd0618..2b74db256a2 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -2116,6 +2116,17 @@ s_secrel (int dummy ATTRIBUTE_UNUSED)
   input_line_pointer--;
   demand_empty_rest_of_line ();
 }
+
+void
+tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
+{
+  expressionS exp;
+
+  exp.X_op = O_secrel;
+  exp.X_add_symbol = symbol;
+  exp.X_add_number = 0;
+  emit_expr (&exp, size);
+}
 #endif	/* TE_PE */
 
 static void s_aarch64_arch (int);
diff --git a/gas/config/tc-aarch64.h b/gas/config/tc-aarch64.h
index fa4b3ac577e..134c1f87b4f 100644
--- a/gas/config/tc-aarch64.h
+++ b/gas/config/tc-aarch64.h
@@ -315,7 +315,12 @@ extern int tc_aarch64_regname_to_dw2regnum (char *regname);
 extern void tc_aarch64_frame_initial_instructions (void);
 
 #ifdef TE_PE
+
 #define O_secrel O_md1
+
+#define TC_DWARF2_EMIT_OFFSET  tc_pe_dwarf2_emit_offset
+void tc_pe_dwarf2_emit_offset (symbolS *, unsigned int);
+
 #endif /* TE_PE */
 
 #endif /* TC_AARCH64 */
-- 
2.37.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64
  2023-01-06  1:25 ` [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64 Mark Harmstone
@ 2023-01-06  8:11   ` Jan Beulich
  2023-01-06 17:48     ` Mark Harmstone
  0 siblings, 1 reply; 18+ messages in thread
From: Jan Beulich @ 2023-01-06  8:11 UTC (permalink / raw)
  To: Mark Harmstone
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker

On 06.01.2023 02:25, Mark Harmstone wrote:
> --- a/binutils/testsuite/binutils-all/objcopy.exp
> +++ b/binutils/testsuite/binutils-all/objcopy.exp
> @@ -1411,6 +1411,7 @@ proc objcopy_test_without_global_symbol { } {
>  # The AArch64 and ARM targets preserve mapping symbols
>  # in object files, so they will fail this test.
>  setup_xfail aarch64*-*-* arm*-*-*
> +clear_xfail aarch64*-*-pe* aarch64*-*-mingw*

This change clearly doesn't fit with the title, and hence would better be
a separate change.

> --- a/gas/testsuite/gas/aarch64/adr_1.d
> +++ b/gas/testsuite/gas/aarch64/adr_1.d
> @@ -1,5 +1,6 @@
>  #as: -mabi=lp64
>  #objdump: -dr
> +#notarget: *-*-pe* *-*-mingw*

While it's up to the arch maintainers to judge, to me there's nothing ELF-
specific in this and similar tests; all you need to do is adjust the
expectations to also accept the COFF form of the respective relocations.
That's what we do on x86, for example.

> --- a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
> +++ b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
> @@ -1,5 +1,6 @@
>  #source: advsimd-mov-bad.s
>  #readelf: -s --wide
> +#notarget: *-*-pe* *-*-mingw*

Tests using readelf, otoh, are appropriate to exclude. I wonder though
whether that wouldn't better be done in a more generic manner.

Jan

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/7] Skip big-obj test for pe-aarch64
  2023-01-06  1:25 ` [PATCH 3/7] Skip big-obj test for pe-aarch64 Mark Harmstone
@ 2023-01-06  8:12   ` Jan Beulich
  0 siblings, 0 replies; 18+ messages in thread
From: Jan Beulich @ 2023-01-06  8:12 UTC (permalink / raw)
  To: Mark Harmstone
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker

On 06.01.2023 02:25, Mark Harmstone wrote:

Why? The latest here it becomes quite obvious that your patches lack proper
descriptions.

Jan

> ---
>  gas/testsuite/gas/pe/big-obj.d | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/gas/testsuite/gas/pe/big-obj.d b/gas/testsuite/gas/pe/big-obj.d
> index 27b351a7d60..ad44cd51310 100644
> --- a/gas/testsuite/gas/pe/big-obj.d
> +++ b/gas/testsuite/gas/pe/big-obj.d
> @@ -1,6 +1,7 @@
>  #as: -mbig-obj
>  #objdump: -h
>  #name: PE big obj
> +#notarget: aarch64-*
>  
>  .*: *file format pe-bigobj-.*
>  


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
                   ` (5 preceding siblings ...)
  2023-01-06  1:25 ` [PATCH 7/7] gas: Restore tc_pe_dwarf2_emit_offset for pe-aarch64 Mark Harmstone
@ 2023-01-06  9:47 ` Christophe Lyon
  2023-01-06 17:51   ` Mark Harmstone
  6 siblings, 1 reply; 18+ messages in thread
From: Christophe Lyon @ 2023-01-06  9:47 UTC (permalink / raw)
  To: Mark Harmstone, binutils, Tamar.Christina, nickc, pinskia,
	Richard.Earnshaw, nightstrike, wej22007, zac.walker

Hi!

I am not a maintainer, but would you mind adding proper commit messages 
describing what each patch does (or intends to)?

Thanks,

Christophe


On 1/6/23 02:25, Mark Harmstone wrote:
> Resubmission of aarch64-w64-mingw32 patches against Nick's arm64pe patch.
> 
> ---
>   bfd/coff-aarch64.c     | 4 ----
>   include/coff/aarch64.h | 3 +--
>   2 files changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/bfd/coff-aarch64.c b/bfd/coff-aarch64.c
> index 8a514b278ee..236cbb79ffb 100644
> --- a/bfd/coff-aarch64.c
> +++ b/bfd/coff-aarch64.c
> @@ -188,10 +188,6 @@ coff_aarch64_rtype_lookup (unsigned int code)
>   #define bfd_pe_print_pdata      NULL
>   #endif
>   
> -/* Handle include/coff/aarch64.h external_reloc.  */
> -#define SWAP_IN_RELOC_OFFSET	H_GET_32
> -#define SWAP_OUT_RELOC_OFFSET	H_PUT_32
> -
>   /* Return TRUE if this relocation should
>      appear in the output .reloc section.  */
>   
> diff --git a/include/coff/aarch64.h b/include/coff/aarch64.h
> index 7592661553f..4616cfef2b8 100644
> --- a/include/coff/aarch64.h
> +++ b/include/coff/aarch64.h
> @@ -54,11 +54,10 @@ 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 RELSZ 10
>   
>   /* ARM64 relocations types. */
>   

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64
  2023-01-06  8:11   ` Jan Beulich
@ 2023-01-06 17:48     ` Mark Harmstone
  2023-01-09  7:59       ` Jan Beulich
  0 siblings, 1 reply; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06 17:48 UTC (permalink / raw)
  To: Jan Beulich
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker

On 6/1/23 08:11, Jan Beulich wrote:
> On 06.01.2023 02:25, Mark Harmstone wrote:
>> --- a/binutils/testsuite/binutils-all/objcopy.exp
>> +++ b/binutils/testsuite/binutils-all/objcopy.exp
>> @@ -1411,6 +1411,7 @@ proc objcopy_test_without_global_symbol { } {
>>   # The AArch64 and ARM targets preserve mapping symbols
>>   # in object files, so they will fail this test.
>>   setup_xfail aarch64*-*-* arm*-*-*
>> +clear_xfail aarch64*-*-pe* aarch64*-*-mingw*
> This change clearly doesn't fit with the title, and hence would better be
> a separate change.
>
>> --- a/gas/testsuite/gas/aarch64/adr_1.d
>> +++ b/gas/testsuite/gas/aarch64/adr_1.d
>> @@ -1,5 +1,6 @@
>>   #as: -mabi=lp64
>>   #objdump: -dr
>> +#notarget: *-*-pe* *-*-mingw*
> While it's up to the arch maintainers to judge, to me there's nothing ELF-
> specific in this and similar tests; all you need to do is adjust the
> expectations to also accept the COFF form of the respective relocations.
> That's what we do on x86, for example.
>
>> --- a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
>> +++ b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
>> @@ -1,5 +1,6 @@
>>   #source: advsimd-mov-bad.s
>>   #readelf: -s --wide
>> +#notarget: *-*-pe* *-*-mingw*
> Tests using readelf, otoh, are appropriate to exclude. I wonder though
> whether that wouldn't better be done in a more generic manner.
>
> Jan

Hi Jan,

This patch series has already been approved by Nick. I'm resubmitting it because of a last-minute change that ARM insisted we make.

As I think I said before, I'm indifferent towards the two test patches. I'm including them as a courtesy, because they helped reduce the noise when I was working on the rest of the patches. I'm happy to leave them out if they're at all contentious.

Mark


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-06  9:47 ` [PATCH 1/7] Fix size of external_reloc " Christophe Lyon
@ 2023-01-06 17:51   ` Mark Harmstone
  2023-01-09  8:11     ` Jan Beulich
  0 siblings, 1 reply; 18+ messages in thread
From: Mark Harmstone @ 2023-01-06 17:51 UTC (permalink / raw)
  To: Christophe Lyon, binutils, Tamar.Christina, nickc, pinskia,
	Richard.Earnshaw, nightstrike, wej22007, zac.walker

On 6/1/23 09:47, Christophe Lyon wrote:
> Hi!
>
> I am not a maintainer, but would you mind adding proper commit messages describing what each patch does (or intends to)?
>
> Thanks,
>
> Christophe

Hi Christophe,

This is a resubmission of a patch set from a few days ago, because of a change that Tamar wanted. If you're interested in the discussion behind each patch, it's available in the mailing list archives.

Mark


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64
  2023-01-06 17:48     ` Mark Harmstone
@ 2023-01-09  7:59       ` Jan Beulich
  0 siblings, 0 replies; 18+ messages in thread
From: Jan Beulich @ 2023-01-09  7:59 UTC (permalink / raw)
  To: Mark Harmstone
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker

On 06.01.2023 18:48, Mark Harmstone wrote:
> On 6/1/23 08:11, Jan Beulich wrote:
>> On 06.01.2023 02:25, Mark Harmstone wrote:
>>> --- a/binutils/testsuite/binutils-all/objcopy.exp
>>> +++ b/binutils/testsuite/binutils-all/objcopy.exp
>>> @@ -1411,6 +1411,7 @@ proc objcopy_test_without_global_symbol { } {
>>>   # The AArch64 and ARM targets preserve mapping symbols
>>>   # in object files, so they will fail this test.
>>>   setup_xfail aarch64*-*-* arm*-*-*
>>> +clear_xfail aarch64*-*-pe* aarch64*-*-mingw*
>> This change clearly doesn't fit with the title, and hence would better be
>> a separate change.
>>
>>> --- a/gas/testsuite/gas/aarch64/adr_1.d
>>> +++ b/gas/testsuite/gas/aarch64/adr_1.d
>>> @@ -1,5 +1,6 @@
>>>   #as: -mabi=lp64
>>>   #objdump: -dr
>>> +#notarget: *-*-pe* *-*-mingw*
>> While it's up to the arch maintainers to judge, to me there's nothing ELF-
>> specific in this and similar tests; all you need to do is adjust the
>> expectations to also accept the COFF form of the respective relocations.
>> That's what we do on x86, for example.
>>
>>> --- a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
>>> +++ b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
>>> @@ -1,5 +1,6 @@
>>>   #source: advsimd-mov-bad.s
>>>   #readelf: -s --wide
>>> +#notarget: *-*-pe* *-*-mingw*
>> Tests using readelf, otoh, are appropriate to exclude. I wonder though
>> whether that wouldn't better be done in a more generic manner.
> 
> This patch series has already been approved by Nick. I'm resubmitting it because of a last-minute change that ARM insisted we make.
> 
> As I think I said before, I'm indifferent towards the two test patches. I'm including them as a courtesy, because they helped reduce the noise when I was working on the rest of the patches. I'm happy to leave them out if they're at all contentious.

My request wasn't to leave them out, but to properly split them and to avoid
excluding (or xfail) tests when instead test expectations could/should be
adjusted. If Nick has given you approval for the present shape, then so be
it, and then my remarks are largely a suggestion to consider for future
changes.

Jan

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-06 17:51   ` Mark Harmstone
@ 2023-01-09  8:11     ` Jan Beulich
  2023-01-09  9:22       ` Christophe Lyon
  0 siblings, 1 reply; 18+ messages in thread
From: Jan Beulich @ 2023-01-09  8:11 UTC (permalink / raw)
  To: Mark Harmstone
  Cc: Christophe Lyon, binutils, Tamar.Christina, nickc, pinskia,
	Richard.Earnshaw, nightstrike, wej22007, zac.walker

On 06.01.2023 18:51, Mark Harmstone wrote:
> On 6/1/23 09:47, Christophe Lyon wrote:
>> Hi!
>>
>> I am not a maintainer, but would you mind adding proper commit messages describing what each patch does (or intends to)?
>>
>> Thanks,
>>
>> Christophe
> 
> Hi Christophe,
> 
> This is a resubmission of a patch set from a few days ago, because of a change that Tamar wanted. If you're interested in the discussion behind each patch, it's available in the mailing list archives.

I'm afraid pointing to list archives for explanations on patches isn't a good
approach. Once committed, such links will not be easy to (re-)establish.
Other projects are quite a bit more demanding towards the content of commit
messages, but I guess some minimal level of explanation wants to be in the
average binutils patch as well.

Jan

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-09  8:11     ` Jan Beulich
@ 2023-01-09  9:22       ` Christophe Lyon
  2023-01-09 18:03         ` Mark Harmstone
  0 siblings, 1 reply; 18+ messages in thread
From: Christophe Lyon @ 2023-01-09  9:22 UTC (permalink / raw)
  To: Jan Beulich, Mark Harmstone
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker



On 1/9/23 09:11, Jan Beulich wrote:
> On 06.01.2023 18:51, Mark Harmstone wrote:
>> On 6/1/23 09:47, Christophe Lyon wrote:
>>> Hi!
>>>
>>> I am not a maintainer, but would you mind adding proper commit messages describing what each patch does (or intends to)?
>>>
>>> Thanks,
>>>
>>> Christophe
>>
>> Hi Christophe,
>>
>> This is a resubmission of a patch set from a few days ago, because of a change that Tamar wanted. If you're interested in the discussion behind each patch, it's available in the mailing list archives.
> 
> I'm afraid pointing to list archives for explanations on patches isn't a good
> approach. Once committed, such links will not be easy to (re-)establish.
> Other projects are quite a bit more demanding towards the content of commit
> messages, but I guess some minimal level of explanation wants to be in the
> average binutils patch as well.
> 

That's what I meant I think, thanks for rephrasing :-)

I can't find guidelines on how to contribute patches for binutils, but 
they are similar to GCC's and GDB's. If you just run 'git log' in a 
binutils clone, you'll see what we mean: in addition to short a summary 
(title), commit messages include a description of what the commit does 
and why this is the right change.

It's great if all your changes are obvious for Nick, but they are not 
for others like me ;-)

For instance this patch 1/7 only says "Fix size of external_reloc for 
pe-aarch64", so why is the removal of 
SWAP_IN_RELOC_OFFSET/SWAP_OUT_RELOC_OFFSET and r_offset needed?

I did check the list archives, so if I'm not mistaken this is third 
iteration of this patch series? (I saw 1/5 and 1/8 in December, then 
this one in January). The first iteration had an introduction message 
which led to a discussion with Jan and Tamar, and I think an updated 
version of that message would help here, when others will have to try to 
understand these patches in whatever future time ;-)

Also as Jan mentioned on your testsuite patches, can you describe why we 
have to skip so many of them? Jan seems to think that they could be 
adjusted to cope with both formats intead.

Thanks,

Christophe

> Jan

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-09  9:22       ` Christophe Lyon
@ 2023-01-09 18:03         ` Mark Harmstone
  2023-01-10  8:58           ` Jan Beulich
  0 siblings, 1 reply; 18+ messages in thread
From: Mark Harmstone @ 2023-01-09 18:03 UTC (permalink / raw)
  To: Christophe Lyon, Jan Beulich
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker

On 9/1/23 09:22, Christophe Lyon wrote:
>
>
> On 1/9/23 09:11, Jan Beulich wrote:
>> On 06.01.2023 18:51, Mark Harmstone wrote:
>>> On 6/1/23 09:47, Christophe Lyon wrote:
>>>> Hi!
>>>>
>>>> I am not a maintainer, but would you mind adding proper commit messages describing what each patch does (or intends to)?
>>>>
>>>> Thanks,
>>>>
>>>> Christophe
>>>
>>> Hi Christophe,
>>>
>>> This is a resubmission of a patch set from a few days ago, because of a change that Tamar wanted. If you're interested in the discussion behind each patch, it's available in the mailing list archives.
>>
>> I'm afraid pointing to list archives for explanations on patches isn't a good
>> approach. Once committed, such links will not be easy to (re-)establish.
>> Other projects are quite a bit more demanding towards the content of commit
>> messages, but I guess some minimal level of explanation wants to be in the
>> average binutils patch as well.
>>
>
> That's what I meant I think, thanks for rephrasing :-)
>
> I can't find guidelines on how to contribute patches for binutils, but they are similar to GCC's and GDB's. If you just run 'git log' in a binutils clone, you'll see what we mean: in addition to short a summary (title), commit messages include a description of what the commit does and why this is the right change.
>
> It's great if all your changes are obvious for Nick, but they are not for others like me ;-)
>
> For instance this patch 1/7 only says "Fix size of external_reloc for pe-aarch64", so why is the removal of SWAP_IN_RELOC_OFFSET/SWAP_OUT_RELOC_OFFSET and r_offset needed?
>
> I did check the list archives, so if I'm not mistaken this is third iteration of this patch series? (I saw 1/5 and 1/8 in December, then this one in January). The first iteration had an introduction message which led to a discussion with Jan and Tamar, and I think an updated version of that message would help here, when others will have to try to understand these patches in whatever future time ;-)
>
> Also as Jan mentioned on your testsuite patches, can you describe why we have to skip so many of them? Jan seems to think that they could be adjusted to cope with both formats intead.
>
> Thanks,
>
> Christophe
>
>> Jan

You both raise good points. Sorry, I still find mailing list culture very confusing, compared to something like GitHub... it's not at all clear what you're expected to do, who has what authority, etc. I'm not at all certain that I was even expected to resubmit the patches the third time, given it was more or less a trivial rebase.

Jan, I suggest that I push patches 1 and 4-7 with the original messages, and save the two test patches for a later date. Would that be acceptable? Patches 2 and 3 probably should have been submitted separately anyway, as the later patches don't depend on them.

Mark


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-09 18:03         ` Mark Harmstone
@ 2023-01-10  8:58           ` Jan Beulich
  2023-01-10 23:32             ` Mark Harmstone
  0 siblings, 1 reply; 18+ messages in thread
From: Jan Beulich @ 2023-01-10  8:58 UTC (permalink / raw)
  To: Mark Harmstone
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker, Christophe Lyon

On 09.01.2023 19:03, Mark Harmstone wrote:
> You both raise good points. Sorry, I still find mailing list culture very confusing, compared to something like GitHub... it's not at all clear what you're expected to do, who has what authority, etc. I'm not at all certain that I was even expected to resubmit the patches the third time, given it was more or less a trivial rebase.
> 
> Jan, I suggest that I push patches 1 and 4-7 with the original messages, and save the two test patches for a later date. Would that be acceptable?

I think so, yes. Looking at just patch 1, its original description was first
talking about the series as a whole. That part would better be omitted. Each
patch's description should speak just for itself.

Jan

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/7] Fix size of external_reloc for pe-aarch64
  2023-01-10  8:58           ` Jan Beulich
@ 2023-01-10 23:32             ` Mark Harmstone
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Harmstone @ 2023-01-10 23:32 UTC (permalink / raw)
  To: Jan Beulich
  Cc: binutils, Tamar.Christina, nickc, pinskia, Richard.Earnshaw,
	nightstrike, wej22007, zac.walker, Christophe Lyon

On 10/1/23 08:58, Jan Beulich wrote:
> On 09.01.2023 19:03, Mark Harmstone wrote:
>> You both raise good points. Sorry, I still find mailing list culture very confusing, compared to something like GitHub... it's not at all clear what you're expected to do, who has what authority, etc. I'm not at all certain that I was even expected to resubmit the patches the third time, given it was more or less a trivial rebase.
>>
>> Jan, I suggest that I push patches 1 and 4-7 with the original messages, and save the two test patches for a later date. Would that be acceptable?
> I think so, yes. Looking at just patch 1, its original description was first
> talking about the series as a whole. That part would better be omitted. Each
> patch's description should speak just for itself.
>
> Jan

Thanks Jan, it's in now.

Mark


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2023-01-10 23:32 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-06  1:25 [PATCH 1/7] Fix size of external_reloc for pe-aarch64 Mark Harmstone
2023-01-06  1:25 ` [PATCH 2/7] Skip ELF-specific tests when targeting pe-aarch64 Mark Harmstone
2023-01-06  8:11   ` Jan Beulich
2023-01-06 17:48     ` Mark Harmstone
2023-01-09  7:59       ` Jan Beulich
2023-01-06  1:25 ` [PATCH 3/7] Skip big-obj test for pe-aarch64 Mark Harmstone
2023-01-06  8:12   ` Jan Beulich
2023-01-06  1:25 ` [PATCH 4/7] Add pe-aarch64 relocations Mark Harmstone
2023-01-06  1:25 ` [PATCH 5/7] Add .secrel32 for pe-aarch64 Mark Harmstone
2023-01-06  1:25 ` [PATCH 6/7] Add aarch64-w64-mingw32 target Mark Harmstone
2023-01-06  1:25 ` [PATCH 7/7] gas: Restore tc_pe_dwarf2_emit_offset for pe-aarch64 Mark Harmstone
2023-01-06  9:47 ` [PATCH 1/7] Fix size of external_reloc " Christophe Lyon
2023-01-06 17:51   ` Mark Harmstone
2023-01-09  8:11     ` Jan Beulich
2023-01-09  9:22       ` Christophe Lyon
2023-01-09 18:03         ` Mark Harmstone
2023-01-10  8:58           ` Jan Beulich
2023-01-10 23:32             ` Mark Harmstone

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).