X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ld%2Ftestsuite%2Fld-bootstrap%2Fbootstrap.exp;h=ccb07d5eb930a83f88baa90a9232209015fb5b6d;hb=52248d53383e2ff905bacb46b1c24c89b64ab42e;hp=0e82a6abc99677bdec4c20cce0fb72a0d1f924be;hpb=d7b784871a7fae00ddc8d0110061476db0c276e9;p=platform%2Fupstream%2Fbinutils.git diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp index 0e82a6a..ccb07d5 100644 --- a/ld/testsuite/ld-bootstrap/bootstrap.exp +++ b/ld/testsuite/ld-bootstrap/bootstrap.exp @@ -1,20 +1,22 @@ # Expect script for LD Bootstrap Tests -# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 -# Free Software Foundation, Inc. +# Copyright (C) 1993-2014 Free Software Foundation, Inc. # -# This file is free software; you can redistribute it and/or modify +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. # # Written by Jeffrey Wheat (cassidy@cygnus.com) # Rewritten by Ian Lance Taylor (ian@cygnus.com) @@ -27,12 +29,32 @@ if ![isnative] { return } +# Determine if plugin support is present. +remote_exec host "$nm --help" "" "/dev/null" "plugin-support" +set tmp [file_contents "plugin-support"] +regexp ".*\(--plugin\).*\n" $tmp foo plugins +if [info exists plugins] then { + set plugins "yes" +} else { + set plugins "no" +} + +# LD can have plugin support even if BFD does not. +if [check_plugin_api_available] { + set plugins "yes" +} + # Bootstrap ld. First link the object files together using -r, in # order to test -r. Then link the result into an executable, ld1, to # really test -r. Use ld1 to link a fresh ld, ld2. Use ld2 to link a # new ld, ld3. ld2 and ld3 should be identical. +set test_flags {"" "strip" "--static" "--traditional-format" + "--no-keep-memory" "--relax"} +if { [istarget "powerpc-*-*"] } { + lappend test_flags "--ppc476-workaround" +} -foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} { +foreach flags $test_flags { set do_strip "no" if {"$flags" == "strip"} { set testname "bootstrap with $flags" @@ -44,9 +66,31 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} set testname "bootstrap" }} + # --static is meaningless and --relax is incompatible with -r. + set partial_flags "$flags" + if { "$flags" == "--static" || "$flags" == "--relax" } { + set partial_flags "" + } + + if { $partial_flags == "--ppc476-workaround" } { + append partial_flags " -T $srcdir/$subdir/ppc476.t" + } + # This test can only be run if we have the ld build directory, # since we need the object files. - if {$ld != "$objdir/ld-new"} { + set ldexe $ld + set ldparm [string first " " $ld] + if { $ldparm > 0 } then { + set ldexe [string range $ld 0 $ldparm] + } + if {$ldexe != "$objdir/ld-new"} { + untested $testname + continue + } + + # Plugin support requires linking with a dynamic library which + # means that these tests will fail. + if { $flags == "--static" && $plugins == "yes" } then { untested $testname continue } @@ -58,7 +102,7 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} continue } - if ![ld_relocate $ld tmpdir/ld-partial.o "$flags $OFILES"] { + if ![ld_relocate $ld tmpdir/ld-partial.o "$partial_flags $OFILES"] { fail $testname continue } @@ -73,13 +117,28 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} } } + # On Cygwin, -lintl may require -liconv when linking statically. + set extralibs "" + if { [istarget "*-*-cygwin*"]} { + if {"$flags" == "--static"} { + set extralibs "-liconv" + } + } + + # Plugin support requires linking with libdl. + if { $plugins == "yes" } { + if { ![istarget "*-*-freebsd*"]} { + set extralibs "$extralibs -ldl" + } + } + # On Irix 5, linking with --static only works if all the files are # compiled using -non_shared. if {"$flags" == "--static"} { setup_xfail "mips*-*-irix5*" } - if ![ld_link $ld tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY"] { + if ![ld_link $ld tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY $extralibs"] { fail $testname continue } @@ -94,12 +153,12 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} } } - if ![ld_link tmpdir/ld1 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] { + if ![ld_link tmpdir/ld1 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] { fail $testname continue } - if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY"] { + if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] { fail $testname continue } @@ -110,7 +169,7 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} # On ia64, tmpdir/ld2 != tmpdir/ld3 is normal since they are # generated by different linkers, tmpdir/ld1 and tmpdir/ld2. # So we rebuild tmpdir/ld2 with tmpdir/ld3. - if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] { + if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] { fail $testname continue } @@ -120,24 +179,35 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} # On Linux/mips, tmpdir/ld2 != tmpdir/ld3 is normal since # they are generated by different linkers, tmpdir/ld1 and # tmpdir/ld2. So we rebuild tmpdir/ld2 with tmpdir/ld3. - if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] { + if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] { fail $testname continue } } } - send_log "compare (tail of) tmpdir/ld2 tmpdir/ld3\n" - verbose "compare (tail of) tmpdir/ld2 tmpdir/ld3" - # Trim off the date present in PE binaries by only looking - # at the ends of the files - # Although this works, a way to set the date would be better. - # Removing or zeroing the date stamp in the binary produced by - # the linker is not possible as it is required by the target OS. - exec tail +140 tmpdir/ld2 >tmpdir/ld2tail - exec tail +140 tmpdir/ld3 >tmpdir/ld3tail - catch "exec cmp tmpdir/ld2tail tmpdir/ld3tail" exec_output - exec rm tmpdir/ld2tail tmpdir/ld3tail + if {[istarget "*-*-pe"] + || [istarget "*-*-wince"] + || [istarget "*-*-cygwin*"] + || [istarget "*-*-winnt*"] + || [istarget "*-*-mingw*"] + || [istarget "*-*-interix*"] + || [istarget "*-*-beospe*"] + || [istarget "*-*-netbsdpe*"]} { + # Trim off the date present in PE binaries by only looking + # at the ends of the files + # Although this works, a way to set the date would be better. + # Removing or zeroing the date stamp in the binary produced by + # the linker is not possible as it is required by the target OS. + set do_compare [string map {16 220 f1 tmpdir/ld2 f2 tmpdir/ld3 tmp-foo1 tmpdir/ld2tail tmp-foo2 tmpdir/ld3tail} $DO_COMPARE] + send_log "$do_compare\n" + verbose "$do_compare" + catch "exec sh -c [list $do_compare]" exec_output + } else { + send_log "cmp tmpdir/ld2 tmpdir/ld3\n" + verbose "cmp tmpdir/ld2 tmpdir/ld3" + catch "exec cmp tmpdir/ld2 tmpdir/ld3" exec_output + } set exec_output [prune_warnings $exec_output] if [string match "" $exec_output] then { @@ -149,3 +219,6 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} fail $testname } } + +catch "exec rm -f tmpdir/ld-partial.o tmpdir/ld1 tmpdir/ld2 tmpdir/ld3" status +catch "exec rm -f tmpdir/ld2tail tmpdir/ld3tail" status