diff options
Diffstat (limited to 'ld/testsuite/ld-m68k/m68k-got.exp')
-rw-r--r-- | ld/testsuite/ld-m68k/m68k-got.exp | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/ld/testsuite/ld-m68k/m68k-got.exp b/ld/testsuite/ld-m68k/m68k-got.exp new file mode 100644 index 0000000..4902eac --- /dev/null +++ b/ld/testsuite/ld-m68k/m68k-got.exp @@ -0,0 +1,250 @@ +# Expect script for run_dump_test based ld-m68k GOT tests. +# Copyright 008 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. +# + +if { ![is_elf_format] || ![istarget m68k-*-*] } { + return +} + +# 1 - 1 +# 2 - 8189 +# 3 - 8190 +# 4 - 16384 +# 5 - 16385 + +proc gen_got_test { testname } { + global srcdir + global subdir + + if [catch { set ofd [open "tmpdir/$testname.s" w] } msg] { + perror "$msg" + unresolved $testname + return + } + + switch -- $testname { + "got-12" { + set start 1 + set count 8189 + set xgot 0 + } + "got-13" { + set start 1 + set count 8190 + set xgot 0 + } + "got-14" { + set start 1 + set count 16384 + set xgot 0 + } + "got-15" { + set start 1 + set count 16385 + set xgot 0 + } + "got-34" { + set start 8190 + set count 16384 + set xgot 0 + } + "got-35" { + set start 8190 + set count 16385 + set xgot 0 + } + "xgot-15" { + set start 1 + set count 16385 + set xgot 1 + } + } + + set func [format "sum_%05d_%05d" $start $count] + puts $ofd "\t.text" + puts $ofd "\t.align 2" + puts $ofd "\t.globl $func" + puts $ofd "\t.type $func,@function" + puts $ofd "$func:" + puts $ofd "\tlink.w %fp,#0" + puts $ofd "\tmove.l %a5,-(%sp)" + puts $ofd "\tmove.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5" + puts $ofd "\tlea (-6, %pc, %a5), %a5" + + if { $xgot == 1 } { + set symbol [format "a%05d" $start] + incr start + puts $ofd "\tlea $symbol@GOT,%a0" + puts $ofd "\tadd.l %a5,%a0" + puts $ofd "\tmove.l (%a0),%a0" + puts $ofd "\tmove.l (%a0),%d1" + for { set i $start } { $i < $count } { incr i } { + set symbol [format "a%05d" $i] + puts $ofd "\tlea $symbol@GOT,%a0" + puts $ofd "\tadd.l %a5,%a0" + puts $ofd "\tmove.l (%a0),%a0" + puts $ofd "\tmove.l (%a0),%d0" + puts $ofd "\tadd.l %d0,%d1" + } + set symbol [format "a%05d" $count] + puts $ofd "\tlea $symbol@GOT,%a0" + puts $ofd "\tadd.l %a5,%a0" + puts $ofd "\tmove.l (%a0),%a0" + puts $ofd "\tmove.l (%a0),%d0" + puts $ofd "\tadd.l %d1,%d0" + } else { + set symbol [format "a%05d" $start] + incr start + puts $ofd "\tmove.l $symbol@GOT(%a5),%d0" + puts $ofd "\tmove.l %d0,%a0" + puts $ofd "\tmove.l (%a0),%d1" + for { set i $start } { $i < $count } { incr i } { + set symbol [format "a%05d" $i] + puts $ofd "\tmove.l $symbol@GOT(%a5),%d0" + puts $ofd "\tmove.l %d0,%a0" + puts $ofd "\tmove.l (%a0),%d0" + puts $ofd "\tadd.l %d0,%d1" + } + set symbol [format "a%05d" $count] + puts $ofd "\tmove.l $symbol@GOT(%a5),%d0" + puts $ofd "\tmove.l %d0,%a0" + puts $ofd "\tmove.l (%a0),%d0" + puts $ofd "\tadd.l %d1,%d0" + } + + puts $ofd "\tmove.l (%sp)+,%a5" + puts $ofd "\tunlk %fp" + puts $ofd "\trts" + puts $ofd "\t.size $func, .-$func" + + close $ofd +} + +proc got_test { testname } { + global srcdir + global subdir + global objdir + + if [catch { set ifd [open "$srcdir/$subdir/$testname.d" r] } msg] { + perror "$msg" + unresolved $testname + return + } + if [catch { set ofd [open "tmpdir/$testname.d" w] } msg] { + perror "$msg" + unresolved $testname + return + } + + switch -- $testname { + "got-single-12-ok" { + puts $ofd "#source: $objdir/tmpdir/got-12.s" + set count 8189 + } + "got-single-13-er" { + puts $ofd "#source: $objdir/tmpdir/got-13.s" + set count 0 + } + "got-negative-14-ok" { + puts $ofd "#source: $objdir/tmpdir/got-14.s" + set count 16384 + } + "got-negative-15-er" { + puts $ofd "#source: $objdir/tmpdir/got-15.s" + set count 0 + } + "got-negative-12-13-14-34-ok" { + puts $ofd "#source: $objdir/tmpdir/got-12.s" + puts $ofd "#source: $objdir/tmpdir/got-13.s" + puts $ofd "#source: $objdir/tmpdir/got-14.s" + puts $ofd "#source: $objdir/tmpdir/got-34.s" + set count 16384 + } + "got-negative-12-13-14-35-er" { + puts $ofd "#source: $objdir/tmpdir/got-12.s" + puts $ofd "#source: $objdir/tmpdir/got-13.s" + puts $ofd "#source: $objdir/tmpdir/got-14.s" + puts $ofd "#source: $objdir/tmpdir/got-35.s" + set count 0 + } + "got-multigot-14-ok" { + puts $ofd "#source: $objdir/tmpdir/got-14.s" + set count 16384 + } + "got-multigot-15-er" { + puts $ofd "#source: $objdir/tmpdir/got-15.s" + set count 0 + } + "got-multigot-12-13-14-34-35-ok" { + puts $ofd "#source: $objdir/tmpdir/got-12.s" + puts $ofd "#source: $objdir/tmpdir/got-13.s" + puts $ofd "#source: $objdir/tmpdir/got-14.s" + puts $ofd "#source: $objdir/tmpdir/got-34.s" + puts $ofd "#source: $objdir/tmpdir/got-35.s" + set count 24580 + } + "got-xgot-15-ok" { + puts $ofd "#source: $objdir/tmpdir/xgot-15.s" + set count 16385 + } + "got-xgot-12-13-14-15-34-35-ok" { + puts $ofd "#source: $objdir/tmpdir/got-12.s" + puts $ofd "#source: $objdir/tmpdir/got-13.s" + puts $ofd "#source: $objdir/tmpdir/got-14.s" + puts $ofd "#source: $objdir/tmpdir/xgot-15.s" + puts $ofd "#source: $objdir/tmpdir/got-34.s" + puts $ofd "#source: $objdir/tmpdir/got-35.s" + set count 24581 + } + } + + while { [gets $ifd line] != -1 } { + puts $ofd $line + } + + for { set i 0 } { $i < $count } { incr i } { + puts $ofd "^\[0-9a-f\]+ \[0-9a-f\]+ R_68K_GLOB_DAT 00000000 a\[0-9\]+ \\\+ 0" + } + + close $ifd + close $ofd + run_dump_test "tmpdir/$testname" +} + +gen_got_test got-12 +gen_got_test got-13 +gen_got_test got-14 +gen_got_test got-15 +gen_got_test got-34 +gen_got_test got-35 +gen_got_test xgot-15 + +run_dump_test "got-1" +got_test "got-single-12-ok" +got_test "got-single-13-er" +got_test "got-negative-14-ok" +got_test "got-negative-15-er" +got_test "got-negative-12-13-14-34-ok" +got_test "got-negative-12-13-14-35-er" +got_test "got-multigot-14-ok" +got_test "got-multigot-15-er" +got_test "got-multigot-12-13-14-34-35-ok" +got_test "got-xgot-15-ok" +got_test "got-xgot-12-13-14-15-34-35-ok" |