Home | History | Annotate | Download | only in ld-i386
      1 # Expect script for i386 no-PLT tests.
      2 #   Copyright (C) 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 # The following tests require running the executable generated by ld,
     23 # or enough of a build environment to create a fully linked executable.
     24 # This is not commonly available when testing a cross-built linker.
     25 if ![isnative] {
     26     return
     27 }
     28 
     29 if ![is_elf_format] {
     30     return
     31 }
     32 
     33 if ![istarget "i?86-*-*"] {
     34     return
     35 }
     36 
     37 # Check to see if the C compiler works
     38 if { [which $CC] == 0 } {
     39     return
     40 }
     41 
     42 run_cc_link_tests [list \
     43     [list \
     44 	"Build no-plt-func1.o no-plt-main1.o" \
     45 	"" \
     46 	"-fPIE" \
     47 	{no-plt-func1.c no-plt-main1.c} \
     48     ] \
     49     [list \
     50 	"Build no-plt-check1a.o no-plt-extern1a.o \
     51 	 no-plt-check1b.o no-plt-extern1b.o" \
     52 	"" \
     53 	"-Wa,-mrelax-relocations=yes" \
     54 	{no-plt-check1a.S no-plt-extern1a.S \
     55 	 no-plt-check1b.S no-plt-extern1b.S } \
     56     ] \
     57     [list \
     58 	"Build libno-plt-1a.so" \
     59 	"-shared tmpdir/no-plt-func1.o" \
     60 	"" \
     61 	{dummy.s} \
     62 	{} \
     63 	"libno-plt-1a.so" \
     64     ] \
     65     [list \
     66 	"Build libno-plt-1b.so" \
     67 	"-shared tmpdir/no-plt-extern1a.o" \
     68 	"" \
     69 	{dummy.s} \
     70 	{{readelf -Wr libno-plt-1b.rd} \
     71 	 {objdump -dwrj.text libno-plt-1b.dd}} \
     72 	"libno-plt-1b.so" \
     73     ] \
     74     [list \
     75 	"No PLT (dynamic 1a)" \
     76 	"tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
     77 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
     78 	"" \
     79 	{dummy.s} \
     80 	{{readelf -Wr no-plt-1a.rd} {objdump -dwrj.text no-plt-1a.dd}} \
     81 	"no-plt-1a" \
     82     ] \
     83     [list \
     84 	"No PLT (dynamic 1b)" \
     85 	"tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
     86 	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
     87 	"" \
     88 	{dummy.s} \
     89 	{{readelf -Wr no-plt-1b.rd} {objdump -dwrj.text no-plt-1b.dd}} \
     90 	"no-plt-1b" \
     91     ] \
     92     [list \
     93 	"No PLT (dynamic 1c)" \
     94 	"tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
     95 	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
     96 	"" \
     97 	{dummy.s} \
     98 	{{readelf -Wr no-plt-1c.rd} {objdump -dwrj.text no-plt-1c.dd}} \
     99 	"no-plt-1c" \
    100     ] \
    101     [list \
    102 	"No PLT (static 1d)" \
    103 	"-static tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    104 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
    105 	"" \
    106 	{dummy.s} \
    107 	{{readelf -Wr no-plt-1d.rd} {objdump -dwrj.text no-plt-1d.dd}} \
    108 	"no-plt-1d" \
    109     ] \
    110     [list \
    111 	"No PLT (PIE 1e)" \
    112 	"-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    113 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
    114 	"" \
    115 	{dummy.s} \
    116 	{{readelf -Wr no-plt-1e.rd} {objdump -dwrj.text no-plt-1e.dd}} \
    117 	"no-plt-1e" \
    118     ] \
    119     [list \
    120 	"No PLT (PIE 1f)" \
    121 	"-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    122 	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
    123 	"" \
    124 	{ dummy.s } \
    125 	{{readelf -Wr no-plt-1f.rd} {objdump -dwrj.text no-plt-1f.dd}} \
    126 	"no-plt-1f" \
    127     ] \
    128     [list \
    129 	"No PLT (PIE 1g)" \
    130 	"-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    131 	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
    132 	"" \
    133 	{ dummy.s } \
    134 	{{readelf -Wr no-plt-1g.rd} {objdump -dwrj.text no-plt-1g.dd}} \
    135 	"no-plt-1g" \
    136     ] \
    137     [list \
    138 	"No PLT (dynamic 1h)" \
    139 	"tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
    140 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
    141 	"" \
    142 	{dummy.s} \
    143 	{{readelf -Wr no-plt-1h.rd} {objdump -dwrj.text no-plt-1h.dd}} \
    144 	"no-plt-1h" \
    145     ] \
    146     [list \
    147 	"No PLT (dynamic 1i)" \
    148 	"tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
    149 	 tmpdir/no-plt-extern1b.o tmpdir/libno-plt-1a.so" \
    150 	"" \
    151 	{dummy.s} \
    152 	{{readelf -Wr no-plt-1i.rd} {objdump -dwrj.text no-plt-1i.dd}} \
    153 	"no-plt-1i" \
    154     ] \
    155     [list \
    156 	"No PLT (static 1j)" \
    157 	"-static tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
    158 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
    159 	"" \
    160 	{dummy.s} \
    161 	{{readelf -Wr no-plt-1j.rd} {objdump -dwrj.text no-plt-1j.dd}} \
    162 	"no-plt-1j" \
    163     ] \
    164 ]
    165 
    166 run_ld_link_exec_tests [] [list \
    167     [list \
    168 	"No PLT (dynamic 1a)" \
    169 	"tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    170 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
    171 	"" \
    172 	{ dummy.s } \
    173 	"no-plt-1a" \
    174 	"pass.out" \
    175     ] \
    176     [list \
    177 	"No PLT (dynamic 1b)" \
    178 	"tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    179 	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
    180 	"" \
    181 	{ dummy.s } \
    182 	"no-plt-1b" \
    183 	"pass.out" \
    184     ] \
    185     [list \
    186 	"No PLT (dynamic 1c)" \
    187 	"tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    188 	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
    189 	"" \
    190 	{ dummy.s } \
    191 	"no-plt-1c" \
    192 	"pass.out" \
    193     ] \
    194     [list \
    195 	"No PLT (static 1d)" \
    196 	"-static tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    197 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
    198 	"" \
    199 	{ dummy.s } \
    200 	"no-plt-1d" \
    201 	"pass.out" \
    202     ] \
    203     [list \
    204 	"No PLT (PIE 1e)" \
    205 	"-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    206 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
    207 	"" \
    208 	{ dummy.s } \
    209 	"no-plt-1e" \
    210 	"pass.out" \
    211     ] \
    212     [list \
    213 	"No PLT (PIE 1f)" \
    214 	"-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    215 	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
    216 	"" \
    217 	{ dummy.s } \
    218 	"no-plt-1f" \
    219 	"pass.out" \
    220     ] \
    221     [list \
    222 	"No PLT (PIE 1g)" \
    223 	"-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
    224 	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
    225 	"" \
    226 	{ dummy.s } \
    227 	"no-plt-1g" \
    228 	"pass.out" \
    229     ] \
    230     [list \
    231 	"No PLT (dynamic 1h)" \
    232 	"tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
    233 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
    234 	"" \
    235 	{dummy.s} \
    236 	"no-plt-1h" \
    237 	"pass.out" \
    238     ] \
    239     [list \
    240 	"No PLT (dynamic 1i)" \
    241 	"tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
    242 	 tmpdir/no-plt-extern1b.o tmpdir/libno-plt-1a.so" \
    243 	"" \
    244 	{dummy.s} \
    245 	"no-plt-1i" \
    246 	"pass.out" \
    247     ] \
    248     [list \
    249 	"No PLT (static 1j)" \
    250 	"-static tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
    251 	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
    252 	"" \
    253 	{dummy.s} \
    254 	"no-plt-1j" \
    255 	"pass.out" \
    256     ] \
    257 ]
    258 
    259 # Run-time tests which require working IFUNC support.
    260 if { [check_ifunc_available] } {
    261     run_cc_link_tests [list \
    262 	[list \
    263 	    "Build pr20244-3a.o pr20244-3b.o pr20244-3c.o pr20244-3d.o" \
    264 	    "" \
    265 	    "-fPIC -O2 -g" \
    266 	    { pr20244-3a.c pr20244-3b.S pr20244-3c.S pr20244-3d.S } \
    267 	] \
    268 	[list \
    269 	    "Build pr20253-1a.o pr20253-1b.o pr20253-1c.o pr20253-1d.o" \
    270 	    "" \
    271 	    "-fPIE -O2 -g" \
    272 	    { pr20253-1a.c pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
    273 	] \
    274 	[list \
    275 	    "Build libpr20253-1a.so" \
    276 	    "-shared tmpdir/pr20253-1b.o \
    277 	     tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
    278 	    "" \
    279 	    { dummy.s } \
    280 	    {} \
    281 	    "libpr20253-1a.so" \
    282 	] \
    283 	[list \
    284 	    "Build pr20253-2a.o pr20253-2b.o pr20253-2c.o pr20253-2d.o" \
    285 	    "" \
    286 	    "-fPIE -O2 -g" \
    287 	    { pr20253-2a.c pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
    288 	] \
    289     ]
    290 
    291     run_ld_link_exec_tests [] [list \
    292 	[list \
    293 	    "Run pr20244-3a" \
    294 	    "tmpdir/pr20244-3a.o tmpdir/pr20244-3b.o \
    295 	     tmpdir/pr20244-3c.o tmpdir/pr20244-3d.o" \
    296 	    "" \
    297 	    { dummy.c } \
    298 	    "pr20244-3a" \
    299 	    "pass.out" \
    300 	] \
    301 	[list \
    302 	    "Run pr20244-3b" \
    303 	    "--static tmpdir/pr20244-3a.o tmpdir/pr20244-3b.o \
    304 	    tmpdir/pr20244-3c.o tmpdir/pr20244-3d.o" \
    305 	    "" \
    306 	    { dummy.c } \
    307 	    "pr20244-3b" \
    308 	    "pass.out" \
    309 	] \
    310 	[list \
    311 	    "Run pr20253-1a" \
    312 	    "tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
    313 	     tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
    314 	    "" \
    315 	    { dummy.s } \
    316 	    "pr20253-1a" \
    317 	    "pass.out" \
    318 	] \
    319 	[list \
    320 	    "Run pr20253-1b" \
    321 	    "--static tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
    322 	    tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
    323 	    "" \
    324 	    { dummy.s } \
    325 	    "pr20253-1b" \
    326 	    "pass.out" \
    327 	] \
    328 	[list \
    329 	    "Run pr20253-1c" \
    330 	    "-pie tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
    331 	    tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
    332 	    "" \
    333 	    { dummy.s } \
    334 	    "pr20253-1c" \
    335 	    "pass.out" \
    336 	] \
    337 	[list \
    338 	    "Run pr20253-1d" \
    339 	    "tmpdir/pr20253-1a.o tmpdir/libpr20253-1a.so" \
    340 	    "" \
    341 	    { dummy.s } \
    342 	    "pr20253-1d" \
    343 	    "pass.out" \
    344 	] \
    345 	[list \
    346 	    "Run pr20253-1e" \
    347 	    "-pie tmpdir/pr20253-1a.o tmpdir/libpr20253-1a.so" \
    348 	    "" \
    349 	    { dummy.s } \
    350 	    "pr20253-1e" \
    351 	    "pass.out" \
    352 	] \
    353 	[list \
    354 	    "Run pr20253-1f" \
    355 	    "tmpdir/pr20253-1a.o" \
    356 	    "" \
    357 	    { pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
    358 	    "pr20253-1f" \
    359 	    "pass.out" \
    360 	    "-DCHECK_PLT" \
    361 	] \
    362 	[list \
    363 	    "Run pr20253-1g" \
    364 	    "--static tmpdir/pr20253-1a.o" \
    365 	    "" \
    366 	    { pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
    367 	    "pr20253-1g" \
    368 	    "pass.out" \
    369 	    "-DCHECK_PLT" \
    370 	] \
    371 	[list \
    372 	    "Run pr20253-2a" \
    373 	    "tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
    374 	     tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
    375 	    "" \
    376 	    { dummy.s } \
    377 	    "pr20253-2a" \
    378 	    "pass.out" \
    379 	] \
    380 	[list \
    381 	    "Run pr20253-2b" \
    382 	    "--static tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
    383 	    tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
    384 	    "" \
    385 	    { dummy.s } \
    386 	    "pr20253-2b" \
    387 	    "pass.out" \
    388 	] \
    389 	[list \
    390 	    "Run pr20253-2c" \
    391 	    "tmpdir/pr20253-2a.o" \
    392 	    "" \
    393 	    { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
    394 	    "pr20253-2c" \
    395 	    "pass.out" \
    396 	    "-DCHECK_PLT" \
    397 	] \
    398 	[list \
    399 	    "Run pr20253-2d" \
    400 	    "--static tmpdir/pr20253-2a.o" \
    401 	    "" \
    402 	    { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
    403 	    "pr20253-2d" \
    404 	    "pass.out" \
    405 	    "-DCHECK_PLT" \
    406 	] \
    407     ]
    408 }
    409