MIPS: Add options to control branch ISA checks
[deliverable/binutils-gdb.git] / ld / testsuite / ld-mips-elf / mips-elf.exp
index f8c8b09bda0d834eeac84f93d4c779a8260db098..7fa11c5989d1ad2d9bda5c4b392a842ef0835234 100644 (file)
@@ -1,5 +1,5 @@
 # Expect script for MIPS ELF linker tests
-#   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+#   Copyright (C) 2002-2017 Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
 #
@@ -142,6 +142,49 @@ run_dump_test "mips16-1"
 
 # MIPS branch offset final link checking.
 run_dump_test "branch-misc-1"
+run_dump_test "branch-misc-2"
+run_dump_test "branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "branch-absolute-addend" [list [list ld $abi_ldflags(o32)]]
+if $has_newabi {
+    run_dump_test "branch-absolute-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "branch-absolute-addend-n32" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "branch-absolute-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "branch-absolute-addend-n64" \
+                                       [list [list ld $abi_ldflags(n64)]]
+}
+
+run_dump_test "mips16-branch-2" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-3" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-addend-2" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-addend-3" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-addend" \
+                                       [list [list ld $abi_ldflags(o32)]]
+if $has_newabi {
+    run_dump_test "mips16-branch-absolute-n32" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "mips16-branch-absolute-addend-n32" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "mips16-branch-absolute-n64" \
+                                       [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "mips16-branch-absolute-addend-n64" \
+                                       [list [list ld $abi_ldflags(n64)]]
+}
+
+run_dump_test "micromips-branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "micromips-branch-absolute-addend" \
+                                       [list [list ld $abi_ldflags(o32)]]
+if $has_newabi {
+    run_dump_test "micromips-branch-absolute-n32" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "micromips-branch-absolute-addend-n32" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "micromips-branch-absolute-n64" \
+                                       [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "micromips-branch-absolute-addend-n64" \
+                                       [list [list ld $abi_ldflags(n64)]]
+}
 
 # Jalx test
 run_dump_test "jalx-1"
@@ -170,15 +213,29 @@ if { $linux_gnu } {
 
 run_dump_test "jalx-addend" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "jalx-local" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-addend" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-local" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-pic" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "bal-jalx-pic-ignore" [list [list ld $abi_ldflags(o32)]]
 if $has_newabi {
     run_dump_test "jalx-addend-n32" [list [list ld $abi_ldflags(n32)]]
     run_dump_test "jalx-local-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-addend-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-local-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-pic-n32" [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "bal-jalx-pic-ignore-n32" [list [list ld $abi_ldflags(n32)]]
     run_dump_test "jalx-addend-n64" [list [list ld $abi_ldflags(n64)]]
     run_dump_test "jalx-local-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-addend-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-local-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-pic-n64" [list [list ld $abi_ldflags(n64)]]
+    run_dump_test "bal-jalx-pic-ignore-n64" [list [list ld $abi_ldflags(n64)]]
 }
 
 run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "unaligned-jalx-1" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "unaligned-jalx-2" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "unaligned-jalx-3" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "unaligned-jalx-mips16-0" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "unaligned-jalx-mips16-1" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "unaligned-jalx-micromips-0" [list [list ld $abi_ldflags(o32)]]
@@ -189,6 +246,10 @@ if $has_newabi {
                                        [list [list ld $abi_ldflags(n32)]]
     run_dump_test "unaligned-jalx-addend-1" \
                                        [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-jalx-addend-2" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-jalx-addend-3" \
+                                       [list [list ld $abi_ldflags(n32)]]
     run_dump_test "unaligned-jalx-addend-mips16-0" \
                                        [list [list ld $abi_ldflags(n32)]]
     run_dump_test "unaligned-jalx-addend-mips16-1" \
@@ -199,6 +260,35 @@ if $has_newabi {
                                        [list [list ld $abi_ldflags(n32)]]
 }
 
+run_dump_test "unaligned-branch" [list [list ld $abi_ldflags(o32)]]
+
+if $has_newabi {
+    run_dump_test "unaligned-branch-2" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-ignore-2" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-r6-1" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-ignore-r6-1" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-r6-2" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-mips16" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-ignore-mips16" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-micromips" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-branch-ignore-micromips" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-jump" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-jump-mips16" \
+                                       [list [list ld $abi_ldflags(n32)]]
+    run_dump_test "unaligned-jump-micromips" \
+                                       [list [list ld $abi_ldflags(n32)]]
+}
+
 run_dump_test "unaligned-lwpc-0" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "unaligned-lwpc-1" [list [list ld $abi_ldflags(o32)]]
 run_dump_test "unaligned-ldpc-0" [list [list ld $abi_ldflags(o32)]]
@@ -278,6 +368,8 @@ if { $linux_gnu } {
     #
     # The third test checks that we do the same when linking the
     # result of the first link (with no other source files).
+    #
+    # We then repeat the same three tests for microMIPS stubs.
     run_ld_link_tests {
        {"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip" ""
         "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
@@ -296,6 +388,42 @@ if { $linux_gnu } {
         {{objdump -dr pic-and-nonpic-1.dd}
          {readelf --symbols pic-and-nonpic-1.nd}}
         "pic-and-nonpic-1-static2.o"}
+       {"PIC and non-PIC test 1, microMIPS (relocatable)"
+        "-r -melf32btsmip" ""
+        "-32 -EB -mips2"
+        {pic-and-nonpic-1a-micromips.s pic-and-nonpic-1b-micromips.s}
+        {{objdump -dr pic-and-nonpic-1-micromips-rel.dd}
+         {readelf --symbols pic-and-nonpic-1-micromips-rel.nd}}
+        "pic-and-nonpic-1-micromips-rel.o"}
+       {"PIC and non-PIC test 1, microMIPS (static 1)"
+        "-melf32btsmip -Tpic-and-nonpic-1.ld" ""
+        "-32 -EB -mips2"
+        {pic-and-nonpic-1a-micromips.s pic-and-nonpic-1b-micromips.s}
+        {{objdump -dr pic-and-nonpic-1-micromips.dd}
+         {readelf --symbols pic-and-nonpic-1-micromips.nd}}
+        "pic-and-nonpic-1-micromips-static1.o"}
+    }
+    # The final executable produced with the following test is supposed
+    # to be the same as one produced with the preceding test, however
+    # as noted in PR ld/20453 it is not.  Consequently output from
+    # `objdump -dr' is not the same either.  Expect:
+    #
+    #  regexp_diff match failure
+    #  regexp "^   4103c:      f001 0415       jalx    41054 <f3>$"
+    #  line   "   4103c:       f001 0400       jalx    41000 <.pic.f3>"
+    #
+    # from the test below due to this problem.
+    setup_kfail "mips*-*-*" "ld/20453"
+    # The final check below should be folded into the `run_ld_link_tests'
+    # call above once `setup_kfail' has been removed.
+    run_ld_link_tests {
+       {"PIC and non-PIC test 1, microMIPS (static 2)"
+        "-melf32btsmip -Tpic-and-nonpic-1.ld \
+         tmpdir/pic-and-nonpic-1-micromips-rel.o" ""
+        "" {}
+        {{objdump -dr pic-and-nonpic-1-micromips.dd}
+         {readelf --symbols pic-and-nonpic-1-micromips.nd}}
+        "pic-and-nonpic-1-micromips-static2.o"}
     }
     run_dump_test "pic-and-nonpic-2"
     run_ld_link_tests {
@@ -456,6 +584,13 @@ if { $has_newabi } {
 }
 
 run_dump_test "reloc-local-overflow" [list [list ld $abi_ldflags(o32)]]
+run_ld_link_tests [list \
+    [list \
+       "MIPS link ELF o32 PIC comdat GOT16/LO16 relocation pairing" \
+       "$abi_ldflags(o32) -e bar" "" "$abi_asflags(o32) -mno-pdr" \
+       "../../../gas/testsuite/gas/mips/comdat-reloc.s" \
+       {} \
+       "comdat-reloc"]]
 
 if {$has_newabi && $linux_gnu} {
     run_dump_test "eh-frame1-n32"
@@ -503,9 +638,11 @@ run_dump_test "undefweak-overflow" [list [list as $abi_asflags(o32)] \
                                         [list ld $abi_ldflags(o32)]]
 
 if {$has_newabi} {
-    run_dump_test "undefweak-overflow" [list [list as $abi_asflags(n32)] \
+    run_dump_test "undefweak-overflow" [list [list name (n32)] \
+                                            [list as $abi_asflags(n32)] \
                                             [list ld $abi_ldflags(n32)]]
-    run_dump_test "undefweak-overflow" [list [list as $abi_asflags(n64)] \
+    run_dump_test "undefweak-overflow" [list [list name (n64)] \
+                                            [list as $abi_asflags(n64)] \
                                             [list ld $abi_ldflags(n64)]]
 }
 
@@ -842,9 +979,6 @@ foreach { abi } $abis {
             [list ehdr_start-${suff}.s] \
             [list "readelf -s ehdr_start-1.nd"] \
             "ehdr_start-1-${abi}"]]
-    if [regexp "(?:n32|n64)" "$abi"] {
-       setup_kfail "mips*-*-*" "ld/15428"
-    }
     run_ld_link_tests [list \
         [list \
             "MIPS magic __ehdr_start symbol test 2 ($abi)" \
@@ -893,13 +1027,13 @@ proc run_mips_plt_test { name abi filter micromips suffix {extra {}} } {
     set ld_flags "$abi_ldflags($abi) -T compressed-plt-1.ld"
     set dynobj "tmpdir/compressed-plt-1-${abi}-dyn.so"
     set files [list]
-    if { $filter & 3 } {
+    if { $filter & 7 } {
        lappend files compressed-plt-1a.s
     }
-    if { $filter & 12 } {
+    if { $filter & 56 } {
        lappend files compressed-plt-1b.s
     }
-    if { $filter & 16 } {
+    if { $filter & 64 } {
        lappend files compressed-plt-1c.s
     }
     eval [list lappend files] $extra
@@ -919,28 +1053,35 @@ proc run_mips_plt_test { name abi filter micromips suffix {extra {}} } {
 
 if { $linux_gnu } {
     build_mips_plt_lib o32
-    run_mips_plt_test "o32 PLTs for standard encoding" o32 28 0 se
-    run_mips_plt_test "o32 PLTs for MIPS16 encoding" o32 19 0 mips16-only
-    run_mips_plt_test "o32 PLTs for microMIPS encoding" o32 19 1 umips-only
+    run_mips_plt_test "o32 PLTs for standard encoding" o32 104 0 se
+    run_mips_plt_test "o32 PLTs for standard branches" o32 16 0 branch
+    run_mips_plt_test "o32 PLTs for MIPS16 encoding" o32 69 0 mips16-only
+    run_mips_plt_test "o32 PLTs for MIPS16 branches" o32 2 0 mips16-bronly
+    run_mips_plt_test "o32 PLTs for microMIPS encoding" o32 69 1 umips-only
+    run_mips_plt_test "o32 PLTs for microMIPS branches" o32 2 1 umips-bronly
     run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16" \
-       o32 -1 0 mips16
+       o32 109 0 mips16
+    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 branches" \
+       o32 18 0 mips16-branch
     run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with %got" \
-       o32 -1 0 mips16-got compressed-plt-1d.s
+       o32 109 0 mips16-got compressed-plt-1d.s
     run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with .word" \
-       o32 -1 0 mips16-word compressed-plt-1e.s
+       o32 109 0 mips16-word compressed-plt-1e.s
     run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS" \
-       o32 -1 1 umips
+       o32 109 1 umips
+    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS branches" \
+       o32 18 1 umips-branch
     run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with %got" \
-       o32 -1 1 umips-got compressed-plt-1d.s
+       o32 109 1 umips-got compressed-plt-1d.s
     run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with .word" \
-       o32 -1 1 umips-word compressed-plt-1e.s
+       o32 109 1 umips-word compressed-plt-1e.s
 
     if $has_newabi {
        build_mips_plt_lib n32
        run_mips_plt_test "n32 PLTs for mixed MIPS and MIPS16" \
-           n32 -1 0 mips16
+           n32 109 0 mips16
        run_mips_plt_test "n32 PLTs for mixed MIPS and microMIPS" \
-           n32 -1 1 umips
+           n32 109 1 umips
     }
 }
 
This page took 0.029078 seconds and 4 git commands to generate.