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 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