Home | History | Annotate | Download | only in ld-m68k
      1 # Expect script for run_dump_test based ld-m68k GOT tests.
      2 #   Copyright (C) 2008-2016 Free Software Foundation, Inc.
      3 #
      4 # This file is part of the GNU Binutils.
      5 #
      6 # This program is free software; you can redistribute it and/or modify
      7 # it under the terms of the GNU General Public License as published by
      8 # the Free Software Foundation; either version 3 of the License, or
      9 # (at your option) any later version.
     10 #
     11 # This program is distributed in the hope that it will be useful,
     12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 # GNU General Public License for more details.
     15 #
     16 # You should have received a copy of the GNU General Public License
     17 # along with this program; if not, write to the Free Software
     18 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19 # MA 02110-1301, USA.
     20 #
     21 
     22 if { ![is_elf_format] || ![istarget m68k-*-*] } {
     23     return
     24 }
     25 
     26 # 1 - 1
     27 # 2 - 8189
     28 # 3 - 8190
     29 # 4 - 16382
     30 # 5 - 16385
     31 
     32 proc gen_got_test { testname } {
     33     global srcdir
     34     global subdir
     35 
     36     if [catch { set ofd [open "tmpdir/$testname.s" w] } msg] {
     37 	perror "$msg"
     38 	unresolved $testname
     39 	return
     40     }
     41 
     42     switch --  $testname {
     43 	"got-12" {
     44 	    set start 1
     45 	    set count 8189
     46 	    set xgot 0
     47 	}
     48 	"got-13" {
     49 	    set start 1
     50 	    set count 8190
     51 	    set xgot 0
     52 	}
     53 	"got-14" {
     54 	    set start 1
     55 	    set count 16382
     56 	    set xgot 0
     57 	}
     58 	"got-15" {
     59 	    set start 1
     60 	    set count 16385
     61 	    set xgot 0
     62 	}
     63 	"got-34" {
     64 	    set start 8190
     65 	    set count 16382
     66 	    set xgot 0
     67 	}
     68 	"got-35" {
     69 	    set start 8190
     70 	    set count 16385
     71 	    set xgot 0
     72 	}
     73 	"xgot-15" {
     74 	    set start 1
     75 	    set count 16385
     76 	    set xgot 1
     77 	}
     78     }
     79 
     80     set func [format "sum_%05d_%05d" $start $count]
     81     puts $ofd "\t.text"
     82     puts $ofd "\t.align	2"
     83     puts $ofd "\t.globl $func"
     84     puts $ofd "\t.type $func,@function"
     85     puts $ofd "$func:"
     86     puts $ofd "\tlink.w %fp,#0"
     87     puts $ofd "\tmove.l %a5,-(%sp)"
     88     puts $ofd "\tmove.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5"
     89     puts $ofd "\tlea (-6, %pc, %a5), %a5"
     90 
     91     if { $xgot == 1 } {
     92 	set symbol [format "a%05d" $start]
     93 	incr start
     94 	puts $ofd "\tlea $symbol@GOT,%a0"
     95 	puts $ofd "\tadd.l %a5,%a0"
     96 	puts $ofd "\tmove.l (%a0),%a0"
     97 	puts $ofd "\tmove.l (%a0),%d1"
     98 	for { set i $start } { $i < $count } { incr i } {
     99 	    set symbol [format "a%05d" $i]
    100 	    puts $ofd "\tlea $symbol@GOT,%a0"
    101 	    puts $ofd "\tadd.l %a5,%a0"
    102 	    puts $ofd "\tmove.l (%a0),%a0"
    103 	    puts $ofd "\tmove.l (%a0),%d0"
    104 	    puts $ofd "\tadd.l %d0,%d1"
    105 	}
    106 	set symbol [format "a%05d" $count]
    107 	puts $ofd "\tlea $symbol@GOT,%a0"
    108 	puts $ofd "\tadd.l %a5,%a0"
    109 	puts $ofd "\tmove.l (%a0),%a0"
    110 	puts $ofd "\tmove.l (%a0),%d0"
    111 	puts $ofd "\tadd.l %d1,%d0"
    112     } else {
    113 	set symbol [format "a%05d" $start]
    114 	incr start
    115 	puts $ofd "\tmove.l $symbol@GOT(%a5),%d0"
    116 	puts $ofd "\tmove.l %d0,%a0"
    117 	puts $ofd "\tmove.l (%a0),%d1"
    118 	for { set i $start } { $i < $count } { incr i } {
    119 	    set symbol [format "a%05d" $i]
    120 	    puts $ofd "\tmove.l $symbol@GOT(%a5),%d0"
    121 	    puts $ofd "\tmove.l %d0,%a0"
    122 	    puts $ofd "\tmove.l (%a0),%d0"
    123 	    puts $ofd "\tadd.l %d0,%d1"
    124 	}
    125 	set symbol [format "a%05d" $count]
    126 	puts $ofd "\tmove.l $symbol@GOT(%a5),%d0"
    127 	puts $ofd "\tmove.l %d0,%a0"
    128 	puts $ofd "\tmove.l (%a0),%d0"
    129 	puts $ofd "\tadd.l %d1,%d0"
    130     }
    131 
    132     puts $ofd "\tmove.l (%sp)+,%a5"
    133     puts $ofd "\tunlk %fp"
    134     puts $ofd "\trts"
    135     puts $ofd "\t.size	$func, .-$func"
    136 
    137     close $ofd
    138 }
    139 
    140 proc got_test { testname } {
    141     global srcdir
    142     global subdir
    143     global objdir
    144 
    145     if [catch { set ifd [open "$srcdir/$subdir/$testname.d" r] } msg] {
    146 	perror "$msg"
    147 	unresolved $testname
    148 	return
    149     }
    150     if [catch { set ofd [open "tmpdir/$testname.d" w] } msg] {
    151 	perror "$msg"
    152 	unresolved $testname
    153 	return
    154     }
    155 
    156     switch --  $testname {
    157 	"got-single-12-ok" {
    158 	    puts $ofd "#source: $objdir/tmpdir/got-12.s"
    159 	    set count 8189
    160 	}
    161 	"got-single-13-er" {
    162 	    puts $ofd "#source: $objdir/tmpdir/got-13.s"
    163 	    set count 0
    164 	}
    165 	"got-negative-14-ok" {
    166 	    puts $ofd "#source: $objdir/tmpdir/got-14.s"
    167 	    set count 16382
    168 	}
    169 	"got-negative-15-er" {
    170 	    puts $ofd "#source: $objdir/tmpdir/got-15.s"
    171 	    set count 0
    172 	}
    173 	"got-negative-12-13-14-34-ok" {
    174 	    puts $ofd "#source: $objdir/tmpdir/got-12.s"
    175 	    puts $ofd "#source: $objdir/tmpdir/got-13.s"
    176 	    puts $ofd "#source: $objdir/tmpdir/got-14.s"
    177 	    puts $ofd "#source: $objdir/tmpdir/got-34.s"
    178 	    set count 16382
    179 	}
    180 	"got-negative-12-13-14-35-er" {
    181 	    puts $ofd "#source: $objdir/tmpdir/got-12.s"
    182 	    puts $ofd "#source: $objdir/tmpdir/got-13.s"
    183 	    puts $ofd "#source: $objdir/tmpdir/got-14.s"
    184 	    puts $ofd "#source: $objdir/tmpdir/got-35.s"
    185 	    set count 0
    186 	}
    187 	"got-multigot-14-ok" {
    188 	    puts $ofd "#source: $objdir/tmpdir/got-14.s"
    189 	    set count 16382
    190 	}
    191 	"got-multigot-15-er" {
    192 	    puts $ofd "#source: $objdir/tmpdir/got-15.s"
    193 	    set count 0
    194 	}
    195 	"got-multigot-12-13-14-34-35-ok" {
    196 	    puts $ofd "#source: $objdir/tmpdir/got-12.s"
    197 	    puts $ofd "#source: $objdir/tmpdir/got-13.s"
    198 	    puts $ofd "#source: $objdir/tmpdir/got-14.s"
    199 	    puts $ofd "#source: $objdir/tmpdir/got-34.s"
    200 	    puts $ofd "#source: $objdir/tmpdir/got-35.s"
    201 	    set count 24578
    202 	}
    203 	"got-xgot-15-ok" {
    204 	    puts $ofd "#source: $objdir/tmpdir/xgot-15.s"
    205 	    set count 16385
    206 	}
    207 	"got-xgot-12-13-14-15-34-35-ok" {
    208 	    puts $ofd "#source: $objdir/tmpdir/got-12.s"
    209 	    puts $ofd "#source: $objdir/tmpdir/got-13.s"
    210 	    puts $ofd "#source: $objdir/tmpdir/got-14.s"
    211 	    puts $ofd "#source: $objdir/tmpdir/xgot-15.s"
    212 	    puts $ofd "#source: $objdir/tmpdir/got-34.s"
    213 	    puts $ofd "#source: $objdir/tmpdir/got-35.s"
    214 	    set count 24581
    215 	}
    216     }
    217 
    218     while { [gets $ifd line] != -1 } {
    219 	puts $ofd $line
    220     }
    221 
    222     for { set i 0 } { $i < $count } { incr i } {
    223 	puts $ofd "^\[0-9a-f\]+  \[0-9a-f\]+ R_68K_GLOB_DAT    00000000   a\[0-9\]+ \\\+ 0"
    224     }
    225 
    226     close $ifd
    227     close $ofd
    228     run_dump_test "tmpdir/$testname"
    229 }
    230 
    231 gen_got_test got-12
    232 gen_got_test got-13
    233 gen_got_test got-14
    234 gen_got_test got-15
    235 gen_got_test got-34
    236 gen_got_test got-35
    237 gen_got_test xgot-15
    238 
    239 run_dump_test "got-1"
    240 got_test "got-single-12-ok"
    241 got_test "got-single-13-er"
    242 got_test "got-negative-14-ok"
    243 got_test "got-negative-15-er"
    244 got_test "got-negative-12-13-14-34-ok"
    245 got_test "got-negative-12-13-14-35-er"
    246 got_test "got-multigot-14-ok"
    247 got_test "got-multigot-15-er"
    248 got_test "got-multigot-12-13-14-34-35-ok"
    249 got_test "got-xgot-15-ok"
    250 got_test "got-xgot-12-13-14-15-34-35-ok"
    251