# Expect script for various AARCH64 ELF tests.
-# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+# Copyright (C) 2009-2020 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
"--fix-cortex-a53-835769" "" "" {erratum835769.s}
{{objdump -dr erratum835769.d}}
"erratum835769"}
+}
+set tmp {
{"Erratum 835769 dump test -shared"
"--fix-cortex-a53-835769 -shared" "" "" {erratum835769.s}
{{objdump -dr erratum835769.d}}
"erratum835769"}
}
+if [check_shared_lib_support] { append aarch64elftests $tmp }
proc aarch64_choose_ilp32_emul {} {
if [istarget *linux*] then {
[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 "erratum843419"
run_dump_test "erratum843419_tls_ie"
+run_dump_test "erratum843419-adr"
+run_dump_test "erratum843419-adrp"
+run_dump_test "erratum843419-far-adr"
+run_dump_test "erratum843419-far-full"
+run_dump_test "erratum843419-full"
+run_dump_test "erratum843419-no-args"
+run_dump_test "erratum835769-843419"
# Relocation Tests
run_dump_test_lp64 "weak-undefined"
+run_dump_test "emit-relocs-22"
+run_dump_test "emit-relocs-23"
run_dump_test "emit-relocs-28"
run_dump_test "emit-relocs-86"
run_dump_test "emit-relocs-86-overflow"
run_dump_test_lp64 "emit-relocs-558"
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 "farcall-bl-none-function"
run_dump_test "farcall-b-section"
run_dump_test "farcall-bl-section"
+run_dump_test "farcall-group"
run_dump_test "tls-relax-all"
run_dump_test "tls-relax-all-ilp32"
run_dump_test "tls-relax-gd-le"
run_dump_test "tls-relax-gd-le-ilp32"
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_lp64 "pie-bind-locally"
+run_dump_test "property-bti-pac1"
+run_dump_test "property-bti-pac2"
+run_dump_test "property-bti-pac3"
+run_dump_test "property-bti-pac4-a"
+run_dump_test "property-bti-pac4-b"
+run_dump_test "bti-plt-1"
+run_dump_test "bti-plt-2"
+
+run_dump_test_lp64 "variant_pcs-r"
+run_dump_test_lp64 "variant_pcs-shared"
+run_dump_test_lp64 "variant_pcs-now"
+
set aarch64elflinktests {
{"ld-aarch64/so with global symbol" "-shared" "" "" {copy-reloc-so.s}
{} "copy-reloc-so.so"}
{"ld-aarch64/func sym hash opt for exe"
"-e0 --hash-style=gnu tmpdir/func-in-so.so" "" ""
{func-sym-hash-opt.s} {{readelf --dyn-sym func-sym-hash-opt.d}} "hash-opt"}
+ {"Build bti-plt-so for PLT tests" "-shared" "" "" {bti-plt-so.s}
+ {} "libbti-plt-so.so"}
}
-run_ld_link_tests $aarch64elflinktests
+if [check_shared_lib_support] {
+ run_ld_link_tests $aarch64elflinktests
+}
+
+run_dump_test "bti-plt-3"
+run_dump_test "bti-plt-4"
+run_dump_test "bti-plt-5"
+run_dump_test "bti-plt-6"
+run_dump_test "bti-plt-7"
+
+run_dump_test "pac-plt-1"
+run_dump_test "pac-plt-2"
+run_dump_test "bti-pac-plt-1"
+run_dump_test "bti-pac-plt-2"
+
+run_dump_test "bti-warn"
+run_dump_test "weak-tls"
+run_dump_test "morello-weak-tls"
+run_dump_test "undef-tls"