x86: Correct noavx512_vp2intersect
[deliverable/binutils-gdb.git] / binutils / testsuite / lib / binutils-common.exp
index a253c01a5cad2fc2c45813983f1aeeffc53b97d1..b9e3c6d8174168226a044d532b760e22ef8f7d8f 100644 (file)
@@ -171,32 +171,37 @@ proc is_rela { binary_file } {
 # in square brackets or as machine triplet otherwise.
 #
 proc match_target { target } {
-   if [string match {\[*\]} $target] {
+   if [regexp {^!?\[.*\]$} $target] {
        return $target
    } else {
        return [istarget $target]
    }
 }
 
-# True if the ELF target supports STB_GNU_UNIQUE with the ELF header's
-# OSABI field set to ELFOSABI_GNU.
+# True if the ELF target supports setting the ELF header OSABI field
+# to ELFOSABI_GNU or ELFOSABI_FREEBSD, a requirement for STT_GNU_IFUNC
+# symbol and SHF_GNU_MBIND section support.
 #
 # This generally depends on the target OS only, however there are a
 # number of exceptions for bare metal targets as follows.  The MSP430
-# and Visium targets set OSABI to ELFOSABI_STANDALONE and cannot
-# support STB_GNU_UNIQUE.  Likewise non-EABI ARM targets set OSABI to
-# ELFOSABI_ARM, and TI C6X targets to ELFOSABI_C6000_*.  Finally
-# rather than `bfd_elf_final_link' a number of targets use
-# `_bfd_generic_final_link', which does not support STB_GNU_UNIQUE
-# symbol binding causing assertion failures.
+# and Visium targets set OSABI to ELFOSABI_STANDALONE.  Likewise
+# non-EABI ARM targets set OSABI to ELFOSABI_ARM
 #
-proc supports_gnu_unique {} {
+# Note that some TI C6X targets use ELFOSABI_C6000_* but one doesn't,
+# so we don't try to sort out tic6x here.  (The effect is that linker
+# testcases will generally need to exclude tic6x or use a -m option.)
+#
+proc supports_gnu_osabi {} {
     if { [istarget *-*-gnu*]
         || [istarget *-*-linux*]
-        || [istarget *-*-nacl*] } {
-       return 1
-    }
-    if { [istarget "arm*-*-*eabi*"] } {
+        || [istarget *-*-nacl*]
+        || ( [istarget *-*-*bsd*] && ![istarget arm*-*-netbsd*] )
+        || [istarget *-*-symbianelf]
+        || [istarget *-*-lynxos]
+        || ( [istarget *-*-nto*] && ![istarget arm*-*-*] )
+        || [istarget *-*-irix*]
+        || [istarget *-*-*eabi*]
+        || [istarget *-*-rtems*] } {
        return 1
     }
     if { [istarget "wasm32*-*-*"] } {
@@ -207,19 +212,36 @@ proc supports_gnu_unique {} {
     }
     if { [istarget "arm*-*-*"]
         || [istarget "msp430-*-*"]
-        || [istarget "tic6x-*-*"]
         || [istarget "visium-*-*"] } {
        return 0
     }
-    if { [istarget "am33_2.0-*-*"]
-        || [istarget "d30v-*-*"]
+    return 1
+}
+
+# Return true if target uses the generic_link_hash_table linker.
+proc is_generic { } {
+    if { [istarget "d30v-*-*"]
         || [istarget "dlx-*-*"]
         || [istarget "pj*-*-*"]
         || [istarget "s12z-*-*"]
         || [istarget "xgate-*-*"] } {
+       return 1
+    }
+    return 0
+}
+
+# True if the ELF target supports STB_GNU_UNIQUE.
+#
+# This require ELFOSABI_GNU, and `bfd_elf_final_link'.
+#
+proc supports_gnu_unique {} {
+    if { [istarget *-*-freebsd*] } {
        return 0
     }
-    return 1
+    if { [supports_gnu_osabi] && ![is_generic] } {
+       return 1
+    }
+    return 0
 }
 
 # True for targets that do not sort .symtab as per the ELF standard.
@@ -269,6 +291,23 @@ proc check_shared_lib_support { } {
     return $shared_available_saved
 }
 
+# Returns true if -pie is supported on the target
+
+proc check_pie_support { } {
+    global pie_available_saved
+    global ld
+
+    if {![info exists pie_available_saved]} {
+       set ld_output [remote_exec host $ld "-pie"]
+       if { [ string first "not supported" $ld_output ] >= 0 } {
+           set pie_available_saved 0
+       } else {
+           set pie_available_saved 1
+       }
+    }
+    return $pie_available_saved
+}
+
 # Compare two files line-by-line.  FILE_1 is the actual output and FILE_2
 # is the expected output.  Ignore blank lines in either file.
 #
This page took 0.024202 seconds and 4 git commands to generate.