]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - ld/testsuite/ld-aarch64/aarch64-elf.exp
Only check for valid Morello bounds on non-exec syms
[thirdparty/binutils-gdb.git] / ld / testsuite / ld-aarch64 / aarch64-elf.exp
index 3912ef1cdd25b9e6440d52da47561eb62d8ea6d5..b32cb235ead6c8070c39dc43caaf672ba4ff550c 100644 (file)
@@ -1,5 +1,5 @@
 # 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.
 #
@@ -37,11 +37,14 @@ set aarch64elftests {
      "--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 {
@@ -75,6 +78,39 @@ proc run_dump_test_lp64 { testname } {
                      [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"] \
@@ -87,9 +123,18 @@ run_ld_link_tests eh-frame-merge-lp64
 
 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"
@@ -224,6 +269,132 @@ run_dump_test_lp64 "emit-relocs-557"
 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"
 
@@ -250,24 +421,17 @@ run_dump_test "farcall-b-none-function"
 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"
@@ -276,7 +440,6 @@ run_dump_test "tls-relax-ld-le-tiny"
 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"
@@ -284,13 +447,9 @@ run_dump_test "tls-relax-ie-le-2-ilp32"
 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"
@@ -315,6 +474,31 @@ run_dump_test "protected-data"
 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"
@@ -358,6 +542,13 @@ run_dump_test_lp64 "ifunc-20"
 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"
 
@@ -371,6 +562,18 @@ run_dump_test_lp64 "rela-abs-relative-opt"
 
 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"}
@@ -385,6 +588,26 @@ set aarch64elflinktests {
   {"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"