From 02e0be69012aee9aac0c7adbba1b0516b4dc9218 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 5 Feb 2020 16:19:17 +1030 Subject: [PATCH] mbind gas tests and supports_gnu_osabi testsuite infrastructure With the addition of section16 tests we have multiple tests advertising themselves as "mbind sections" and "mbind section contents". This patch fixes that, and fails on quite a few targets that force an OSABI value. It's a pain specifying all the relevant arm targets on an xfail line, so I wrote supports_gnu_osabi. binutils/ * testsuite/lib/binutils-common.exp (match_target): Accept '!' before TCL procedure. (supports_gnu_osabi): New procedure. (is_generic): New, from ld-lib.exp. (supports_gnu_unique): Use the above. gas/ * testsuite/gas/elf/section12a.d: Use supports_gnu_osabi in xfail, and rename test. * testsuite/gas/elf/section12b.d: Likewise. * testsuite/gas/elf/section16a.d: Likewise. * testsuite/gas/elf/section16b.d: Likewise. ld/ * testsuite/lib/ld-lib.exp (is_generic): Delete. * testsuite/ld-unique/unique.exp: Exclude tic6x. --- binutils/ChangeLog | 8 +++ binutils/testsuite/lib/binutils-common.exp | 59 +++++++++++++++------- gas/ChangeLog | 8 +++ gas/testsuite/gas/elf/section12a.d | 5 +- gas/testsuite/gas/elf/section12b.d | 5 +- gas/testsuite/gas/elf/section16a.d | 5 +- gas/testsuite/gas/elf/section16b.d | 5 +- ld/ChangeLog | 5 ++ ld/testsuite/ld-unique/unique.exp | 2 +- ld/testsuite/lib/ld-lib.exp | 12 ----- 10 files changed, 71 insertions(+), 43 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 6214de979eb..7dc97dbd85c 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2020-02-06 Alan Modra + + * testsuite/lib/binutils-common.exp (match_target): Accept '!' before + TCL procedure. + (supports_gnu_osabi): New procedure. + (is_generic): New, from ld-lib.exp. + (supports_gnu_unique): Use the above. + 2020-02-04 Alan Modra * Makefile.am (CFILES): Add od-elf32_avr.c. diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp index a253c01a5ca..57b94f528a7 100644 --- a/binutils/testsuite/lib/binutils-common.exp +++ b/binutils/testsuite/lib/binutils-common.exp @@ -171,32 +171,38 @@ 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*] + || [istarget *-*-solaris*] } { return 1 } if { [istarget "wasm32*-*-*"] } { @@ -207,19 +213,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. diff --git a/gas/ChangeLog b/gas/ChangeLog index b8c886421e8..ef7a8eeb4a8 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2020-02-06 Alan Modra + + * testsuite/gas/elf/section12a.d: Use supports_gnu_osabi in + xfail, and rename test. + * testsuite/gas/elf/section12b.d: Likewise. + * testsuite/gas/elf/section16a.d: Likewise. + * testsuite/gas/elf/section16b.d: Likewise. + 2020-02-02 H.J. Lu PR gas/25380 diff --git a/gas/testsuite/gas/elf/section12a.d b/gas/testsuite/gas/elf/section12a.d index 84c032f90e0..15801617d58 100644 --- a/gas/testsuite/gas/elf/section12a.d +++ b/gas/testsuite/gas/elf/section12a.d @@ -1,10 +1,9 @@ #source: section12.s #as: --no-pad-sections #readelf: -Sg --wide -#name: mbind sections +#name: mbind sections 12 # A number of targets do not support SHF_GNU_MBIND -#xfail: arm*-*-netbsdelf* arm*-*-nto* msp430-*-* visium-*-* -#xfail: *-*-hpux* *-*-cloudabi +#xfail: ![supports_gnu_osabi] #... \[[ 0-9]+\] \.mbind\.data[ ]+PROGBITS[ ]+0+0 0+[0-9a-f]+ 0+1 00 WAD 0 0 1 diff --git a/gas/testsuite/gas/elf/section12b.d b/gas/testsuite/gas/elf/section12b.d index 847f9a8a18c..98a4b9521d7 100644 --- a/gas/testsuite/gas/elf/section12b.d +++ b/gas/testsuite/gas/elf/section12b.d @@ -1,13 +1,12 @@ #source: section12.s #as: --no-pad-sections #objdump: -s -#name: mbind section contents +#name: mbind section contents 16 # RX annoyingly reorders the sections so that they do not match the sequence # expected below. #xfail: rx-*-* # A number of targets do not support SHF_GNU_MBIND -#xfail: arm*-*-netbsdelf* arm*-*-nto* msp430-*-* visium-*-* -#xfail: *-*-hpux* *-*-cloudabi +#xfail: ![supports_gnu_osabi] #... Contents of section .mbind.data: diff --git a/gas/testsuite/gas/elf/section16a.d b/gas/testsuite/gas/elf/section16a.d index d1abf570c61..0d664752d8d 100644 --- a/gas/testsuite/gas/elf/section16a.d +++ b/gas/testsuite/gas/elf/section16a.d @@ -1,10 +1,9 @@ #source: section16.s #as: --no-pad-sections #readelf: -Sg --wide -#name: mbind sections +#name: mbind sections 16 # A number of targets do not support SHF_GNU_MBIND -#xfail: arm*-*-netbsdelf* arm*-*-nto* msp430-*-* visium-*-* -#xfail: *-*-hpux* *-*-cloudabi +#xfail: ![supports_gnu_osabi] #... \[[ 0-9]+\] \.mbind\.data[ ]+PROGBITS[ ]+0+0 0+[0-9a-f]+ 0+1 00 WAD 0 0 1 diff --git a/gas/testsuite/gas/elf/section16b.d b/gas/testsuite/gas/elf/section16b.d index a146c0de7e1..9014fab9e7b 100644 --- a/gas/testsuite/gas/elf/section16b.d +++ b/gas/testsuite/gas/elf/section16b.d @@ -1,13 +1,12 @@ #source: section16.s #as: --no-pad-sections #objdump: -s -#name: mbind section contents +#name: mbind section contents 16 # RX annoyingly reorders the sections so that they do not match the sequence # expected below. #xfail: rx-*-* # A number of targets do not support SHF_GNU_MBIND -#xfail: arm*-*-netbsdelf* arm*-*-nto* msp430-*-* visium-*-* -#xfail: *-*-hpux* *-*-cloudabi +#xfail: ![supports_gnu_osabi] #... Contents of section .mbind.data: diff --git a/ld/ChangeLog b/ld/ChangeLog index 3ad29e52621..21f51c98b2e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2020-02-06 Alan Modra + + * testsuite/lib/ld-lib.exp (is_generic): Delete. + * testsuite/ld-unique/unique.exp: Exclude tic6x. + 2020-02-06 Alan Modra * configure.tgt (i[3-7]86-*-moss*): Don't clear targ_extra_ofiles. diff --git a/ld/testsuite/ld-unique/unique.exp b/ld/testsuite/ld-unique/unique.exp index 5457deb4ece..1f80b39c05b 100644 --- a/ld/testsuite/ld-unique/unique.exp +++ b/ld/testsuite/ld-unique/unique.exp @@ -30,7 +30,7 @@ if { ![is_elf_format] } { } # Require STB_GNU_UNIQUE support with OSABI set to GNU. -if { ![supports_gnu_unique] } { +if { ![supports_gnu_unique] || [istarget tic6x-*-*] } { verbose "UNIQUE tests not run - target does not support UNIQUE" return } diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 6752a76483a..bed5add77f0 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -1088,18 +1088,6 @@ proc check_gc_sections_available { } { return $gc_sections_available_saved } -# 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 -} - # Return true if target uses genelf.em. proc uses_genelf { } { if { [istarget "d30v-*-*"] -- 2.30.2