X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ld%2Ftestsuite%2Fld-bootstrap%2Fbootstrap.exp;h=ccb07d5eb930a83f88baa90a9232209015fb5b6d;hb=52248d53383e2ff905bacb46b1c24c89b64ab42e;hp=c98916714915e0bddd877875ac8d17fcdece0863;hpb=ad995491f834d95f3671f8fb96938be3f633f7de;p=platform%2Fupstream%2Fbinutils.git diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp index c989167..ccb07d5 100644 --- a/ld/testsuite/ld-bootstrap/bootstrap.exp +++ b/ld/testsuite/ld-bootstrap/bootstrap.exp @@ -1,19 +1,22 @@ # Expect script for LD Bootstrap Tests -# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation +# 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) @@ -26,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" @@ -43,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 } @@ -57,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 } @@ -65,19 +110,35 @@ foreach flags {"" "strip" "--static" "--traditional-format" "--no-keep-memory"} # On AIX, you need to specify an import list when using --static. # You only want the import list when creating the final # executable. - if [istarget "*-*-aix*"] { + if { [istarget "*-*-aix*"] + && ![istarget "ia64-*-aix*"]} { if {"$flags" == "--static"} { set flags "--static -bI:/lib/syscalls.exp" } } + # 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 } @@ -92,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 } @@ -108,16 +169,45 @@ 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 + } + } + } else { + if { [istarget mips*-*-linux*] } { + # 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 $extralibs"] { fail $testname continue } } } - send_log "cmp tmpdir/ld2 tmpdir/ld3\n" - verbose "cmp tmpdir/ld2 tmpdir/ld3" - catch "exec cmp tmpdir/ld2 tmpdir/ld3" exec_output + 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 { @@ -129,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