1# Copyright (C) 2002-2016 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program; if not, write to the Free Software 15# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 16 17if {![istarget "i*86-*-*"] 18 && ![istarget "x86_64-*-mingw*"] 19 && ![istarget "arm-*-pe*"]} { 20 return 21} 22 23if {![istarget "i*86-*-*pe*"] \ 24 && ![istarget "i*86-*-cygwin*"] \ 25 && ![istarget "i*86-*-mingw32*"] \ 26 && ![istarget "arm-*-pe*"] \ 27 && ![istarget "x86_64-*-mingw*"] } { 28 set target_xfail "yes" 29} else { 30 set target_xfail "no" 31} 32 33# PR 19459: The ARM does not support inserting a leading underscore. 34if { [istarget "arm-*-pe*"] } { 35 set target_no_leading_underscore "yes" 36} else { 37 set target_no_leading_underscore "no" 38} 39 40if {![info exists DLLTOOL]} then { 41 return 42} 43 44if {[which $DLLTOOL] == 0} then { 45 return 46} 47 48verbose "$DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" 1 49catch "exec $DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" err 50 51if ![string match "" $err] then { 52 send_log "$err\n" 53 verbose "$err" 1 54 fail "dlltool (fastcall export)" 55} else { 56 pass "dlltool (fastcall export)" 57} 58 59if { "$target_xfail" == "yes" } { 60 setup_xfail *-* 61} 62 63verbose "$DLLTOOL -l libversion.a --def $srcdir/$subdir/version.def $dlltool_gas_flag" 1 64catch "exec $DLLTOOL -l libersion.a --def $srcdir/$subdir/version.def $dlltool_gas_flag" err 65 66if ![string match "" $err] then { 67 send_log "$err\n" 68 verbose "$err" 1 69 fail "dlltool (version.dll)" 70} else { 71 pass "dlltool (version.dll)" 72} 73 74if { "$target_xfail" == "yes" } { 75 setup_xfail *-* 76} 77 78verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1 79catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err 80 81if ![string match "" $err] then { 82 send_log "$err\n" 83 verbose "$err" 1 84 fail "dlltool -p (execution)" 85 continue 86} 87 88pass "dlltool -p (execution)" 89 90set got [binutils_run $NM "tmpdir/libalias.a"] 91if { "$target_no_leading_underscore" == "yes" } { 92 set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol" 93} else { 94 set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol" 95} 96 97if [regexp $want $got] then { 98 pass "dlltool -p (symbol names)" 99} else { 100 fail "dlltool -p (symbol names)" 101} 102 103set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias.a"] 104set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\.\\..*){2,2}" 105 106if [regexp $want $got] then { 107 pass "dlltool -p (import name)" 108} else { 109 fail "dlltool -p (import name)" 110} 111 112verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1 113catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err 114 115if ![string match "" $err] then { 116 send_log "$err\n" 117 verbose "$err" 1 118 fail "dlltool -p (execution) alias-2.def" 119 continue 120} 121 122pass "dlltool -p (execution) alias-2.def" 123 124set got [binutils_run $NM "tmpdir/libalias2.a"] 125if { "$target_no_leading_underscore" == "yes" } { 126 set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol" 127} else { 128 set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol" 129} 130 131if [regexp $want $got] then { 132 pass "dlltool -p (symbol names) alias-2.def" 133} else { 134 fail "dlltool -p (symbol names) alias-2.def" 135} 136 137set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias2.a"] 138set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}" 139 140if [regexp $want $got] then { 141 pass "dlltool -p (import name) alias-2.def" 142} else { 143 fail "dlltool -p (import name) alias-2.def" 144} 145 146# Here we test explicit without leading underscore 147 148verbose "$DLLTOOL --no-leading-underscore -d $srcdir/$subdir/fastcall.def" 1 149catch "exec $DLLTOOL --no-leading-underscore -d $srcdir/$subdir/fastcall.def" err 150 151if ![string match "" $err] then { 152 send_log "$err\n" 153 verbose "$err" 1 154 fail "dlltool (fastcall export no leading underscore)" 155} else { 156 pass "dlltool (fastcall export no leading underscore)" 157} 158 159verbose "$DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1 160catch "exec $DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err 161 162if ![string match "" $err] then { 163 send_log "$err\n" 164 verbose "$err" 1 165 fail "dlltool -p (execution no leading underscore)" 166 continue 167} 168 169pass "dlltool -p (execution no leading underscore)" 170 171set got [binutils_run $NM "tmpdir/libalias_nu.a"] 172set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol" 173 174if [regexp $want $got] then { 175 pass "dlltool -p (symbol names no leading underscore)" 176} else { 177 fail "dlltool -p (symbol names no leading underscore)" 178} 179 180set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_nu.a"] 181set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\.\\..*){2,2}" 182 183if [regexp $want $got] then { 184 pass "dlltool -p (import name no leading underscore)" 185} else { 186 fail "dlltool -p (import name no leading underscore)" 187} 188 189verbose "$DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1 190catch "exec $DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err 191 192if ![string match "" $err] then { 193 send_log "$err\n" 194 verbose "$err" 1 195 fail "dlltool -p (execution no leading underscore) alias-2.def" 196 continue 197} 198 199pass "dlltool -p (execution no leading underscore) alias-2.def" 200 201set got [binutils_run $NM "tmpdir/libalias_nu2.a"] 202set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol" 203 204if [regexp $want $got] then { 205 pass "dlltool -p (symbol names no leading underscore) alias-2.def" 206} else { 207 fail "dlltool -p (symbol names no leading underscore) alias-2.def" 208} 209 210set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_nu2.a"] 211set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}" 212 213if [regexp $want $got] then { 214 pass "dlltool -p (import name no leading underscore) alias-2.def" 215} else { 216 fail "dlltool -p (import name no leading underscore) alias-2.def" 217} 218 219# Now we test with leading underscore 220verbose "$DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" 1 221catch "exec $DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" err 222 223if ![string match "" $err] then { 224 send_log "$err\n" 225 verbose "$err" 1 226 fail "dlltool (fastcall export leading underscore)" 227} else { 228 pass "dlltool (fastcall export leading underscore)" 229} 230 231verbose "$DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1 232catch "exec $DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err 233 234if ![string match "" $err] then { 235 send_log "$err\n" 236 verbose "$err" 1 237 fail "dlltool -p (execution leading underscore)" 238 continue 239} 240 241pass "dlltool -p (execution leading-underscore)" 242 243set got [binutils_run $NM "tmpdir/libalias_u.a"] 244if { "$target_no_leading_underscore" == "yes" } { 245 set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol" 246} else { 247 set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol" 248} 249 250if { "$target_xfail" == "yes" } { 251 setup_xfail *-* 252} 253 254if [regexp $want $got] then { 255 pass "dlltool -p (symbol names leading underscore)" 256} else { 257 fail "dlltool -p (symbol names leading underscore)" 258} 259 260set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_u.a"] 261set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\..*){2,2}" 262 263if [regexp $want $got] then { 264 pass "dlltool -p (import name leading underscore)" 265} else { 266 fail "dlltool -p (import name leading underscore)" 267} 268 269verbose "$DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1 270catch "exec $DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err 271 272if ![string match "" $err] then { 273 send_log "$err\n" 274 verbose "$err" 1 275 fail "dlltool -p (execution) alias-2.def" 276 continue 277} 278 279pass "dlltool -p (execution leading underscore) alias-2.def" 280 281set got [binutils_run $NM "tmpdir/libalias_u2.a"] 282if { "$target_no_leading_underscore" == "yes" } { 283 set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol" 284} else { 285 set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol" 286} 287 288if [regexp $want $got] then { 289 pass "dlltool -p (symbol names leading underscore) alias-2.def" 290} else { 291 fail "dlltool -p (symbol names leading underscore) alias-2.def" 292} 293 294set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_u2.a"] 295set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}" 296 297if [regexp $want $got] then { 298 pass "dlltool -p (import name leading underscore) alias-2.def" 299} else { 300 fail "dlltool -p (import name leading underscore) alias-2.def" 301} 302