[list ld [concat "-m " [aarch64_choose_lp64_emul]]]]
}
+# Return the hexadecimal representation of the value we need to add to $base in
+# order to return $result plus 1. Both $base and $result are assumed to be
+# hexadecimal numbers without the leading 0x prefix.
+#
+# This procedure is especially useful for checking the addend of a RELATIVE
+# relocation against a function in a testcase using the `#check:` directive.
+# Dumping `objdump -DR -j .got -j .text` will give us the address we're trying
+# to reach and base stored in the relocation fragment before reaching the
+# addend we're using for this relocation.
+proc aarch64_required_func_addend { base result } {
+ return [format %x [expr "0x$result + 1 - 0x$base"]];
+}
+
+# Return the hexadecimal addition of the two given values. Values should be
+# provided in hexadecimal without the leading 0x prefix.
+#
+# Used in a testsuite to check that the combination of some ADRP/ADD constants
+# do indeed point at a variable later on in the dump.
+proc aarch64_page_plus_offset { page offset } {
+ return [format %x [expr "0x$page + 0x$offset"] ];
+}
+proc aarch64_page_plus_decimal_offset { page offset } {
+ return [format %x [expr "0x$page + $offset"] ];
+}
+
+# Return the 8-hexdigit truncation of an address.
+proc aarch64_8digit_addr { addr { plusLSB 0 } } {
+ if { $plusLSB } {
+ return [format %08x [expr "0x$addr + 1"]];
+ }
+ return [format %08x "0x$addr"];
+}
+
set eh-frame-merge-lp64 [list [list "EH Frame merge" \
[concat "-m " [aarch64_choose_lp64_emul] \
" -Ttext 0x8000"] \
run_dump_test_lp64 "emit-relocs-558-overflow"
run_dump_test_lp64 "emit-relocs-559"
run_dump_test_lp64 "emit-relocs-560"
+run_dump_test_lp64 "emit-relocs-morello-1"
+run_dump_test_lp64 "emit-relocs-morello"
+run_dump_test_lp64 "emit-relocs-morello-a64c"
+run_dump_test_lp64 "emit-relocs-morello-2"
+run_dump_test_lp64 "emit-relocs-morello-2-a64c"
+run_dump_test_lp64 "emit-relocs-morello-3"
+run_dump_test_lp64 "emit-relocs-morello-3-a64c"
+run_dump_test_lp64 "emit-relocs-morello-4"
+run_dump_test_lp64 "emit-relocs-morello-5"
+run_dump_test_lp64 "emit-relocs-morello-6"
+run_dump_test_lp64 "emit-relocs-morello-6b"
+run_dump_test_lp64 "emit-relocs-morello-7"
+run_dump_test_lp64 "emit-relocs-morello-8"
+run_dump_test_lp64 "emit-relocs-morello-9"
+run_dump_test_lp64 "emit-relocs-morello-10"
+run_dump_test_lp64 "emit-relocs-morello-hidden"
+run_dump_test_lp64 "emit-morello-reloc-markers-1"
+run_dump_test_lp64 "emit-morello-reloc-markers-2"
+run_dump_test_lp64 "emit-morello-reloc-markers-3"
+run_dump_test_lp64 "morello-sizeless-local-syms"
+run_dump_test_lp64 "morello-sizeless-global-syms"
+run_dump_test_lp64 "morello-sizeless-got-syms"
+run_dump_test_lp64 "morello-disallow-merged-binaries"
+run_dump_test_lp64 "c64-ehdr-sized-reloc"
+
+# Test for morello dynamic relocs can not be written in the usual manner since
+# we need to specify different `ld` command lines for different objects.
+if { [check_shared_lib_support]
+ && [ld_assemble_flags $as -march=morello+c64 $srcdir/$subdir/morello-dynamic-relocs-lib.s tmpdir/morello-dynamic-relocs-lib.o]
+ && [ld_link $ld tmpdir/morello-dynamic-relocs.so "--shared tmpdir/morello-dynamic-relocs-lib.o"] } {
+ run_dump_test_lp64 "morello-dynamic-relocs"
+ run_dump_test_lp64 "morello-dynamic-link-rela-dyn"
+ run_dump_test_lp64 "morello-dynamic-link-rela-dyn2"
+ run_dump_test_lp64 "morello-dynamic-local-got"
+ run_dump_test_lp64 "morello-funcptr-in-code"
+ run_dump_test_lp64 "morello-funcptr-through-data"
+ run_dump_test_lp64 "morello-funcptr-through-data-pie"
+ run_dump_test_lp64 "morello-funcptr-code-and-data"
+ run_dump_test_lp64 "morello-dataptr-in-code"
+ run_dump_test_lp64 "morello-dataptr-through-data"
+ run_dump_test_lp64 "morello-dataptr-through-data-pie"
+ run_dump_test_lp64 "morello-dataptr-code-and-data"
+ run_dump_test_lp64 "morello-ifunc-a"
+ run_dump_test_lp64 "morello-ifunc1-a"
+}
+run_dump_test_lp64 "morello-ifunc"
+run_dump_test_lp64 "morello-ifunc-b"
+run_dump_test_lp64 "morello-ifunc1"
+run_dump_test_lp64 "morello-ifunc1-b"
+run_dump_test_lp64 "morello-ifunc1-c"
+run_dump_test_lp64 "morello-ifunc2"
+run_dump_test_lp64 "morello-ifunc2-b"
+run_dump_test_lp64 "morello-ifunc3"
+run_dump_test_lp64 "morello-ifunc4"
+run_dump_test_lp64 "morello-ifunc4a"
+
+if { [check_shared_lib_support]
+ && [ld_assemble_flags $as -march=morello+c64 $srcdir/$subdir/morello-ifunc-shared.s tmpdir/morello-ifunc-shared.o]
+ && [ld_link $ld tmpdir/morello-ifunc-shared.so "--shared tmpdir/morello-ifunc-shared.o"] } {
+ run_dump_test_lp64 "morello-ifunc-dynlink"
+ run_dump_test_lp64 "morello-ifunc-dynlink-pie"
+}
+
+if { [check_shared_lib_support]
+ && [ld_assemble_flags $as -march=morello+c64 $srcdir/$subdir/morello-weakdefinitions.s tmpdir/morello-weakdefinitions.o]
+ && [ld_link $ld tmpdir/morello-weakdefinitions.so "--shared tmpdir/morello-weakdefinitions.o"] } {
+ run_dump_test_lp64 "morello-undefweak-relocs-PDE"
+}
+run_dump_test_lp64 "morello-undefweak-relocs-no-dyn-linker"
+run_dump_test_lp64 "morello-undefweak-relocs-PIE"
+run_dump_test_lp64 "morello-undefweak-relocs-static"
+run_dump_test_lp64 "morello-undefweak-relocs-static-relocs"
+
+if { [check_shared_lib_support]
+ && [ld_assemble_flags $as -march=morello+c64 $srcdir/$subdir/tls-shared.s tmpdir/tls-shared.o]
+ && [ld_link $ld tmpdir/tls-shared.so "-shared tmpdir/tls-shared.o"] } {
+ run_dump_test_lp64 "morello-tls-pde"
+ run_dump_test_lp64 "illegal-tlsle-pde"
+ run_dump_test_lp64 "morello-tlsie-overflow"
+}
+run_dump_test_lp64 "morello-static-got"
+run_dump_test_lp64 "morello-dynamic-got"
+run_dump_test_lp64 "morello-dt-init-fini"
run_dump_test_lp64 "morello-capinit"
+run_dump_test_lp64 "morello-stubs"
+run_dump_test_lp64 "morello-stubs-static"
+run_dump_test_lp64 "morello-stubs-pcc-bounds"
+run_dump_test_lp64 "morello-stubs-sec-bounds"
+run_dump_test_lp64 "morello-sec-round"
+run_dump_test_lp64 "morello-sec-round-adjust"
+run_dump_test_lp64 "morello-sec-always-align"
+run_dump_test_lp64 "morello-sec-round-pcc-needed"
+run_dump_test_lp64 "morello-sec-round-data-only"
+run_dump_test_lp64 "morello-sec-round-include-relro"
+run_dump_test_lp64 "morello-pcc-bounds-include-readonly"
+run_dump_test_lp64 "morello-sec-round-choose-linker-syms"
+run_dump_test_lp64 "morello-entry-point"
+run_dump_test_lp64 "morello-sec-start_stop-round"
+run_dump_test_lp64 "morello-tlsdesc"
+run_dump_test_lp64 "morello-tlsdesc-static"
+run_dump_test_lp64 "morello-tlsdesc-staticpie"
+run_dump_test_lp64 "morello-tlsdesc-seen-ie"
+
+run_dump_test_lp64 "morello-tlsle"
+run_dump_test_lp64 "morello-tlsle-pie"
+run_dump_test_lp64 "morello-tlsie"
+run_dump_test_lp64 "morello-tlsie-pie"
+run_dump_test_lp64 "morello-tlsie-shared"
+
+run_dump_test_lp64 "morello-size-relocs"
+run_dump_test_lp64 "morello-size-relocs-pie"
+run_dump_test_lp64 "morello-size-relocs-shared"
+
+run_dump_test_lp64 "morello-illegal-size-relocs"
+run_dump_test_lp64 "morello-illegal-size-relocs-pie"
+run_dump_test_lp64 "morello-illegal-size-relocs-shared"
+
+run_dump_test_lp64 "morello-illegal-tls"
+run_dump_test_lp64 "morello-illegal-tls-pie"
+run_dump_test_lp64 "morello-illegal-tls-shared"
+
+run_dump_test_lp64 "morello-large-function"
+
+run_dump_test "no-morello-syms-static"
run_dump_test "reloc-overflow-bad"
run_dump_test "tls-relax-gdesc-le"
run_dump_test "tls-relax-gdesc-le-now"
run_dump_test "tls-relax-gdesc-le-ilp32"
-run_dump_test "tls-relax-gd-ie"
-run_dump_test "tls-relax-gd-ie-ilp32"
-run_dump_test_lp64 "tls-relax-large-gd-ie"
-run_dump_test_lp64 "tls-relax-large-gd-ie-be"
run_dump_test_lp64 "tls-relax-large-gd-le"
run_dump_test_lp64 "tls-relax-large-gd-le-be"
-run_dump_test_lp64 "tls-relax-large-desc-ie"
-run_dump_test_lp64 "tls-relax-large-desc-ie-be"
-run_dump_test_lp64 "tls-relax-large-desc-le"
-run_dump_test_lp64 "tls-relax-large-desc-le-be"
-run_dump_test "tls-relax-gdesc-ie"
run_dump_test "tls-relax-ie-le"
run_dump_test "tls-relax-ie-le-ilp32"
run_dump_test "tls-relax-ld-le-small"
run_dump_test "tls-relax-ld-le-tiny-ilp32"
run_dump_test "tls-desc-ie"
run_dump_test "tls-desc-ie-ilp32"
-run_dump_test "tls-relax-gdesc-ie-2"
run_dump_test "tls-relax-gdesc-le-2"
run_dump_test "tls-relax-gdesc-le-2-ilp32"
run_dump_test "tls-relax-ie-le-2"
run_dump_test "tls-relax-ie-le-3"
run_dump_test "tls-relax-ie-le-3-ilp32"
run_dump_test "tls-tiny-gd"
-run_dump_test "tls-tiny-gd-ie"
-run_dump_test "tls-tiny-gd-ie-ilp32"
run_dump_test "tls-tiny-gd-le"
run_dump_test "tls-tiny-gd-le-ilp32"
run_dump_test "tls-tiny-desc"
-run_dump_test "tls-tiny-desc-ie"
-run_dump_test "tls-tiny-desc-ie-ilp32"
run_dump_test "tls-tiny-desc-le"
run_dump_test "tls-tiny-desc-le-ilp32"
run_dump_test "tls-tiny-ie"
run_dump_test_lp64 "pr22764"
run_dump_test_lp64 "pr20402"
+if {[check_shared_lib_support]
+ && [ld_assemble $as $srcdir/$subdir/tls-sharedlib.s tmpdir/tls-sharedlib.o]
+ && [ld_link $ld tmpdir/tls-sharedlib.so "-shared tmpdir/tls-sharedlib.o"] } {
+ run_dump_test "tls-relax-gd-ie"
+ run_dump_test_lp64 "tls-relax-large-gd-ie"
+ run_dump_test_lp64 "tls-relax-large-gd-ie-be"
+ run_dump_test_lp64 "tls-relax-large-desc-ie"
+ run_dump_test_lp64 "tls-relax-large-desc-ie-be"
+ run_dump_test_lp64 "tls-relax-large-desc-le"
+ run_dump_test_lp64 "tls-relax-large-desc-le-be"
+ run_dump_test "tls-relax-gdesc-ie"
+ run_dump_test "tls-relax-gdesc-ie-2"
+ run_dump_test "tls-tiny-gd-ie"
+ run_dump_test "tls-tiny-desc-ie"
+}
+if {[check_shared_lib_support]
+ && [ld_assemble_flags $as -mabi=ilp32 $srcdir/$subdir/tls-sharedlib.s tmpdir/tls-sharedlib.o]
+ && [ld_link $ld tmpdir/tls-sharedlib-ilp32.so "-shared tmpdir/tls-sharedlib.o -m [aarch64_choose_ilp32_emul]"] } {
+ run_dump_test "tls-relax-gd-ie-ilp32"
+ run_dump_test "tls-tiny-gd-ie-ilp32"
+ run_dump_test "tls-tiny-desc-ie-ilp32"
+}
+run_dump_test "tls-relax-gd-ie-2"
+run_dump_test "tls-relax-ie-le-4"
+
# ifunc tests
run_dump_test "ifunc-1"
run_dump_test "ifunc-1-local"
run_dump_test_lp64 "ifunc-21"
run_dump_test_lp64 "ifunc-22"
+run_dump_test_lp64 "c64-ifunc-2"
+run_dump_test_lp64 "c64-ifunc-2-local"
+run_dump_test_lp64 "c64-ifunc-3a"
+run_dump_test_lp64 "c64-ifunc-3b"
+run_dump_test_lp64 "c64-ifunc-4"
+run_dump_test_lp64 "c64-ifunc-4a"
+
run_dump_test "relasz"
run_dump_test_lp64 "relocs-1027-symbolic-func"
run_dump_test "bti-warn"
run_dump_test "weak-tls"
+run_dump_test "morello-weak-tls"
run_dump_test "undef-tls"