* [PATCH 2/5] Skip ELF-specific tests when targeting pe-aarch64
2022-12-16 2:13 [PATCH 1/5] Fix size of external_reloc for pe-aarch64 Mark Harmstone
@ 2022-12-16 2:13 ` Mark Harmstone
2022-12-16 7:07 ` Jan Beulich
2022-12-16 2:13 ` [PATCH 3/5] Add pe-aarch64 relocations Mark Harmstone
` (3 subsequent siblings)
4 siblings, 1 reply; 16+ messages in thread
From: Mark Harmstone @ 2022-12-16 2:13 UTC (permalink / raw)
To: binutils, wej22007, zac.walker; +Cc: Mark Harmstone
There's currently an awful lot of test failures for pe-aarch64, because
of tests that assume that aarch64 implies ELF. This sets notarget for
these.
---
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 +
gas/testsuite/gas/pe/big-obj.d | 1 +
ld/testsuite/ld-scripts/weak.exp | 1 +
129 files changed, 129 insertions(+), 7 deletions(-)
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index de6f3aaaef2..40d18a0dc92 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -1413,6 +1413,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 56044248b2e..5cd302ad9f3 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 *-*-riscix*
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-mingw*
.*: +file format.*aarch64.*
diff --git a/gas/testsuite/gas/aarch64/mapmisc.d b/gas/testsuite/gas/aarch64/mapmisc.d
index 1f2df6ea0d7..1a2ea4456f7 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 *-*-riscix*
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-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 ece7de1cb7b..7805cadebd5 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 *-*-riscix*
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-mingw*
.*: +file format.*aarch64.*
diff --git a/gas/testsuite/gas/aarch64/mapping4.d b/gas/testsuite/gas/aarch64/mapping4.d
index d0495dafed4..324eea04b41 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 *-*-riscix*
+#notarget: *-*-*coff *-*-pe* *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-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 .*
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-.*
diff --git a/ld/testsuite/ld-scripts/weak.exp b/ld/testsuite/ld-scripts/weak.exp
index 68d70240f7b..2826e3bee78 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] 16+ messages in thread
* [PATCH 3/5] Add pe-aarch64 relocations
2022-12-16 2:13 [PATCH 1/5] Fix size of external_reloc for pe-aarch64 Mark Harmstone
2022-12-16 2:13 ` [PATCH 2/5] Skip ELF-specific tests when targeting pe-aarch64 Mark Harmstone
@ 2022-12-16 2:13 ` Mark Harmstone
2022-12-16 2:13 ` [PATCH 4/5] Add .secrel32 for pe-aarch64 Mark Harmstone
` (2 subsequent siblings)
4 siblings, 0 replies; 16+ messages in thread
From: Mark Harmstone @ 2022-12-16 2:13 UTC (permalink / raw)
To: binutils, wej22007, zac.walker; +Cc: Mark Harmstone
This adds the remaining pe-aarch64 relocations, and gets them working.
It also brings in the constant directives from ELF, as otherwise .word
would be 2 rather than 4 bytes, and .xword and .dword wouldn't be
defined.
---
bfd/coff-aarch64.c | 651 +++++++++++++++++++++++++++++-
bfd/config.bfd | 6 -
gas/config/tc-aarch64.c | 24 +-
gas/testsuite/gas/pe/pe-aarch64.d | 214 +++++++++-
gas/testsuite/gas/pe/pe-aarch64.s | 152 ++++++-
ld/testsuite/ld-pe/aarch64.d | 148 +++++++
ld/testsuite/ld-pe/aarch64a.s | 149 +++++++
ld/testsuite/ld-pe/aarch64b.s | 6 +
ld/testsuite/ld-pe/pe.exp | 10 +-
9 files changed, 1318 insertions(+), 42 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 0faa75c63d2..e181ce66aa0 100644
--- a/bfd/coff-aarch64.c
+++ b/bfd/coff-aarch64.c
@@ -39,59 +39,296 @@
#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;
+
+ op = bfd_getl32 (data + reloc_entry->address);
+ param = reloc_entry->addend & 0xfff;
+
+ /* top two bits represent how much addend should be shifted */
+ param >>= op >> 30;
+
+ 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 +355,23 @@ 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:
+ 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 +402,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 +417,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 +443,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 +453,376 @@ 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;
+
+ /* 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 (bfd_is_abs_section (sec))
+ continue;
+
+ if (discarded_section (sec))
+ continue;
+
+ if (symndx < 0
+ || (unsigned long) symndx >= obj_raw_syment_count (input_bfd))
+ continue;
+
+ switch (rel->r_type)
+ {
+ case IMAGE_REL_ARM64_ADDR32NB:
+ {
+ uint64_t dest_vma, val;
+ int32_t addend;
+
+ addend = bfd_getl32 (contents + rel->r_vaddr);
+
+ dest_vma = sec->output_section->vma + sec->output_offset
+ + sym_value + 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 dest_vma, 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 = sec->output_section->vma + sec->output_offset
+ + sym_value + 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 dest_vma, 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 = sec->output_section->vma + sec->output_offset
+ + sym_value + 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 dest_vma, 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 = sec->output_section->vma + sec->output_offset
+ + sym_value + 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 dest_vma, 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 = sec->output_section->vma + sec->output_offset
+ + sym_value + 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 dest_vma, 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 = sec->output_section->vma + sec->output_offset
+ + sym_value + 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:
+ {
+ uint64_t dest_vma;
+ uint32_t opcode, val;
+ int32_t addend;
+
+ opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+ addend = (opcode & 0x3ffc00) >> 10;
+
+ /* top two bits represent how much addend should be shifted */
+ addend <<= opcode >> 30;
+
+ dest_vma = sec->output_section->vma + sec->output_offset
+ + sym_value + addend;
+
+ /* only interested in bottom 12 bits */
+ val = dest_vma & 0xfff;
+ val >>= opcode >> 30;
+
+ 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:
+ {
+ uint64_t dest_vma;
+ uint32_t opcode, val;
+ int32_t addend;
+
+ opcode = bfd_getl32 (contents + rel->r_vaddr);
+
+ addend = (opcode & 0x3ffc00) >> 10;
+
+ dest_vma = sec->output_section->vma + sec->output_offset
+ + sym_value + 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 +889,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 0bc27fdce97..92a6cff938b 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -1495,12 +1495,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 c679d930e88..a50cdb019e6 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..cd9529af8e2 100644
--- a/gas/testsuite/gas/pe/pe-aarch64.d
+++ b/gas/testsuite/gas/pe/pe-aarch64.d
@@ -1,14 +1,218 @@
#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
+ 8: 12345678 and w24, w19, #0xfffff003
+ c: 12345678 and w24, w19, #0xfffff003
+ 10: 00000008 udf #8
+ 10: IMAGE_REL_ARM64_ADDR32 .text
+ 14: 00000008 udf #8
+ 14: IMAGE_REL_ARM64_ADDR32 .text
+ ...
+ 18: IMAGE_REL_ARM64_ADDR32 bar
+ 1c: IMAGE_REL_ARM64_ADDR32 bar
+ 20: 00000009 udf #9
+ 20: IMAGE_REL_ARM64_ADDR32 .text
+ 24: 00000009 udf #9
+ 24: IMAGE_REL_ARM64_ADDR32 .text
+ 28: 00000001 udf #1
+ 28: IMAGE_REL_ARM64_ADDR32 bar
+ 2c: 00000001 udf #1
+ 2c: IMAGE_REL_ARM64_ADDR32 bar
+ 30: 00000007 udf #7
+ 30: IMAGE_REL_ARM64_ADDR32 .text
+ 34: 00000007 udf #7
+ 34: IMAGE_REL_ARM64_ADDR32 .text
+ 38: ffffffff .inst 0xffffffff ; undefined
+ 38: IMAGE_REL_ARM64_ADDR32 bar
+ 3c: ffffffff .inst 0xffffffff ; undefined
+ 3c: IMAGE_REL_ARM64_ADDR32 bar
+ 40: 9abcdef0 .inst 0x9abcdef0 ; undefined
+ 44: 12345678 and w24, w19, #0xfffff003
+ 48: 9abcdef0 .inst 0x9abcdef0 ; undefined
+ 4c: 12345678 and w24, w19, #0xfffff003
+ 50: 00000008 udf #8
+ 50: IMAGE_REL_ARM64_ADDR64 .text
+ 54: 00000000 udf #0
+ 58: 00000008 udf #8
+ 58: IMAGE_REL_ARM64_ADDR64 .text
+ ...
+ 60: IMAGE_REL_ARM64_ADDR64 bar
+ 68: IMAGE_REL_ARM64_ADDR64 bar
+ 70: 00000009 udf #9
+ 70: IMAGE_REL_ARM64_ADDR64 .text
+ 74: 00000000 udf #0
+ 78: 00000009 udf #9
+ 78: IMAGE_REL_ARM64_ADDR64 .text
+ 7c: 00000000 udf #0
+ 80: 00000001 udf #1
+ 80: IMAGE_REL_ARM64_ADDR64 bar
+ 84: 00000000 udf #0
+ 88: 00000001 udf #1
+ 88: IMAGE_REL_ARM64_ADDR64 bar
+ 8c: 00000000 udf #0
+ 90: 00000007 udf #7
+ 90: IMAGE_REL_ARM64_ADDR64 .text
+ 94: 00000000 udf #0
+ 98: 00000007 udf #7
+ 98: IMAGE_REL_ARM64_ADDR64 .text
+ 9c: 00000000 udf #0
+ a0: ffffffff .inst 0xffffffff ; undefined
+ a0: IMAGE_REL_ARM64_ADDR64 bar
+ a4: ffffffff .inst 0xffffffff ; undefined
+ a8: ffffffff .inst 0xffffffff ; undefined
+ a8: IMAGE_REL_ARM64_ADDR64 bar
+ ac: ffffffff .inst 0xffffffff ; undefined
+ b0: 00000008 udf #8
+ b0: IMAGE_REL_ARM64_ADDR32NB .text
+ b4: 00000000 udf #0
+ b4: IMAGE_REL_ARM64_ADDR32NB bar
+ b8: 00000009 udf #9
+ b8: IMAGE_REL_ARM64_ADDR32NB .text
+ bc: 00000001 udf #1
+ bc: IMAGE_REL_ARM64_ADDR32NB bar
+ c0: 00000007 udf #7
+ c0: IMAGE_REL_ARM64_ADDR32NB .text
+ c4: ffffffff .inst 0xffffffff ; undefined
+ c4: IMAGE_REL_ARM64_ADDR32NB bar
+ c8: 17ffffd0 b 8 <foo>
+ cc: 17ffffd0 b c <foo\+0x4>
+ d0: 17ffffcd b 4 <.text\+0x4>
+ d4: 14000000 b 0 <bar>
+ d4: IMAGE_REL_ARM64_BRANCH26 bar
+ d8: 14000001 b 4 <bar\+0x4>
+ d8: IMAGE_REL_ARM64_BRANCH26 bar
+ dc: 17ffffff b fffffffffffffffc <bar\+0xfffffffffffffffc>
+ dc: IMAGE_REL_ARM64_BRANCH26 bar
+ e0: 97ffffca bl 8 <foo>
+ e4: 97ffffca bl c <foo\+0x4>
+ e8: 97ffffc7 bl 4 <.text\+0x4>
+ ec: 94000000 bl 0 <bar>
+ ec: IMAGE_REL_ARM64_BRANCH26 bar
+ f0: 94000001 bl 4 <bar\+0x4>
+ f0: IMAGE_REL_ARM64_BRANCH26 bar
+ f4: 97ffffff bl fffffffffffffffc <bar\+0xfffffffffffffffc>
+ f4: IMAGE_REL_ARM64_BRANCH26 bar
+ f8: 97ffffc1 bl fffffffffffffffc <foo\+0xfffffffffffffff4>
+ fc: b4fff860 cbz x0, 8 <foo>
+ 100: b4fff860 cbz x0, c <foo\+0x4>
+ 104: b4fff800 cbz x0, 4 <.text\+0x4>
+ 108: b4000000 cbz x0, 0 <bar>
+ 108: IMAGE_REL_ARM64_BRANCH19 bar
+ 10c: b4000020 cbz x0, 4 <bar\+0x4>
+ 10c: IMAGE_REL_ARM64_BRANCH19 bar
+ 110: b4ffffe0 cbz x0, fffffffffffffffc <bar\+0xfffffffffffffffc>
+ 110: IMAGE_REL_ARM64_BRANCH19 bar
+ 114: b4fff740 cbz x0, fffffffffffffffc <foo\+0xfffffffffffffff4>
+ 118: 3607f780 tbz w0, #0, 8 <foo>
+ 11c: 3607f780 tbz w0, #0, c <foo\+0x4>
+ 120: 3607f720 tbz w0, #0, 4 <.text\+0x4>
+ 124: 36000000 tbz w0, #0, 0 <bar>
+ 124: IMAGE_REL_ARM64_BRANCH14 bar
+ 128: 36000020 tbz w0, #0, 4 <bar\+0x4>
+ 128: IMAGE_REL_ARM64_BRANCH14 bar
+ 12c: 3607ffe0 tbz w0, #0, fffffffffffffffc <bar\+0xfffffffffffffffc>
+ 12c: IMAGE_REL_ARM64_BRANCH14 bar
+ 130: 3607f660 tbz w0, #0, fffffffffffffffc <foo\+0xfffffffffffffff4>
+ 134: 90000040 adrp x0, 8000 <foo\+0x7ff8>
+ 134: IMAGE_REL_ARM64_PAGEBASE_REL21 .text
+ 138: b0000040 adrp x0, 9000 <foo\+0x8ff8>
+ 138: IMAGE_REL_ARM64_PAGEBASE_REL21 .text
+ 13c: f0000020 adrp x0, 7000 <foo\+0x6ff8>
+ 13c: IMAGE_REL_ARM64_PAGEBASE_REL21 .text
+ 140: 90000000 adrp x0, 0 <bar>
+ 140: IMAGE_REL_ARM64_PAGEBASE_REL21 bar
+ 144: b0000000 adrp x0, 1000 <bar\+0x1000>
+ 144: IMAGE_REL_ARM64_PAGEBASE_REL21 bar
+ 148: f0ffffe0 adrp x0, fffffffffffff000 <bar\+0xfffffffffffff000>
+ 148: IMAGE_REL_ARM64_PAGEBASE_REL21 bar
+ 14c: 90ffffe0 adrp x0, ffffffffffffc000 <foo\+0xffffffffffffbff8>
+ 14c: IMAGE_REL_ARM64_PAGEBASE_REL21 .text
+ 150: 10fff5c0 adr x0, 8 <foo>
+ 154: 30fff5a0 adr x0, 9 <foo\+0x1>
+ 158: 70fff560 adr x0, 7 <.text\+0x7>
+ 15c: 10000000 adr x0, 0 <bar>
+ 15c: IMAGE_REL_ARM64_REL21 bar
+ 160: 30000000 adr x0, 1 <bar\+0x1>
+ 160: IMAGE_REL_ARM64_REL21 bar
+ 164: 70ffffe0 adr x0, ffffffffffffffff <bar\+0xffffffffffffffff>
+ 164: IMAGE_REL_ARM64_REL21 bar
+ 168: 70fff4a0 adr x0, ffffffffffffffff <foo\+0xfffffffffffffff7>
+ 16c: 39002000 strb w0, \[x0, #8\]
+ 16c: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 170: 39003000 strb w0, \[x0, #12\]
+ 170: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 174: 39001000 strb w0, \[x0, #4\]
+ 174: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 178: 39000000 strb w0, \[x0\]
+ 178: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 17c: 39001000 strb w0, \[x0, #4\]
+ 17c: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 180: 393ff000 strb w0, \[x0, #4092\]
+ 180: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 184: 393ff000 strb w0, \[x0, #4092\]
+ 184: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 188: 79001000 strh w0, \[x0, #8\]
+ 188: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 18c: 79001800 strh w0, \[x0, #12\]
+ 18c: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 190: 79000800 strh w0, \[x0, #4\]
+ 190: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 194: 79000000 strh w0, \[x0\]
+ 194: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 198: 79000800 strh w0, \[x0, #4\]
+ 198: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 19c: 791ff800 strh w0, \[x0, #4092\]
+ 19c: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1a0: 791ff800 strh w0, \[x0, #4092\]
+ 1a0: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1a4: b9000800 str w0, \[x0, #8\]
+ 1a4: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1a8: b9000c00 str w0, \[x0, #12\]
+ 1a8: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1ac: b9000400 str w0, \[x0, #4\]
+ 1ac: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1b0: b9000000 str w0, \[x0\]
+ 1b0: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1b4: b9000400 str w0, \[x0, #4\]
+ 1b4: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1b8: b90ffc00 str w0, \[x0, #4092\]
+ 1b8: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1bc: b90ffc00 str w0, \[x0, #4092\]
+ 1bc: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1c0: f9000400 str x0, \[x0, #8\]
+ 1c0: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1c4: f9000800 str x0, \[x0, #16\]
+ 1c4: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1c8: f9000000 str x0, \[x0\]
+ 1c8: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1cc: f9000000 str x0, \[x0\]
+ 1cc: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1d0: f9000400 str x0, \[x0, #8\]
+ 1d0: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1d4: f907fc00 str x0, \[x0, #4088\]
+ 1d4: IMAGE_REL_ARM64_PAGEOFFSET_12L bar
+ 1d8: f907fc00 str x0, \[x0, #4088\]
+ 1d8: IMAGE_REL_ARM64_PAGEOFFSET_12L .text
+ 1dc: 91002000 add x0, x0, #0x8
+ 1dc: IMAGE_REL_ARM64_PAGEOFFSET_12A .text
+ 1e0: 91002400 add x0, x0, #0x9
+ 1e0: IMAGE_REL_ARM64_PAGEOFFSET_12A .text
+ 1e4: 91001c00 add x0, x0, #0x7
+ 1e4: IMAGE_REL_ARM64_PAGEOFFSET_12A .text
+ 1e8: 91000000 add x0, x0, #0x0
+ 1e8: IMAGE_REL_ARM64_PAGEOFFSET_12A bar
+ 1ec: 91000400 add x0, x0, #0x1
+ 1ec: IMAGE_REL_ARM64_PAGEOFFSET_12A bar
+ 1f0: 913ffc00 add x0, x0, #0xfff
+ 1f0: IMAGE_REL_ARM64_PAGEOFFSET_12A bar
+ 1f4: 913ffc00 add x0, x0, #0xfff
+ 1f4: 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..62f223fe8e2 100644
--- a/gas/testsuite/gas/pe/pe-aarch64.s
+++ b/gas/testsuite/gas/pe/pe-aarch64.s
@@ -1,11 +1,147 @@
-# 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
-_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_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..604e614e0ea
--- /dev/null
+++ b/ld/testsuite/ld-pe/aarch64.d
@@ -0,0 +1,148 @@
+
+tmpdir/aarch64.x: file format pei-aarch64-little
+
+
+Disassembly of section .text:
+
+0000000000002000 <__rt_psrelocs_end>:
+ ...
+
+0000000000002008 <foo>:
+ 2008: 12345678 and w24, w19, #0xfffff003
+ 200c: 12345678 and w24, w19, #0xfffff003
+ 2010: 00002000 udf #8192
+ 2014: 00002000 udf #8192
+ 2018: 000021f8 udf #8696
+ 201c: 000021f8 udf #8696
+ 2020: 00002001 udf #8193
+ 2024: 00002001 udf #8193
+ 2028: 000021f9 udf #8697
+ 202c: 000021f9 udf #8697
+ 2030: 00001fff udf #8191
+ 2034: 00001fff udf #8191
+ 2038: 000021f7 udf #8695
+ 203c: 000021f7 udf #8695
+ 2040: 9abcdef0 .inst 0x9abcdef0 ; undefined
+ 2044: 12345678 and w24, w19, #0xfffff003
+ 2048: 9abcdef0 .inst 0x9abcdef0 ; undefined
+ 204c: 12345678 and w24, w19, #0xfffff003
+ 2050: 00002000 udf #8192
+ 2054: 00000000 udf #0
+ 2058: 00002000 udf #8192
+ 205c: 00000000 udf #0
+ 2060: 000021f8 udf #8696
+ 2064: 00000000 udf #0
+ 2068: 000021f8 udf #8696
+ 206c: 00000000 udf #0
+ 2070: 00002001 udf #8193
+ 2074: 00000000 udf #0
+ 2078: 00002001 udf #8193
+ 207c: 00000000 udf #0
+ 2080: 000021f9 udf #8697
+ 2084: 00000000 udf #0
+ 2088: 000021f9 udf #8697
+ 208c: 00000000 udf #0
+ 2090: 00001fff udf #8191
+ 2094: 00000000 udf #0
+ 2098: 00001fff udf #8191
+ 209c: 00000000 udf #0
+ 20a0: 000021f7 udf #8695
+ 20a4: 00000000 udf #0
+ 20a8: 000021f7 udf #8695
+ 20ac: 00000000 udf #0
+ 20b0: 00001008 udf #4104
+ 20b4: 000011f8 udf #4600
+ 20b8: 00001009 udf #4105
+ 20bc: 000011f9 udf #4601
+ 20c0: 00001007 udf #4103
+ 20c4: 000011f7 udf #4599
+ 20c8: 17ffffd0 b 2008 <foo>
+ 20cc: 17ffffd0 b 200c <foo\+0x4>
+ 20d0: 17ffffcd b 2004 <__rt_psrelocs_end\+0x4>
+ 20d4: 14000049 b 21f8 <bar>
+ 20d8: 14000049 b 21fc <bar\+0x4>
+ 20dc: 14000046 b 21f4 <foo\+0x1ec>
+ 20e0: 97ffffca bl 2008 <foo>
+ 20e4: 97ffffca bl 200c <foo\+0x4>
+ 20e8: 97ffffc7 bl 2004 <__rt_psrelocs_end\+0x4>
+ 20ec: 94000043 bl 21f8 <bar>
+ 20f0: 94000043 bl 21fc <bar\+0x4>
+ 20f4: 94000040 bl 21f4 <foo\+0x1ec>
+ 20f8: 97ffffc1 bl 1ffc <__ImageBase\+0xffc>
+ 20fc: b4fff860 cbz x0, 2008 <foo>
+ 2100: b4fff860 cbz x0, 200c <foo\+0x4>
+ 2104: b4fff800 cbz x0, 2004 <__rt_psrelocs_end\+0x4>
+ 2108: b4000780 cbz x0, 21f8 <bar>
+ 210c: b4000780 cbz x0, 21fc <bar\+0x4>
+ 2110: b4000720 cbz x0, 21f4 <foo\+0x1ec>
+ 2114: b4fff740 cbz x0, 1ffc <__ImageBase\+0xffc>
+ 2118: 3607f780 tbz w0, #0, 2008 <foo>
+ 211c: 3607f780 tbz w0, #0, 200c <foo\+0x4>
+ 2120: 3607f720 tbz w0, #0, 2004 <__rt_psrelocs_end\+0x4>
+ 2124: 360006a0 tbz w0, #0, 21f8 <bar>
+ 2128: 360006a0 tbz w0, #0, 21fc <bar\+0x4>
+ 212c: 36000640 tbz w0, #0, 21f4 <foo\+0x1ec>
+ 2130: 3607f660 tbz w0, #0, 1ffc <__ImageBase\+0xffc>
+ 2134: 90000000 adrp x0, 2000 <__rt_psrelocs_end>
+ 2138: 90000000 adrp x0, 2000 <__rt_psrelocs_end>
+ 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: f0ffffe0 adrp x0, 1000 <__ImageBase>
+ 2150: 10fff5c0 adr x0, 2008 <foo>
+ 2154: 30fff5a0 adr x0, 2009 <foo\+0x1>
+ 2158: 70fff560 adr x0, 2007 <__rt_psrelocs_end\+0x7>
+ 215c: 100004e0 adr x0, 21f8 <bar>
+ 2160: 300004c0 adr x0, 21f9 <bar\+0x1>
+ 2164: 70000480 adr x0, 21f7 <foo\+0x1ef>
+ 2168: 70fff4a0 adr x0, 1fff <__ImageBase\+0xfff>
+ 216c: 39002000 strb w0, \[x0, #8\]
+ 2170: 39003000 strb w0, \[x0, #12\]
+ 2174: 39001000 strb w0, \[x0, #4\]
+ 2178: 3907e000 strb w0, \[x0, #504\]
+ 217c: 3907f000 strb w0, \[x0, #508\]
+ 2180: 3907d000 strb w0, \[x0, #500\]
+ 2184: 393ff000 strb w0, \[x0, #4092\]
+ 2188: 79001000 strh w0, \[x0, #8\]
+ 218c: 79001800 strh w0, \[x0, #12\]
+ 2190: 79000800 strh w0, \[x0, #4\]
+ 2194: 7903f000 strh w0, \[x0, #504\]
+ 2198: 7903f800 strh w0, \[x0, #508\]
+ 219c: 7903e800 strh w0, \[x0, #500\]
+ 21a0: 791ff800 strh w0, \[x0, #4092\]
+ 21a4: b9000800 str w0, \[x0, #8\]
+ 21a8: b9000c00 str w0, \[x0, #12\]
+ 21ac: b9000400 str w0, \[x0, #4\]
+ 21b0: b901f800 str w0, \[x0, #504\]
+ 21b4: b901fc00 str w0, \[x0, #508\]
+ 21b8: b901f400 str w0, \[x0, #500\]
+ 21bc: b90ffc00 str w0, \[x0, #4092\]
+ 21c0: f9000400 str x0, \[x0, #8\]
+ 21c4: f9000800 str x0, \[x0, #16\]
+ 21c8: f9000000 str x0, \[x0\]
+ 21cc: f900fc00 str x0, \[x0, #504\]
+ 21d0: f9010000 str x0, \[x0, #512\]
+ 21d4: f900f800 str x0, \[x0, #496\]
+ 21d8: f907fc00 str x0, \[x0, #4088\]
+ 21dc: 91002000 add x0, x0, #0x8
+ 21e0: 91002400 add x0, x0, #0x9
+ 21e4: 91001c00 add x0, x0, #0x7
+ 21e8: 9107e000 add x0, x0, #0x1f8
+ 21ec: 9107e400 add x0, x0, #0x1f9
+ 21f0: 9107dc00 add x0, x0, #0x1f7
+ 21f4: 913ffc00 add x0, x0, #0xfff
+
+00000000000021f8 <bar>:
+ 21f8: 9abcdef0 .inst 0x9abcdef0 ; undefined
+ 21fc: 12345678 and w24, w19, #0xfffff003
+
+0000000000002200 <__CTOR_LIST__>:
+ 2200: ffffffff .inst 0xffffffff ; undefined
+ 2204: ffffffff .inst 0xffffffff ; undefined
+ ...
+
+0000000000002210 <__DTOR_LIST__>:
+ 2210: ffffffff .inst 0xffffffff ; undefined
+ 2214: 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..e7ecabba64b
--- /dev/null
+++ b/ld/testsuite/ld-pe/aarch64a.s
@@ -0,0 +1,149 @@
+.text
+
+.dword 0
+
+# 2008
+.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_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..9f0bdde758f
--- /dev/null
+++ b/ld/testsuite/ld-pe/aarch64b.s
@@ -0,0 +1,6 @@
+.text
+
+# 21f8
+.global bar
+bar:
+.dword 0x123456789abcdef0
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index d8595ee61e8..80019a48778 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] 16+ messages in thread
* [PATCH 5/5] Add aarch64-w64-mingw32 target
2022-12-16 2:13 [PATCH 1/5] Fix size of external_reloc for pe-aarch64 Mark Harmstone
` (2 preceding siblings ...)
2022-12-16 2:13 ` [PATCH 4/5] Add .secrel32 for pe-aarch64 Mark Harmstone
@ 2022-12-16 2:14 ` Mark Harmstone
2022-12-16 7:28 ` Jan Beulich
2022-12-16 7:03 ` [PATCH 1/5] Fix size of external_reloc for pe-aarch64 Jan Beulich
4 siblings, 1 reply; 16+ messages in thread
From: Mark Harmstone @ 2022-12-16 2:14 UTC (permalink / raw)
To: binutils, wej22007, zac.walker; +Cc: Mark Harmstone
This adds a mingw target for aarch64, including windres and dlltool.
Note that the old value of jmp_aarch64_bytes was wrong, and this does
the same thing as MSVC does.
---
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 | 10 +++---
ld/pe-dll.c | 12 +++----
ld/testsuite/ld-pe/pe-aarch64.d | 13 ++++++--
ld/testsuite/ld-pe/pe.exp | 2 +-
13 files changed, 107 insertions(+), 24 deletions(-)
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 92a6cff938b..a583ae9a424 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -249,9 +249,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"
want64=true
targ_underscore=no
;;
diff --git a/bfd/peicode.h b/bfd/peicode.h
index f7ba24ae10a..26e95dc1f1b 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 5a3e5017b46..a88b66dae8f 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 6243a2b0c2d..b51aeb9f38f 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 a3c5e0f778e..c9c53919dbf 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 83b08634c7f..1ae02598313 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 82f2d44f418..ba49003bc80 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 8df750f9dd0..231cdecb12b 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 741b246f67e..5f05f083bba 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -118,9 +118,9 @@ 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_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 e2c538e6d99..0ecce1bc4c1 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -106,7 +106,7 @@ fragment <<EOF
#define PE_DEF_SECTION_ALIGNMENT ${OVERRIDE_SECTION_ALIGNMENT}
#endif
-#ifdef TARGET_IS_i386pep
+#if defined(TARGET_IS_i386pep) || defined(TARGET_IS_aarch64pe)
#define DLL_SUPPORT
#endif
@@ -115,7 +115,7 @@ fragment <<EOF
| 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(TARGET_IS_aarch64pe) || ! defined(DLL_SUPPORT)
#define PE_DEF_SUBSYSTEM 3
#undef NT_EXE_IMAGE_BASE
#define NT_EXE_IMAGE_BASE \
@@ -1541,14 +1541,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(TARGET_IS_aarch64pe)
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(TARGET_IS_aarch64pe)
else
pep_exe_build_sections (link_info.output_bfd, &link_info);
#endif
@@ -1844,6 +1844,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(TARGET_IS_aarch64pe)
+ 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 df16e85bbe0..edfcda9cf16 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 83b20d0da45..58158cc657d 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 {
--
2.37.4
^ permalink raw reply [flat|nested] 16+ messages in thread