Home | History | Annotate | Download | only in binutils-all
      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 
     17 if {![istarget "i*86-*-*"]
     18     && ![istarget "x86_64-*-mingw*"]
     19     && ![istarget "arm-*-pe*"]} {
     20     return
     21 }
     22 
     23 if {![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.
     34 if { [istarget "arm-*-pe*"] } {
     35     set target_no_leading_underscore "yes"
     36 } else {
     37     set target_no_leading_underscore "no"
     38 }
     39 
     40 if {![info exists DLLTOOL]} then {
     41     return
     42 }
     43 
     44 if {[which $DLLTOOL] == 0} then {
     45     return
     46 }
     47 
     48 verbose "$DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" 1
     49 catch "exec $DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" err
     50 
     51 if ![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 
     59 if { "$target_xfail" == "yes" } {
     60     setup_xfail *-*
     61 }
     62 
     63 verbose "$DLLTOOL -l libversion.a --def $srcdir/$subdir/version.def $dlltool_gas_flag" 1
     64 catch "exec $DLLTOOL -l libersion.a --def $srcdir/$subdir/version.def $dlltool_gas_flag" err
     65 
     66 if ![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 
     74 if { "$target_xfail" == "yes" } {
     75     setup_xfail *-*
     76 }
     77 
     78 verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1
     79 catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err
     80 
     81 if ![string match "" $err] then {
     82     send_log "$err\n"
     83     verbose "$err" 1
     84     fail "dlltool -p (execution)"
     85     continue
     86 }
     87 
     88 pass "dlltool -p (execution)"
     89 
     90 set got [binutils_run $NM "tmpdir/libalias.a"]
     91 if { "$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 
     97 if [regexp $want $got] then {
     98     pass "dlltool -p (symbol names)"
     99 } else {
    100     fail "dlltool -p (symbol names)"
    101 }
    102 
    103 set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias.a"]
    104 set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\.\\..*){2,2}"
    105 
    106 if [regexp $want $got] then {
    107     pass "dlltool -p (import name)"
    108 } else {
    109     fail "dlltool -p (import name)"
    110 }
    111 
    112 verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1
    113 catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err
    114 
    115 if ![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 
    122 pass "dlltool -p (execution) alias-2.def"
    123 
    124 set got [binutils_run $NM "tmpdir/libalias2.a"]
    125 if { "$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 
    131 if [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 
    137 set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias2.a"]
    138 set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}"
    139 
    140 if [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 
    148 verbose "$DLLTOOL --no-leading-underscore -d $srcdir/$subdir/fastcall.def" 1
    149 catch "exec $DLLTOOL --no-leading-underscore -d $srcdir/$subdir/fastcall.def" err
    150 
    151 if ![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 
    159 verbose "$DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1
    160 catch "exec $DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err
    161 
    162 if ![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 
    169 pass "dlltool -p (execution no leading underscore)"
    170 
    171 set got [binutils_run $NM "tmpdir/libalias_nu.a"]
    172 set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"
    173 
    174 if [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 
    180 set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_nu.a"]
    181 set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\.\\..*){2,2}"
    182 
    183 if [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 
    189 verbose "$DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1
    190 catch "exec $DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err
    191 
    192 if ![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 
    199 pass "dlltool -p (execution no leading underscore) alias-2.def"
    200 
    201 set got [binutils_run $NM "tmpdir/libalias_nu2.a"]
    202 set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"
    203 
    204 if [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 
    210 set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_nu2.a"]
    211 set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}"
    212 
    213 if [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
    220 verbose "$DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" 1
    221 catch "exec $DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" err
    222 
    223 if ![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 
    231 verbose "$DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1
    232 catch "exec $DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err
    233 
    234 if ![string match "" $err] then {
    235     send_log "$err\n"
    236     verbose "$err" 1
    237     fail "dlltool -p (execution leading underscore)"
    238     continue
    239 }
    240 
    241 pass "dlltool -p (execution leading-underscore)"
    242 
    243 set got [binutils_run $NM "tmpdir/libalias_u.a"]
    244 if { "$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 
    250 if { "$target_xfail" == "yes" } {
    251     setup_xfail *-*
    252 }
    253 
    254 if [regexp $want $got] then {
    255     pass "dlltool -p (symbol names leading underscore)"
    256 } else {
    257     fail "dlltool -p (symbol names leading underscore)"
    258 }
    259 
    260 set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_u.a"]
    261 set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\..*){2,2}"
    262 
    263 if [regexp $want $got] then {
    264     pass "dlltool -p (import name leading underscore)"
    265 } else {
    266     fail "dlltool -p (import name leading underscore)"
    267 }
    268 
    269 verbose "$DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1
    270 catch "exec $DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err
    271 
    272 if ![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 
    279 pass "dlltool -p (execution leading underscore) alias-2.def"
    280 
    281 set got [binutils_run $NM "tmpdir/libalias_u2.a"]
    282 if { "$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 
    288 if [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 
    294 set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_u2.a"]
    295 set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}"
    296 
    297 if [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