From 7dd36a6f1ca92cd4ca4776064c604cda7755bc44 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 23 Aug 2018 06:12:37 -0700 Subject: [PATCH] Prune BFD warnings for unknown GNU properties When glibc is enabled with the new GNU_PROPERTY_X86_XXX bits: https://groups.google.com/forum/#!topic/x86-64-abi/-D05GQ3kWrA BFD will issue an unknown GNU property warning like warning: tmpdir/ld1: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010001 and ignore such GNU properties. This patch adds prune_warnings_extra to prune such warnings on release branches and updates prune_warnings to call prune_warnings_extra. binutils/ PR ld/23536 * Makefile.am (development.exp): New target. (EXTRA_DEJAGNU_SITE_CONFIG): New. (DISTCLEANFILES): Add development.exp. * Makefile.in: Regenerated. * testsuite/binutils-all/objcopy.exp (strip_test): Call prune_warnings to prune BFD output. (strip_test_with_saving_a_symbol): Likewise. (objcopy_test_without_global_symbol): Likewise. * testsuite/lib/binutils-common.exp (prune_warnings_extra): New proc. (prune_warnings): Likewise. gas/ PR ld/23536 * Makefile.am (development.exp): New target. (EXTRA_DEJAGNU_SITE_CONFIG): New. (DISTCLEANFILES): Add development.exp. * Makefile.in: Regenerated. ld/ PR ld/23536 * Makefile.am (development.exp): New target. (EXTRA_DEJAGNU_SITE_CONFIG): New. (DISTCLEANFILES): Add development.exp. * Makefile.in: Regenerated. * testsuite/ld-bootstrap/bootstrap.exp: Call prune_warnings to prune BFD output. * testsuite/ld-plugin/lto.exp: Likewise. * testsuite/lib/ld-lib.exp (prune_warnings): Removed. * testsuite/ld-elf/shared.exp: Allow "\n" in linker warnings. --- binutils/ChangeLog | 15 +++++++++ binutils/Makefile.am | 9 +++++- binutils/Makefile.in | 9 +++++- binutils/testsuite/binutils-all/objcopy.exp | 9 ++++++ binutils/testsuite/lib/binutils-common.exp | 47 +++++++++++++++++++++++++++++ gas/ChangeLog | 8 +++++ gas/Makefile.am | 8 ++++- gas/Makefile.in | 7 ++++- ld/ChangeLog | 13 ++++++++ ld/Makefile.am | 8 ++++- ld/Makefile.in | 9 ++++-- ld/testsuite/ld-bootstrap/bootstrap.exp | 1 + ld/testsuite/ld-elf/shared.exp | 4 +-- ld/testsuite/ld-plugin/lto.exp | 1 + ld/testsuite/lib/ld-lib.exp | 23 -------------- 15 files changed, 139 insertions(+), 32 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 09f599b..600f326 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,20 @@ 2018-08-23 H.J. Lu + PR ld/23536 + * Makefile.am (development.exp): New target. + (EXTRA_DEJAGNU_SITE_CONFIG): New. + (DISTCLEANFILES): Add development.exp. + * Makefile.in: Regenerated. + * testsuite/binutils-all/objcopy.exp (strip_test): Call + prune_warnings to prune BFD output. + (strip_test_with_saving_a_symbol): Likewise. + (objcopy_test_without_global_symbol): Likewise. + * testsuite/lib/binutils-common.exp (prune_warnings_extra): + New proc. + (prune_warnings): Likewise. + +2018-08-23 H.J. Lu + * README-how-to-make-a-release: Document setting "experimental" to false. diff --git a/binutils/Makefile.am b/binutils/Makefile.am index d827d9e..e68e1cd 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -200,6 +200,10 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi +development.exp: $(BFDDIR)/development.sh + $(EGREP) "[development|experimental]=" $(BFDDIR)/development.sh \ + | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@ + installcheck-local: /bin/sh $(srcdir)/sanity.sh $(bindir) @@ -491,7 +495,10 @@ all: info # development.sh is used to determine -Werror default. CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh -DISTCLEANFILES = sysroff.c sysroff.h site.exp site.bak embedspu +EXTRA_DEJAGNU_SITE_CONFIG = development.exp + +DISTCLEANFILES = sysroff.c sysroff.h site.exp development.exp \ + site.bak embedspu MOSTLYCLEANFILES = sysinfo$(EXEEXT_FOR_BUILD) bin2c$(EXEEXT_FOR_BUILD) \ binutils.log binutils.sum abcdefgh* diff --git a/binutils/Makefile.in b/binutils/Makefile.in index bdf0955..7ab72b3 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -737,7 +737,10 @@ EXTRA_DIST = arparse.c arparse.h arlex.c sysinfo.c sysinfo.h \ # development.sh is used to determine -Werror default. CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/development.sh -DISTCLEANFILES = sysroff.c sysroff.h site.exp site.bak embedspu +EXTRA_DEJAGNU_SITE_CONFIG = development.exp +DISTCLEANFILES = sysroff.c sysroff.h site.exp development.exp \ + site.bak embedspu + MOSTLYCLEANFILES = sysinfo$(EXEEXT_FOR_BUILD) bin2c$(EXEEXT_FOR_BUILD) \ binutils.log binutils.sum abcdefgh* @@ -1399,6 +1402,10 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi +development.exp: $(BFDDIR)/development.sh + $(EGREP) "[development|experimental]=" $(BFDDIR)/development.sh \ + | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@ + installcheck-local: /bin/sh $(srcdir)/sanity.sh $(bindir) diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 342585f..d979648 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -440,6 +440,7 @@ proc strip_test { } { remote_file build delete tmpdir/libstrip.a set exec_output [binutils_run $AR "rc $archive ${objfile}"] + set exec_output [prune_warnings $exec_output] if ![string equal "" $exec_output] { fail $test unresolved "$test preserving OS/ABI" @@ -447,6 +448,7 @@ proc strip_test { } { } set exec_output [binutils_run $STRIP "-g $archive"] + set exec_output [prune_warnings $exec_output] if ![string equal "" $exec_output] { fail $test unresolved "$test preserving OS/ABI" @@ -454,6 +456,7 @@ proc strip_test { } { } set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"] + set exec_output [prune_warnings $exec_output] if ![string equal "" $exec_output] { fail $test unresolved "$test preserving OS/ABI" @@ -488,12 +491,14 @@ proc strip_test { } { } set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"] + set exec_output [prune_warnings $exec_output] if ![string equal "" $exec_output] { fail $test return } set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"] + set exec_output [prune_warnings $exec_output] if ![string match "*: no symbols*" $exec_output] { fail $test return @@ -529,12 +534,14 @@ proc strip_test_with_saving_a_symbol { } { } set exec_output [binutils_run $STRIP "$STRIPFLAGS -K main -K _main $objfile"] + set exec_output [prune_warnings $exec_output] if ![string equal "" $exec_output] { fail $test return } set exec_output [binutils_run $NM "$NMFLAGS $objfile"] + set exec_output [prune_warnings $exec_output] if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \ && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} { fail $test @@ -1195,12 +1202,14 @@ proc objcopy_test_without_global_symbol { } { } set exec_output [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-unneeded $objfile"] + set exec_output [prune_warnings $exec_output] if ![string equal "" $exec_output] { fail $test return } set exec_output [binutils_run $OBJDUMP "$OBJDUMPFLAGS -t $objfile"] + set exec_output [prune_warnings $exec_output] if {![regexp "no symbols" $exec_output]} { fail $test return diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp index b1ede4c..bac1407 100644 --- a/binutils/testsuite/lib/binutils-common.exp +++ b/binutils/testsuite/lib/binutils-common.exp @@ -397,3 +397,50 @@ proc regexp_diff { file_1 file_2 args } { return $differences } + +# prune_warnings_extra -- delete extra warnings from TEXT. +# +# An example is: +# ld: warning: /lib64/ld-linux-x86-64.so.2: unsupported GNU_PROPERTY_TYPE (5) type : 0xc0010001 +proc prune_warnings_extra { text } { + global experimental + # Warnings are only pruned from non-experimental code (ie code not + # on a release branch). For experimental code we want the warnings + # as they indicate that the sources need to be updated to recognise + # the new properties. + if { "$experimental" == "false" } { + # The "\\1" is to try to preserve a "\n" but only if necessary. + regsub -all "(^|\n)(\[^\n\]*: warning:\[^\n\]*unsupported GNU_PROPERTY_TYPE\[^\n\]*\n?)+" $text "\\1" text + } + return $text +} + +# This definition is taken from an unreleased version of DejaGnu. Once +# that version gets released, and has been out in the world for a few +# months at least, it may be safe to delete this copy. +if ![string length [info proc prune_warnings]] { + # + # prune_warnings -- delete various system verbosities from TEXT + # + # An example is: + # ld.so: warning: /usr/lib/libc.so.1.8.1 has older revision than expected 9 + # + # Sites with particular verbose os's may wish to override this in site.exp. + # + proc prune_warnings { text } { + # This is from sun4's. Do it for all machines for now. + # The "\\1" is to try to preserve a "\n" but only if necessary. + regsub -all "(^|\n)(ld.so: warning:\[^\n\]*\n?)+" $text "\\1" text + # It might be tempting to get carried away and delete blank lines, etc. + # Just delete *exactly* what we're ask to, and that's it. + set text [prune_warnings_extra $text] + return $text + } +} elseif { [info procs saved-prune_warnings] == [list] } { + rename prune_warnings saved-prune_warnings + proc prune_warnings { text } { + set text [saved-prune_warnings $text] + set text [prune_warnings_extra $text] + return $text + } +} diff --git a/gas/ChangeLog b/gas/ChangeLog index f86ab28..a9325fb 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2018-08-23 H.J. Lu + + PR ld/23536 + * Makefile.am (development.exp): New target. + (EXTRA_DEJAGNU_SITE_CONFIG): New. + (DISTCLEANFILES): Add development.exp. + * Makefile.in: Regenerated. + 2018-08-22 Alan Modra * dw2gencfi.c (emit_expr_encoded, output_fde): Warning fixes. diff --git a/gas/Makefile.am b/gas/Makefile.am index 8f520d3..9b3d32f 100644 --- a/gas/Makefile.am +++ b/gas/Makefile.am @@ -432,6 +432,10 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi +development.exp: $(BFDDIR)/development.sh + $(EGREP) "[development|experimental]=" $(BFDDIR)/development.sh \ + | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@ + # The m68k operand parser. EXTRA_as_new_SOURCES += config/m68k-parse.y @@ -591,7 +595,7 @@ cgen.@OBJEXT@: cgen.c cgen.h cgen-desc.h subsegs.h \ MOSTLYCLEANFILES = $(STAGESTUFF) core \ testsuite/*.@OBJEXT@ testsuite/*.out testsuite/gas.log testsuite/gas.sum \ - testsuite/site.exp site.bak site.exp stage stage1 stage2 + testsuite/site.exp site.bak site.exp development.exp stage stage1 stage2 .PHONY: install-exec-local install-data-local .PHONY: install-exec-bindir install-exec-tooldir @@ -692,3 +696,5 @@ de-stage3: # Reconfigure if configure.tgt changes. # development.sh is used to determine -Werror default. CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.tgt $(BFDDIR)/development.sh + +EXTRA_DEJAGNU_SITE_CONFIG = development.exp diff --git a/gas/Makefile.in b/gas/Makefile.in index 862f948..07bb7f0 100644 --- a/gas/Makefile.in +++ b/gas/Makefile.in @@ -803,13 +803,14 @@ CGEN_CPU_PREFIX = @cgen_cpu_prefix@ # Remake the info files. MOSTLYCLEANFILES = $(STAGESTUFF) core \ testsuite/*.@OBJEXT@ testsuite/*.out testsuite/gas.log testsuite/gas.sum \ - testsuite/site.exp site.bak site.exp stage stage1 stage2 + testsuite/site.exp site.bak site.exp development.exp stage stage1 stage2 against = stage2 # Reconfigure if configure.tgt changes. # development.sh is used to determine -Werror default. CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.tgt $(BFDDIR)/development.sh +EXTRA_DEJAGNU_SITE_CONFIG = development.exp all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -1563,6 +1564,10 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi +development.exp: $(BFDDIR)/development.sh + $(EGREP) "[development|experimental]=" $(BFDDIR)/development.sh \ + | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@ + # If m68k-parse.y is in a different directory, then ylwrap will use an # absolute path when it invokes yacc, which will cause yacc to put the # absolute path into the generated file. That's a pain when it comes diff --git a/ld/ChangeLog b/ld/ChangeLog index 39f76aa..66f890c 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,16 @@ +2018-08-23 H.J. Lu + + PR ld/23536 + * Makefile.am (development.exp): New target. + (EXTRA_DEJAGNU_SITE_CONFIG): New. + (DISTCLEANFILES): Add development.exp. + * Makefile.in: Regenerated. + * testsuite/ld-bootstrap/bootstrap.exp: Call prune_warnings to + prune BFD output. + * testsuite/ld-plugin/lto.exp: Likewise. + * testsuite/lib/ld-lib.exp (prune_warnings): Removed. + * testsuite/ld-elf/shared.exp: Allow "\n" in linker warnings. + 2018-08-21 Nick Clifton PR 23426 diff --git a/ld/Makefile.am b/ld/Makefile.am index 7ae1c53..9884110 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -1905,6 +1905,10 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi +development.exp: $(BFDDIR)/development.sh + $(EGREP) "[development|experimental]=" $(BFDDIR)/development.sh \ + | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@ +# # # Build a dummy plugin using libtool. # @@ -1952,6 +1956,8 @@ MAINTAINERCLEANFILES = configdoc.texi ld.1 CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host $(srcdir)/configure.tgt \ $(BFDDIR)/development.sh +EXTRA_DEJAGNU_SITE_CONFIG = development.exp + MOSTLYCLEANFILES = $(STAGESTUFF) ld1$(EXEEXT) ld2$(EXEEXT) ld3$(EXEEXT) \ ldemul-list.h crtbegin.@OBJEXT@ crtend.@OBJEXT@ ld.log ld.sum mostlyclean-local: @@ -1997,7 +2003,7 @@ diststuff: info $(EXTRA_DIST) # ld.1 to support parallel build. info-recursive: ld.1 -DISTCLEANFILES = tdirs site.exp site.bak stringify.sed +DISTCLEANFILES = tdirs site.exp development.exp site.bak stringify.sed distclean-local: rm -rf ldscripts diff --git a/ld/Makefile.in b/ld/Makefile.in index bfb5599..3ddd581 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -1008,7 +1008,7 @@ ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) \ $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP) ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) - +# # # Build a dummy plugin using libtool. # @@ -1034,6 +1034,7 @@ MAINTAINERCLEANFILES = configdoc.texi ld.1 ld.info CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host $(srcdir)/configure.tgt \ $(BFDDIR)/development.sh +EXTRA_DEJAGNU_SITE_CONFIG = development.exp MOSTLYCLEANFILES = $(STAGESTUFF) ld1$(EXEEXT) ld2$(EXEEXT) ld3$(EXEEXT) \ ldemul-list.h crtbegin.@OBJEXT@ crtend.@OBJEXT@ ld.log ld.sum @@ -1044,7 +1045,7 @@ CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 spu_ovl.s spu_ovl.@OBJEXT@ spu_icache.s EXTRA_DIST = ldgram.c ldgram.h ldlex.c emultempl/spu_ovl.@OBJEXT@_c \ emultempl/spu_icache.@OBJEXT@_c deffilep.c deffilep.h $(man_MANS) -DISTCLEANFILES = tdirs site.exp site.bak stringify.sed +DISTCLEANFILES = tdirs site.exp development.exp site.bak stringify.sed all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -3489,6 +3490,10 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi +development.exp: $(BFDDIR)/development.sh + $(EGREP) "[development|experimental]=" $(BFDDIR)/development.sh \ + | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@ + # DOCUMENTATION TARGETS # Manual configuration file; not usually attached to normal configuration, # because almost all configs use "gen" version of manual. diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp index 5c79e03..9c4dbd6 100644 --- a/ld/testsuite/ld-bootstrap/bootstrap.exp +++ b/ld/testsuite/ld-bootstrap/bootstrap.exp @@ -168,6 +168,7 @@ foreach flags $test_flags { if {"$do_strip" == "yes"} { verbose -log "$strip tmpdir/ld1" catch "exec $strip tmpdir/ld1" exec_output + set exec_output [prune_warnings $exec_output] if ![string match "" $exec_output] then { verbose -log "$exec_output" fail $testname diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 7970fe9..cdb171d 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -513,7 +513,7 @@ set build_tests { "-shared" "-fPIC" {beginwarn.c end.c} {{readelf {-S --wide} libbarw.rd} - {warning "^.*beginwarn.c:7: warning: function foo is deprecated$"}} + {warning "^.*beginwarn.c:7: warning: function foo is deprecated\n?$"}} "libbarw.so" "c"} {"Build hidden libbar.so" "-shared" "-fPIC" @@ -792,7 +792,7 @@ set run_tests [list \ [list "Run warn with versioned libfoo.so" \ "-Wl,--no-as-needed tmpdir/beginwarn.o tmpdir/libfoov.so" "" \ {main.c} "warn" "warn.out" \ - "" "c" {^.*beginwarn.c:7: warning: function foo is deprecated$} ] \ + "" "c" {^.*beginwarn.c:7: warning: function foo is deprecated\n?$} ] \ [list "Run protected with versioned libfoo.so" \ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" "" \ {main.c} "protected" "normal.out" ] \ diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index 5c581e4..18829fd 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -515,6 +515,7 @@ if { [at_least_gcc_version 4 7] } { || [istarget "amd64-*-linux*"]) } { set testname "PR ld/12365" set exec_output [run_host_cmd "$CC" "-O2 -flto -flto-partition=none -fuse-linker-plugin -o tmpdir/pr12365 tmpdir/pr12365a.o tmpdir/pr12365b.o tmpdir/pr12365c.o"] + set exec_output [prune_warnings $exec_output] if { [ regexp "undefined reference to `my_bcopy'" $exec_output ] } { # Linker should catch the reference to undefined `my_bcopy' # error caused by a GCC bug. diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 2e7d368..1833bdd 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -1417,29 +1417,6 @@ proc run_ld_link_tests { ldtests args } { } } -# This definition is taken from an unreleased version of DejaGnu. Once -# that version gets released, and has been out in the world for a few -# months at least, it may be safe to delete this copy. -if ![string length [info proc prune_warnings]] { - # - # prune_warnings -- delete various system verbosities from TEXT - # - # An example is: - # ld.so: warning: /usr/lib/libc.so.1.8.1 has older revision than expected 9 - # - # Sites with particular verbose os's may wish to override this in site.exp. - # - proc prune_warnings { text } { - # This is from sun4's. Do it for all machines for now. - # The "\\1" is to try to preserve a "\n" but only if necessary. - regsub -all "(^|\n)(ld.so: warning:\[^\n\]*\n?)+" $text "\\1" text - - # It might be tempting to get carried away and delete blank lines, etc. - # Just delete *exactly* what we're ask to, and that's it. - return $text - } -} - # ldtests contains test-items with 3 items followed by 1 lists, 2 items # and 3 optional items: # 0:name -- 2.7.4