Home | History | Annotate | Download | only in binutils-all
      1 #   Copyright (C) 2010-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 # Test compressed .debug section.
     18 
     19 if { [is_remote host] || ![is_elf_format] } then {
     20     return
     21 }
     22 
     23 set testfile tmpdir/dw2-1
     24 set compressedfile tmpdir/dw2-1-compressed
     25 set copyfile tmpdir/dw2-copy
     26 set compressedfile2 tmpdir/dw2-2-compressed
     27 set libfile tmpdir/libdw2
     28 set compressedcopyfile tmpdir/dw2-copy-compressed
     29 set testfile3 tmpdir/dw2-3
     30 set compressedfile3 tmpdir/dw2-3-compressed
     31 
     32 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${testfile}.o --nocompress-debug-sections] } then {
     33     unsupported "compressed debug sections"
     34     return
     35 }
     36 
     37 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}.o --compress-debug-sections] } then {
     38     unsupported "compressed debug sections"
     39     return
     40 }
     41 
     42 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gnu.o --compress-debug-sections=zlib-gnu] } then {
     43     unsupported "compressed debug sections with zlib-gnu"
     44     return
     45 }
     46 
     47 set got [remote_exec host "cmp ${testfile}.o ${compressedfile}gnu.o"]
     48 # Use it to set up xfail.
     49 set exec_output [lindex $got 1]
     50 if [string match "" $exec_output] then {
     51     set compression_used ""
     52 } else {
     53     set compression_used "yes"
     54 }
     55 
     56 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}.o --compress-debug-sections] } then {
     57     unsupported "compressed debug sections"
     58     return
     59 }
     60 
     61 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o --nocompress-debug-sections] } then {
     62     unsupported "compressed debug sections"
     63     return
     64 }
     65 
     66 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}.o --compress-debug-sections] } then {
     67     unsupported "compressed debug sections"
     68     return
     69 }
     70 
     71 remote_file host delete ${libfile}.a
     72 set got [binutils_run $AR "rc ${libfile}.a ${compressedfile}.o ${compressedfile2}.o ${compressedfile3}.o"]
     73 if ![string match "" $got] then {
     74     fail "compressed debug sections"
     75     return
     76 }
     77 
     78 set testname "objcopy compress debug sections"
     79 set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}.o ${copyfile}.o"]
     80 if ![string match "" $got] then {
     81     fail "objcopy ($testname)"
     82 } else {
     83     send_log "cmp ${compressedfile}.o ${copyfile}.o\n"
     84     verbose "cmp ${compressedfile}.o ${copyfile}.o"
     85     set src1 ${compressedfile}.o
     86     set src2 ${copyfile}.o
     87     set status [remote_exec build cmp "${src1} ${src2}"]
     88     set exec_output [lindex $status 1]
     89     set exec_output [prune_warnings $exec_output]
     90 
     91     if [string match "" $exec_output] then {
     92 	pass "objcopy ($testname)"
     93     } else {
     94 	send_log "$exec_output\n"
     95 	verbose "$exec_output" 1
     96 	fail "objcopy ($testname)"
     97     }
     98 }
     99 
    100 set testname "objcopy decompress compressed debug sections"
    101 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}.o ${copyfile}.o"]
    102 if ![string match "" $got] then {
    103     fail "objcopy ($testname)"
    104 } else {
    105     send_log "cmp ${testfile}.o ${copyfile}.o\n"
    106     verbose "cmp ${testfile}.o ${copyfile}.o"
    107     set src1 ${testfile}.o
    108     set src2 ${copyfile}.o
    109     set status [remote_exec build cmp "${src1} ${src2}"]
    110     set exec_output [lindex $status 1]
    111     set exec_output [prune_warnings $exec_output]
    112 
    113     if [string match "" $exec_output] then {
    114 	pass "objcopy ($testname)"
    115     } else {
    116 	send_log "$exec_output\n"
    117 	verbose "$exec_output" 1
    118 	fail "objcopy ($testname)"
    119     }
    120 }
    121 
    122 set testname "objcopy decompress debug sections in archive"
    123 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${libfile}.a ${copyfile}.a"]
    124 if ![string match "" $got] then {
    125     fail "objcopy ($testname)"
    126 } else {
    127     set got [remote_exec host "$READELF -S --wide ${copyfile}.a" "" "/dev/null" "tmpdir/libdw2.out"]
    128 
    129     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    130 	fail "$testname (reason: unexpected output)"
    131 	send_log $got
    132 	send_log "\n"
    133     }
    134 
    135     if { [regexp_diff tmpdir/libdw2.out $srcdir/$subdir/libdw2.out] } then {
    136 	fail "$testname"
    137     } else {
    138 	pass "$testname"
    139     }
    140 }
    141 
    142 # Xfail this test if there are no compressed sections.
    143 setup_xfail "$compression_used$target_triplet"
    144 set testname "objcopy compress debug sections in archive with zlib-gnu"
    145 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${copyfile}.a ${compressedcopyfile}.a"]
    146 if ![string match "" $got] then {
    147     fail "objcopy ($testname)"
    148 } else {
    149     set got [remote_exec host "$OBJDUMP -s -j .zdebug_line ${compressedcopyfile}.a" "" "/dev/null" "tmpdir/libdw2-compressed.out"]
    150 
    151     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    152 	fail "$testname (reason: unexpected output)"
    153 	send_log $got
    154 	send_log "\n"
    155     }
    156 
    157     setup_xfail "$compression_used$target_triplet"
    158     if { [regexp_diff tmpdir/libdw2-compressed.out $srcdir/$subdir/libdw2-compressed.out] } then {
    159 	fail "$testname"
    160     } else {
    161 	pass "$testname"
    162     }
    163 }
    164 
    165 setup_xfail "nds32*-*-*"
    166 set testname "objdump compress debug sections"
    167 set got [remote_exec host "$OBJDUMP -W ${compressedfile}.o" "" "/dev/null" "objdump.out"]
    168 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    169     fail "$testname"
    170     send_log "$got\n"
    171 }
    172 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-1.W] } then {
    173     fail "$testname"
    174 } else {
    175     pass "$testname"
    176 }
    177 
    178 setup_xfail "nds32*-*-*"
    179 set testname "objdump compress debug sections 3"
    180 set got [remote_exec host "$OBJDUMP -W ${compressedfile3}.o" "" "/dev/null" "objdump.out"]
    181 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    182     fail "$testname"
    183     send_log "$got\n"
    184 }
    185 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
    186     fail "$testname"
    187 } else {
    188     pass "$testname"
    189 }
    190 
    191 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S ${testfile}empty.o --nocompress-debug-sections] } then {
    192     unsupported "compressed debug sections"
    193     return
    194 }
    195 
    196 set testname "objcopy compress empty debug sections"
    197 set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}empty.o ${copyfile}empty.o"]
    198 if ![string match "" $got] then {
    199     fail "objcopy ($testname)"
    200 } else {
    201     send_log "cmp ${testfile}empty.o ${copyfile}empty.o\n"
    202     verbose "cmp ${testfile}empty.o ${copyfile}empty.o"
    203     set src1 ${testfile}empty.o
    204     set src2 ${copyfile}empty.o
    205     set status [remote_exec build cmp "${src1} ${src2}"]
    206     set exec_output [lindex $status 1]
    207     set exec_output [prune_warnings $exec_output]
    208 
    209     if [string match "" $exec_output] then {
    210 	pass "objcopy ($testname)"
    211     } else {
    212 	send_log "$exec_output\n"
    213 	verbose "$exec_output" 1
    214 	fail "objcopy ($testname)"
    215     }
    216 }
    217 
    218 if ![is_remote host] {
    219     set tempfile tmpdir/debug_str.o
    220     set copyfile tmpdir/debug_str.copy
    221 } else {
    222     set tempfile [remote_download host tmpdir/debug_str.o]
    223     set copyfile debug_str.copy
    224 }
    225 
    226 run_dump_test "debug_str"
    227 
    228 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gabi.o --compress-debug-sections=zlib-gabi] } then {
    229     fail "compressed debug sections with zlib-gabi"
    230     return
    231 }
    232 
    233 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gnu.o --compress-debug-sections=zlib-gnu] } then {
    234     fail "compressed debug sections with zlib-gnu"
    235     return
    236 }
    237 
    238 set src1 ${compressedfile}gabi.o
    239 set src2 ${compressedfile}.o
    240 set status [remote_exec build cmp "${src1} ${src2}"]
    241 set exec_output [lindex $status 1]
    242 set exec_output [prune_warnings $exec_output]
    243 if ![string match "" $exec_output] then {
    244     fail "compressed debug sections with zlib-gabi"
    245     return
    246 }
    247 
    248 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}gabi.o --compress-debug-sections=zlib-gabi] } then {
    249     fail "compressed debug sections with zlib-gabi"
    250     return
    251 }
    252 
    253 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}gnu.o --compress-debug-sections=zlib-gnu] } then {
    254     fail "compressed debug sections with zlib-gnu"
    255     return
    256 }
    257 
    258 set src1 ${compressedfile2}gabi.o
    259 set src2 ${compressedfile2}.o
    260 set status [remote_exec build cmp "${src1} ${src2}"]
    261 set exec_output [lindex $status 1]
    262 set exec_output [prune_warnings $exec_output]
    263 if ![string match "" $exec_output] then {
    264     fail "compressed debug sections with zlib-gabi"
    265     return
    266 }
    267 
    268 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}gabi.o --compress-debug-sections=zlib-gabi] } then {
    269     fail "compressed debug sections with zlib-gabi"
    270     return
    271 }
    272 
    273 set testname "readelf -t zlib-gabi compress debug sections"
    274 set got [remote_exec host "$READELF -t --wide ${compressedfile3}gabi.o" "" "/dev/null" "tmpdir/dw2-3.rt"]
    275 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    276     fail "$testname (reason: unexpected output)"
    277     send_log "$got\n"
    278 }
    279 if { [regexp_diff tmpdir/dw2-3.rt $srcdir/$subdir/dw2-3.rt] } then {
    280     fail "$testname"
    281 } else {
    282     pass "$testname"
    283 }
    284 
    285 set testname "readelf -S zlib-gabi compress debug sections"
    286 set got [remote_exec host "$READELF -S --wide ${compressedfile3}gabi.o" "" "/dev/null" "tmpdir/dw2-3.rS"]
    287 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    288     fail "$testname (reason: unexpected output)"
    289     send_log "$got\n"
    290 }
    291 if { [regexp_diff tmpdir/dw2-3.rS $srcdir/$subdir/dw2-3.rS] } then {
    292     fail "$testname"
    293 } else {
    294     pass "$testname"
    295 }
    296 
    297 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}gnu.o --compress-debug-sections=zlib-gnu] } then {
    298     fail "compressed debug sections with zlib-gnu"
    299     return
    300 }
    301 
    302 set src1 ${compressedfile3}gabi.o
    303 set src2 ${compressedfile3}.o
    304 set status [remote_exec build cmp "${src1} ${src2}"]
    305 set exec_output [lindex $status 1]
    306 set exec_output [prune_warnings $exec_output]
    307 if ![string match "" $exec_output] then {
    308     fail "compressed debug sections with zlib-gabi"
    309     return
    310 }
    311 
    312 remote_file host delete ${libfile}gabi.a
    313 set got [binutils_run $AR "rc ${libfile}gabi.a ${compressedfile}gabi.o ${compressedfile2}gabi.o ${compressedfile3}gabi.o"]
    314 if ![string match "" $got] then {
    315     fail "compressed debug sections"
    316     return
    317 }
    318 
    319 set testname "objcopy compress debug sections with zlib-gabi"
    320 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${testfile}.o ${copyfile}gabi.o"]
    321 if ![string match "" $got] then {
    322     fail "objcopy ($testname)"
    323     return
    324 }
    325 send_log "cmp ${compressedfile}gabi.o ${copyfile}gabi.o\n"
    326 verbose "cmp ${compressedfile}gabi.o ${copyfile}gabi.o"
    327 set src1 ${compressedfile}gabi.o
    328 set src2 ${copyfile}gabi.o
    329 set status [remote_exec build cmp "${src1} ${src2}"]
    330 set exec_output [lindex $status 1]
    331 set exec_output [prune_warnings $exec_output]
    332 if ![string match "" $exec_output] then {
    333     send_log "$exec_output\n"
    334     verbose "$exec_output" 1
    335     fail "objcopy ($testname)"
    336 } else {
    337     pass "objcopy ($testname)"
    338 }
    339 
    340 set testname "objcopy decompress compressed debug sections with zlib-gabi"
    341 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}gabi.o ${copyfile}gabi.o"]
    342 if ![string match "" $got] then {
    343     fail "objcopy ($testname)"
    344     return
    345 }
    346 send_log "cmp ${testfile}.o ${copyfile}gabi.o\n"
    347 verbose "cmp ${testfile}.o ${copyfile}gabi.o"
    348 set src1 ${testfile}.o
    349 set src2 ${copyfile}gabi.o
    350 set status [remote_exec build cmp "${src1} ${src2}"]
    351 set exec_output [lindex $status 1]
    352 set exec_output [prune_warnings $exec_output]
    353 if ![string match "" $exec_output] then {
    354     send_log "$exec_output\n"
    355     verbose "$exec_output" 1
    356     fail "objcopy ($testname)"
    357 } else {
    358     pass "objcopy ($testname)"
    359 }
    360 
    361 set testname "objcopy zlib-gnu compress debug sections with zlib-gabi"
    362 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${compressedfile}.o ${copyfile}gabi.o"]
    363 if ![string match "" $got] then {
    364     fail "objcopy ($testname)"
    365     return
    366 }
    367 send_log "cmp ${compressedfile}gabi.o ${copyfile}gabi.o\n"
    368 verbose "cmp ${compressedfile}gabi.o ${copyfile}gabi.o"
    369 set src1 ${compressedfile}gabi.o
    370 set src2 ${copyfile}gabi.o
    371 set status [remote_exec build cmp "${src1} ${src2}"]
    372 set exec_output [lindex $status 1]
    373 set exec_output [prune_warnings $exec_output]
    374 if ![string match "" $exec_output] then {
    375     send_log "$exec_output\n"
    376     verbose "$exec_output" 1
    377     fail "objcopy ($testname)"
    378 } else {
    379     pass "objcopy ($testname)"
    380 }
    381 
    382 set testname "objcopy zlib-gabi compress debug sections with zlib-gnu"
    383 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${compressedfile}gabi.o ${copyfile}gnu.o"]
    384 if ![string match "" $got] then {
    385     fail "objcopy ($testname)"
    386     return
    387 }
    388 send_log "cmp ${compressedfile}gnu.o ${copyfile}gnu.o\n"
    389 verbose "cmp ${compressedfile}gnu.o ${copyfile}gnu.o"
    390 set src1 ${compressedfile}gnu.o
    391 set src2 ${copyfile}gnu.o
    392 set status [remote_exec build cmp "${src1} ${src2}"]
    393 set exec_output [lindex $status 1]
    394 set exec_output [prune_warnings $exec_output]
    395 if ![string match "" $exec_output] then {
    396     send_log "$exec_output\n"
    397     verbose "$exec_output" 1
    398     fail "objcopy ($testname)"
    399 } else {
    400     pass "objcopy ($testname)"
    401 }
    402 
    403 set testname "objcopy compress debug sections 3 with zlib-gabi"
    404 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${testfile3}.o ${copyfile}gabi.o"]
    405 if ![string match "" $got] then {
    406     fail "objcopy ($testname)"
    407     return
    408 }
    409 send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n"
    410 verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o"
    411 set src1 ${compressedfile3}gabi.o
    412 set src2 ${copyfile}gabi.o
    413 set status [remote_exec build cmp "${src1} ${src2}"]
    414 set exec_output [lindex $status 1]
    415 set exec_output [prune_warnings $exec_output]
    416 if ![string match "" $exec_output] then {
    417     send_log "$exec_output\n"
    418     verbose "$exec_output" 1
    419     fail "objcopy ($testname)"
    420 } else {
    421     pass "objcopy ($testname)"
    422 }
    423 
    424 set testname "objcopy decompress compressed debug sections 3 with zlib-gabi"
    425 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile3}gabi.o ${copyfile}gabi.o"]
    426 if ![string match "" $got] then {
    427     fail "objcopy ($testname)"
    428     return
    429 }
    430 send_log "cmp ${testfile3}.o ${copyfile}gabi.o\n"
    431 verbose "cmp ${testfile3}.o ${copyfile}gabi.o"
    432 set src1 ${testfile3}.o
    433 set src2 ${copyfile}gabi.o
    434 set status [remote_exec build cmp "${src1} ${src2}"]
    435 set exec_output [lindex $status 1]
    436 set exec_output [prune_warnings $exec_output]
    437 if ![string match "" $exec_output] then {
    438     send_log "$exec_output\n"
    439     verbose "$exec_output" 1
    440     fail "objcopy ($testname)"
    441 } else {
    442     pass "objcopy ($testname)"
    443 }
    444 
    445 set testname "objcopy zlib-gnu compress debug sections 3 with zlib-gabi"
    446 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${compressedfile3}.o ${copyfile}gabi.o"]
    447 if ![string match "" $got] then {
    448     fail "objcopy ($testname)"
    449     return
    450 }
    451 send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n"
    452 verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o"
    453 set src1 ${compressedfile3}gabi.o
    454 set src2 ${copyfile}gabi.o
    455 set status [remote_exec build cmp "${src1} ${src2}"]
    456 set exec_output [lindex $status 1]
    457 set exec_output [prune_warnings $exec_output]
    458 if ![string match "" $exec_output] then {
    459     send_log "$exec_output\n"
    460     verbose "$exec_output" 1
    461     fail "objcopy ($testname)"
    462 } else {
    463     pass "objcopy ($testname)"
    464 }
    465 
    466 set testname "objcopy zlib-gabi compress debug sections 3 with zlib-gnu"
    467 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${compressedfile3}gabi.o ${copyfile}gnu.o"]
    468 if ![string match "" $got] then {
    469     fail "objcopy ($testname)"
    470     return
    471 }
    472 send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n"
    473 verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o"
    474 set src1 ${compressedfile3}gnu.o
    475 set src2 ${copyfile}gnu.o
    476 set status [remote_exec build cmp "${src1} ${src2}"]
    477 set exec_output [lindex $status 1]
    478 set exec_output [prune_warnings $exec_output]
    479 if ![string match "" $exec_output] then {
    480     send_log "$exec_output\n"
    481     verbose "$exec_output" 1
    482     fail "objcopy ($testname)"
    483 } else {
    484     pass "objcopy ($testname)"
    485 }
    486 
    487 set testname "objcopy zlib-gnu compress debug sections 3"
    488 set got [binutils_run $OBJCOPY "${compressedfile3}gnu.o ${copyfile}gnu.o"]
    489 if ![string match "" $got] then {
    490     fail "objcopy ($testname)"
    491     return
    492 }
    493 send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n"
    494 verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o"
    495 set src1 ${compressedfile3}gnu.o
    496 set src2 ${copyfile}gnu.o
    497 set status [remote_exec build cmp "${src1} ${src2}"]
    498 set exec_output [lindex $status 1]
    499 set exec_output [prune_warnings $exec_output]
    500 if ![string match "" $exec_output] then {
    501     send_log "$exec_output\n"
    502     verbose "$exec_output" 1
    503     fail "objcopy ($testname)"
    504 } else {
    505     pass "objcopy ($testname)"
    506 }
    507 
    508 set testname "objcopy zlib-gnu compress debug sections 3"
    509 set got [binutils_run $OBJCOPY "${compressedfile3}gnu.o ${copyfile}gnu.o"]
    510 if ![string match "" $got] then {
    511     fail "objcopy ($testname)"
    512     return
    513 }
    514 send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n"
    515 verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o"
    516 set src1 ${compressedfile3}gnu.o
    517 set src2 ${copyfile}gnu.o
    518 set status [remote_exec build cmp "${src1} ${src2}"]
    519 set exec_output [lindex $status 1]
    520 set exec_output [prune_warnings $exec_output]
    521 if ![string match "" $exec_output] then {
    522     send_log "$exec_output\n"
    523     verbose "$exec_output" 1
    524     fail "objcopy ($testname)"
    525 } else {
    526     pass "objcopy ($testname)"
    527 }
    528 
    529 set testname "objcopy decompress debug sections in archive with zlib-gabi"
    530 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${libfile}gabi.a ${copyfile}gabi.a"]
    531 if ![string match "" $got] then {
    532     fail "objcopy ($testname)"
    533 } else {
    534     set got [remote_exec host "$READELF -S --wide ${copyfile}gabi.a" "" "/dev/null" "tmpdir/libdw2.out"]
    535 
    536     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    537 	fail "$testname (reason: unexpected output)"
    538 	send_log $got
    539 	send_log "\n"
    540     }
    541 
    542     if { [regexp_diff tmpdir/libdw2.out $srcdir/$subdir/libdw2.out] } then {
    543 	fail "$testname"
    544     } else {
    545 	pass "$testname"
    546     }
    547 }
    548 
    549 setup_xfail "nds32*-*-*"
    550 set testname "objcopy compress debug sections in archive with zlib-gabi"
    551 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${copyfile}gabi.a ${compressedcopyfile}gabi.a"]
    552 if ![string match "" $got] then {
    553     fail "objcopy ($testname)"
    554 } else {
    555     set got [remote_exec host "$OBJDUMP -W ${compressedcopyfile}gabi.a" "" "/dev/null" "tmpdir/libdw2-compressedgabi.out"]
    556 
    557     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    558 	fail "$testname (reason: unexpected output)"
    559 	send_log $got
    560 	send_log "\n"
    561     }
    562 
    563     if { [regexp_diff tmpdir/libdw2-compressedgabi.out $srcdir/$subdir/libdw2-compressedgabi.out] } then {
    564 	fail "$testname"
    565     } else {
    566 	pass "$testname"
    567     }
    568 }
    569 
    570 setup_xfail "nds32*-*-*"
    571 set testname "objdump compress debug sections 3 with zlib-gabi"
    572 set got [remote_exec host "$OBJDUMP -W ${compressedfile3}gabi.o" "" "/dev/null" "objdump.out"]
    573 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    574     fail "$testname"
    575     send_log "$got\n"
    576 }
    577 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3gabi.W] } then {
    578     fail "$testname"
    579 } else {
    580     pass "$testname"
    581 }
    582 
    583 proc convert_test { testname  as_flags  objcop_flags } {
    584     global srcdir
    585     global subdir
    586     global testfile3
    587     global copyfile
    588     global OBJCOPY
    589     global OBJDUMP
    590 
    591     if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o "$as_flags"] } then {
    592        unresolved "$testname"
    593        return
    594     }
    595 
    596     set got [binutils_run $OBJCOPY "$objcop_flags ${testfile3}.o ${copyfile}.o"]
    597     if ![string match "" $got] then {
    598 	fail "objcopy ($testname)"
    599 	return
    600     }
    601 
    602     set got [remote_exec host "$OBJDUMP -W ${copyfile}.o" "" "/dev/null" "objdump.out"]
    603 
    604     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    605 	fail "$testname (reason: unexpected output)"
    606 	send_log $got
    607 	send_log "\n"
    608 	return
    609     }
    610 
    611     if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
    612 	fail "$testname"
    613     } else {
    614 	pass "$testname"
    615     }
    616 }
    617 
    618 if { ([istarget "x86_64-*-elf*"]
    619        || [istarget "x86_64-*-linux*"]) } {
    620     set testname "Convert x86-64 object with zlib-gabi to x32 (1)"
    621     convert_test "$testname" "--compress-debug-sections=zlib-gabi --64" "-O elf32-x86-64"
    622 
    623     set testname "Convert x86-64 object with zlib-gabi to x32 (2)"
    624     convert_test "$testname" "--compress-debug-sections=zlib-gabi --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gnu"
    625 
    626     set testname "Convert x86-64 object with zlib-gabi to x32 (3)"
    627     convert_test "$testname" "--compress-debug-sections=zlib-gabi --64" "-O elf32-x86-64 --decompress-debug-sections"
    628 
    629     set testname "Convert x86-64 object with zlib-gnu to x32 (1)"
    630     convert_test "$testname" "--compress-debug-sections=zlib-gnu --64" "-O elf32-x86-64"
    631 
    632     set testname "Convert x86-64 object with zlib-gnu to x32 (2)"
    633     convert_test "$testname" "--compress-debug-sections=zlib-gnu --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gabi"
    634 
    635     set testname "Convert x86-64 object with zlib-gnu to x32 (3)"
    636     convert_test "$testname" "--compress-debug-sections=zlib-gnu --64" "-O elf32-x86-64 --decompress-debug-sections"
    637 
    638     set testname "Convert x86-64 object to x32 (1)"
    639     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64"
    640 
    641     set testname "Convert x86-64 object to x32 (2)"
    642     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gabi"
    643 
    644     set testname "Convert x86-64 object to x32 (3)"
    645     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gnu"
    646 
    647 
    648     set testname "Convert x32 object with zlib-gabi to x86-64 (1)"
    649     convert_test "$testname" "--compress-debug-sections=zlib-gabi --x32" "-O elf64-x86-64"
    650 
    651     set testname "Convert x32 object with zlib-gabi to x86-64 (2)"
    652     convert_test "$testname" "--compress-debug-sections=zlib-gabi --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gnu"
    653 
    654     set testname "Convert x32 object with zlib-gabi to x86-64 (3)"
    655     convert_test "$testname" "--compress-debug-sections=zlib-gabi --x32" "-O elf64-x86-64 --decompress-debug-sections"
    656 
    657     set testname "Convert x32 object with zlib-gnu to x86-64 (1)"
    658     convert_test "$testname" "--compress-debug-sections=zlib-gnu --x32" "-O elf64-x86-64"
    659 
    660     set testname "Convert x32 object with zlib-gnu to x86-64 (2)"
    661     convert_test "$testname" "--compress-debug-sections=zlib-gnu --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gabi"
    662 
    663     set testname "Convert x32 object with zlib-gnu to x86-64 (3)"
    664     convert_test "$testname" "--compress-debug-sections=zlib-gnu --x32" "-O elf64-x86-64 --decompress-debug-sections"
    665 
    666     set testname "Convert x32 object to x86-64 (1)"
    667     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64"
    668 
    669     set testname "Convert x32 object to x86-64 (2)"
    670     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gabi"
    671 
    672     set testname "Convert x32 object to x86-64 (3)"
    673     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gnu"
    674 }
    675 
    676 proc test_gnu_debuglink {} {
    677     global srcdir
    678     global subdir
    679     global env
    680     global CC_FOR_TARGET
    681     global STRIP
    682     global OBJCOPY
    683     global OBJDUMP
    684 
    685     set test "gnu-debuglink"
    686     if {![info exists CC_FOR_TARGET]} {
    687 	set CC_FOR_TARGET $env(CC)
    688     }
    689     if { $CC_FOR_TARGET == "" } {
    690 	unsupported $test
    691 	return
    692     }
    693 
    694     if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog exectuable debug] != "" } {
    695 	fail "$test (build)"
    696 	return
    697     }
    698     set got [remote_exec host "$OBJDUMP -S tmpdir/testprog" "" "/dev/null" "tmpdir/testprog.dump"]
    699     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    700 	fail "$test (objcopy dump)"
    701 	return
    702     }
    703     if { [binutils_run $STRIP "--strip-debug --remove-section=.comment --remove-section=.note tmpdir/testprog -o tmpdir/testprog.strip"] != "" } {
    704 	fail "$test (strip)"
    705 	return
    706     }
    707     if { [binutils_run $OBJCOPY "--only-keep-debug --decompress-debug-sections tmpdir/testprog tmpdir/testprog.decompress"] != "" } {
    708 	fail "$test (objcopy decompress)"
    709 	return
    710     }
    711     if { [binutils_run $OBJCOPY "--only-keep-debug --compress-debug-sections tmpdir/testprog tmpdir/testprog.compress"] != "" } {
    712 	fail "$test (objcopy compress)"
    713 	return
    714     }
    715     if { [binutils_run $OBJCOPY "--add-gnu-debuglink=tmpdir/testprog.decompress tmpdir/testprog.strip tmpdir/testprog"] != "" } {
    716 	fail "$test (objcopy link decompress)"
    717 	return
    718     }
    719     set got [remote_exec host "$OBJDUMP -S tmpdir/testprog" "" "/dev/null" "tmpdir/testprog.decompress.dump"]
    720     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    721 	fail "$test (objcopy dump decompress)"
    722 	return
    723     }
    724     if { [binutils_run $OBJCOPY "--add-gnu-debuglink=tmpdir/testprog.compress tmpdir/testprog.strip tmpdir/testprog"] != "" } {
    725 	fail "$test (objcopy link compress)"
    726 	return
    727     }
    728     set got [remote_exec host "$OBJDUMP -S tmpdir/testprog" "" "/dev/null" "tmpdir/testprog.compress.dump"]
    729     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    730 	fail "$test (objcopy dump compress)"
    731 	return
    732     }
    733 
    734     set src1 tmpdir/testprog.dump
    735     set src2 tmpdir/testprog.compress.dump
    736     send_log "cmp ${src1} ${src2}\n"
    737     verbose "cmp ${src1} ${src2}"
    738     set status [remote_exec build cmp "${src1} ${src2}"]
    739     set exec_output [lindex $status 1]
    740     set exec_output [prune_warnings $exec_output]
    741     if ![string match "" $exec_output] then {
    742 	send_log "$exec_output\n"
    743 	verbose "$exec_output" 1
    744 	fail "$test (objdump 1)"
    745     } else {
    746 	pass "$test (objdump 1)"
    747     }
    748 
    749     set src1 tmpdir/testprog.decompress.dump
    750     set src2 tmpdir/testprog.compress.dump
    751     send_log "cmp ${src1} ${src2}\n"
    752     verbose "cmp ${src1} ${src2}"
    753     set status [remote_exec build cmp "${src1} ${src2}"]
    754     set exec_output [lindex $status 1]
    755     set exec_output [prune_warnings $exec_output]
    756     if ![string match "" $exec_output] then {
    757 	send_log "$exec_output\n"
    758 	verbose "$exec_output" 1
    759 	fail "$test (objdump 2)"
    760     } else {
    761 	pass "$test (objdump 2)"
    762     }
    763 }
    764 
    765 if {[isnative] && [is_elf_format]} then {
    766     test_gnu_debuglink
    767 }
    768