diff options
Diffstat (limited to 'binutils-2.21/ld/testsuite/ld-scripts/script.exp')
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-scripts/script.exp | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/binutils-2.21/ld/testsuite/ld-scripts/script.exp b/binutils-2.21/ld/testsuite/ld-scripts/script.exp new file mode 100644 index 0000000..2e69922 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-scripts/script.exp @@ -0,0 +1,138 @@ +# Test basic linker script functionality +# By Ian Lance Taylor, Cygnus Support +# Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2009, 2010 +# Free Software Foundation, Inc. +# +# 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 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., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. + +set testname "script" + +if ![ld_assemble $as $srcdir/$subdir/script.s tmpdir/script.o] { + unresolved $testname + return +} + +proc check_script { } { + global nm + global testname + global nm_output + + if ![ld_nm $nm "" tmpdir/script] { + unresolved $testname + return + } + + if {![info exists nm_output(text_start)] \ + || ![info exists nm_output(text_end)] \ + || ![info exists nm_output(data_start)] \ + || ![info exists nm_output(data_end)]} { + send_log "bad output from nm\n" + verbose "bad output from nm" + fail $testname + return + } + + set passes 1 + set text_end 0x104 + set data_end 0x1004 + + if [istarget *c4x*-*-*] then { + set text_end 0x101 + set data_end 0x1001 + } + + if [istarget *c54x*-*-*] then { + set text_end 0x102 + set data_end 0x1002 + } + + if {$nm_output(text_start) != 0x100} { + send_log "text_start == $nm_output(text_start)\n" + verbose "text_start == $nm_output(text_start)" + set passes 0 + } + + if {$nm_output(text_end) < $text_end \ + || $nm_output(text_end) > 0x110} { + send_log "text_end == $nm_output(text_end)\n" + verbose "text_end == $nm_output(text_end)" + set passes 0 + } + + if {$nm_output(data_start) != 0x1000} { + send_log "data_start == $nm_output(data_start)\n" + verbose "data_start == $nm_output(data_start)" + set passes 0 + } + + if {$nm_output(data_end) < $data_end \ + || $nm_output(data_end) > 0x1010} { + send_log "data_end == $nm_output(data_end)\n" + verbose "data_end == $nm_output(data_end)" + set passes 0 + } + + if { $passes } { + pass $testname + } else { + fail $testname + } +} + +# PE targets need to set the image base to 0 to avoid complications from nm. +set flags "" +if {[istarget "*-*-pe*"] \ + || [istarget "*-*-cygwin*"] \ + || [istarget "*-*-mingw*"] \ + || [istarget "*-*-winnt*"] \ + || [istarget "*-*-nt"] \ + || [istarget "*-*-interix*"] } then { + set flags "--image-base 0" +} + +if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] { + fail $testname +} else { + check_script +} + +set testname "MRI script" + +if ![ld_simple_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t"] { + fail $testname +} else { + check_script +} + +set testname "MEMORY" + +if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir/script.o"] { + fail $testname +} else { + check_script +} + +set test_script_list [lsort [glob $srcdir/$subdir/region-alias-*.t]] + +foreach test_script $test_script_list { + if ![ld_simple_link $ld tmpdir/script "$flags -T $test_script tmpdir/script.o"] { + xfail "REGION_ALIAS: $test_script" + } else { + xpass "REGION_ALIAS: $test_script" + } +} |