1# Expect script for run_dump_test based ld-m68k GOT tests. 2# Copyright (C) 2008-2014 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 22if { ![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 32proc 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 140proc 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 231gen_got_test got-12 232gen_got_test got-13 233gen_got_test got-14 234gen_got_test got-15 235gen_got_test got-34 236gen_got_test got-35 237gen_got_test xgot-15 238 239run_dump_test "got-1" 240got_test "got-single-12-ok" 241got_test "got-single-13-er" 242got_test "got-negative-14-ok" 243got_test "got-negative-15-er" 244got_test "got-negative-12-13-14-34-ok" 245got_test "got-negative-12-13-14-35-er" 246got_test "got-multigot-14-ok" 247got_test "got-multigot-15-er" 248got_test "got-multigot-12-13-14-34-35-ok" 249got_test "got-xgot-15-ok" 250got_test "got-xgot-12-13-14-15-34-35-ok" 251