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 19if { [is_remote host] || ![is_elf_format] } then { 20 return 21} 22 23set testfile tmpdir/dw2-1 24set compressedfile tmpdir/dw2-1-compressed 25set copyfile tmpdir/dw2-copy 26set compressedfile2 tmpdir/dw2-2-compressed 27set libfile tmpdir/libdw2 28set compressedcopyfile tmpdir/dw2-copy-compressed 29set testfile3 tmpdir/dw2-3 30set compressedfile3 tmpdir/dw2-3-compressed 31 32if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${testfile}.o --nocompress-debug-sections] } then { 33 unsupported "compressed debug sections" 34 return 35} 36 37if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}.o --compress-debug-sections] } then { 38 unsupported "compressed debug sections" 39 return 40} 41 42if { ![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 47set got [remote_exec host "cmp ${testfile}.o ${compressedfile}gnu.o"] 48# Use it to set up xfail. 49set exec_output [lindex $got 1] 50if [string match "" $exec_output] then { 51 set compression_used "" 52} else { 53 set compression_used "yes" 54} 55 56if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}.o --compress-debug-sections] } then { 57 unsupported "compressed debug sections" 58 return 59} 60 61if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o --nocompress-debug-sections] } then { 62 unsupported "compressed debug sections" 63 return 64} 65 66if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}.o --compress-debug-sections] } then { 67 unsupported "compressed debug sections" 68 return 69} 70 71remote_file host delete ${libfile}.a 72set got [binutils_run $AR "rc ${libfile}.a ${compressedfile}.o ${compressedfile2}.o ${compressedfile3}.o"] 73if ![string match "" $got] then { 74 fail "compressed debug sections" 75 return 76} 77 78set testname "objcopy compress debug sections" 79set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}.o ${copyfile}.o"] 80if ![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 100set testname "objcopy decompress compressed debug sections" 101set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}.o ${copyfile}.o"] 102if ![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 122set testname "objcopy decompress debug sections in archive" 123set got [binutils_run $OBJCOPY "--decompress-debug-sections ${libfile}.a ${copyfile}.a"] 124if ![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. 143setup_xfail "$compression_used$target_triplet" 144set testname "objcopy compress debug sections in archive with zlib-gnu" 145set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${copyfile}.a ${compressedcopyfile}.a"] 146if ![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 165setup_xfail "nds32*-*-*" 166set testname "objdump compress debug sections" 167set got [remote_exec host "$OBJDUMP -W ${compressedfile}.o" "" "/dev/null" "objdump.out"] 168if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { 169 fail "$testname" 170 send_log "$got\n" 171} 172if { [regexp_diff objdump.out $srcdir/$subdir/dw2-1.W] } then { 173 fail "$testname" 174} else { 175 pass "$testname" 176} 177 178setup_xfail "nds32*-*-*" 179set testname "objdump compress debug sections 3" 180set got [remote_exec host "$OBJDUMP -W ${compressedfile3}.o" "" "/dev/null" "objdump.out"] 181if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { 182 fail "$testname" 183 send_log "$got\n" 184} 185if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then { 186 fail "$testname" 187} else { 188 pass "$testname" 189} 190 191if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S ${testfile}empty.o --nocompress-debug-sections] } then { 192 unsupported "compressed debug sections" 193 return 194} 195 196set testname "objcopy compress empty debug sections" 197set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}empty.o ${copyfile}empty.o"] 198if ![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 218if ![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 226run_dump_test "debug_str" 227 228if { ![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 233if { ![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 238set src1 ${compressedfile}gabi.o 239set src2 ${compressedfile}.o 240set status [remote_exec build cmp "${src1} ${src2}"] 241set exec_output [lindex $status 1] 242set exec_output [prune_warnings $exec_output] 243if ![string match "" $exec_output] then { 244 fail "compressed debug sections with zlib-gabi" 245 return 246} 247 248if { ![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 253if { ![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 258set src1 ${compressedfile2}gabi.o 259set src2 ${compressedfile2}.o 260set status [remote_exec build cmp "${src1} ${src2}"] 261set exec_output [lindex $status 1] 262set exec_output [prune_warnings $exec_output] 263if ![string match "" $exec_output] then { 264 fail "compressed debug sections with zlib-gabi" 265 return 266} 267 268if { ![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 273set testname "readelf -t zlib-gabi compress debug sections" 274set got [remote_exec host "$READELF -t --wide ${compressedfile3}gabi.o" "" "/dev/null" "tmpdir/dw2-3.rt"] 275if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { 276 fail "$testname (reason: unexpected output)" 277 send_log "$got\n" 278} 279if { [regexp_diff tmpdir/dw2-3.rt $srcdir/$subdir/dw2-3.rt] } then { 280 fail "$testname" 281} else { 282 pass "$testname" 283} 284 285set testname "readelf -S zlib-gabi compress debug sections" 286set got [remote_exec host "$READELF -S --wide ${compressedfile3}gabi.o" "" "/dev/null" "tmpdir/dw2-3.rS"] 287if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { 288 fail "$testname (reason: unexpected output)" 289 send_log "$got\n" 290} 291if { [regexp_diff tmpdir/dw2-3.rS $srcdir/$subdir/dw2-3.rS] } then { 292 fail "$testname" 293} else { 294 pass "$testname" 295} 296 297if { ![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 302set src1 ${compressedfile3}gabi.o 303set src2 ${compressedfile3}.o 304set status [remote_exec build cmp "${src1} ${src2}"] 305set exec_output [lindex $status 1] 306set exec_output [prune_warnings $exec_output] 307if ![string match "" $exec_output] then { 308 fail "compressed debug sections with zlib-gabi" 309 return 310} 311 312remote_file host delete ${libfile}gabi.a 313set got [binutils_run $AR "rc ${libfile}gabi.a ${compressedfile}gabi.o ${compressedfile2}gabi.o ${compressedfile3}gabi.o"] 314if ![string match "" $got] then { 315 fail "compressed debug sections" 316 return 317} 318 319set testname "objcopy compress debug sections with zlib-gabi" 320set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${testfile}.o ${copyfile}gabi.o"] 321if ![string match "" $got] then { 322 fail "objcopy ($testname)" 323 return 324} 325send_log "cmp ${compressedfile}gabi.o ${copyfile}gabi.o\n" 326verbose "cmp ${compressedfile}gabi.o ${copyfile}gabi.o" 327set src1 ${compressedfile}gabi.o 328set src2 ${copyfile}gabi.o 329set status [remote_exec build cmp "${src1} ${src2}"] 330set exec_output [lindex $status 1] 331set exec_output [prune_warnings $exec_output] 332if ![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 340set testname "objcopy decompress compressed debug sections with zlib-gabi" 341set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}gabi.o ${copyfile}gabi.o"] 342if ![string match "" $got] then { 343 fail "objcopy ($testname)" 344 return 345} 346send_log "cmp ${testfile}.o ${copyfile}gabi.o\n" 347verbose "cmp ${testfile}.o ${copyfile}gabi.o" 348set src1 ${testfile}.o 349set src2 ${copyfile}gabi.o 350set status [remote_exec build cmp "${src1} ${src2}"] 351set exec_output [lindex $status 1] 352set exec_output [prune_warnings $exec_output] 353if ![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 361set testname "objcopy zlib-gnu compress debug sections with zlib-gabi" 362set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${compressedfile}.o ${copyfile}gabi.o"] 363if ![string match "" $got] then { 364 fail "objcopy ($testname)" 365 return 366} 367send_log "cmp ${compressedfile}gabi.o ${copyfile}gabi.o\n" 368verbose "cmp ${compressedfile}gabi.o ${copyfile}gabi.o" 369set src1 ${compressedfile}gabi.o 370set src2 ${copyfile}gabi.o 371set status [remote_exec build cmp "${src1} ${src2}"] 372set exec_output [lindex $status 1] 373set exec_output [prune_warnings $exec_output] 374if ![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 382set testname "objcopy zlib-gabi compress debug sections with zlib-gnu" 383set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${compressedfile}gabi.o ${copyfile}gnu.o"] 384if ![string match "" $got] then { 385 fail "objcopy ($testname)" 386 return 387} 388send_log "cmp ${compressedfile}gnu.o ${copyfile}gnu.o\n" 389verbose "cmp ${compressedfile}gnu.o ${copyfile}gnu.o" 390set src1 ${compressedfile}gnu.o 391set src2 ${copyfile}gnu.o 392set status [remote_exec build cmp "${src1} ${src2}"] 393set exec_output [lindex $status 1] 394set exec_output [prune_warnings $exec_output] 395if ![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 403set testname "objcopy compress debug sections 3 with zlib-gabi" 404set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${testfile3}.o ${copyfile}gabi.o"] 405if ![string match "" $got] then { 406 fail "objcopy ($testname)" 407 return 408} 409send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n" 410verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o" 411set src1 ${compressedfile3}gabi.o 412set src2 ${copyfile}gabi.o 413set status [remote_exec build cmp "${src1} ${src2}"] 414set exec_output [lindex $status 1] 415set exec_output [prune_warnings $exec_output] 416if ![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 424set testname "objcopy decompress compressed debug sections 3 with zlib-gabi" 425set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile3}gabi.o ${copyfile}gabi.o"] 426if ![string match "" $got] then { 427 fail "objcopy ($testname)" 428 return 429} 430send_log "cmp ${testfile3}.o ${copyfile}gabi.o\n" 431verbose "cmp ${testfile3}.o ${copyfile}gabi.o" 432set src1 ${testfile3}.o 433set src2 ${copyfile}gabi.o 434set status [remote_exec build cmp "${src1} ${src2}"] 435set exec_output [lindex $status 1] 436set exec_output [prune_warnings $exec_output] 437if ![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 445set testname "objcopy zlib-gnu compress debug sections 3 with zlib-gabi" 446set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${compressedfile3}.o ${copyfile}gabi.o"] 447if ![string match "" $got] then { 448 fail "objcopy ($testname)" 449 return 450} 451send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n" 452verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o" 453set src1 ${compressedfile3}gabi.o 454set src2 ${copyfile}gabi.o 455set status [remote_exec build cmp "${src1} ${src2}"] 456set exec_output [lindex $status 1] 457set exec_output [prune_warnings $exec_output] 458if ![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 466set testname "objcopy zlib-gabi compress debug sections 3 with zlib-gnu" 467set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${compressedfile3}gabi.o ${copyfile}gnu.o"] 468if ![string match "" $got] then { 469 fail "objcopy ($testname)" 470 return 471} 472send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n" 473verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o" 474set src1 ${compressedfile3}gnu.o 475set src2 ${copyfile}gnu.o 476set status [remote_exec build cmp "${src1} ${src2}"] 477set exec_output [lindex $status 1] 478set exec_output [prune_warnings $exec_output] 479if ![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 487set testname "objcopy zlib-gnu compress debug sections 3" 488set got [binutils_run $OBJCOPY "${compressedfile3}gnu.o ${copyfile}gnu.o"] 489if ![string match "" $got] then { 490 fail "objcopy ($testname)" 491 return 492} 493send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n" 494verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o" 495set src1 ${compressedfile3}gnu.o 496set src2 ${copyfile}gnu.o 497set status [remote_exec build cmp "${src1} ${src2}"] 498set exec_output [lindex $status 1] 499set exec_output [prune_warnings $exec_output] 500if ![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 508set testname "objcopy zlib-gnu compress debug sections 3" 509set got [binutils_run $OBJCOPY "${compressedfile3}gnu.o ${copyfile}gnu.o"] 510if ![string match "" $got] then { 511 fail "objcopy ($testname)" 512 return 513} 514send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n" 515verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o" 516set src1 ${compressedfile3}gnu.o 517set src2 ${copyfile}gnu.o 518set status [remote_exec build cmp "${src1} ${src2}"] 519set exec_output [lindex $status 1] 520set exec_output [prune_warnings $exec_output] 521if ![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 529set testname "objcopy decompress debug sections in archive with zlib-gabi" 530set got [binutils_run $OBJCOPY "--decompress-debug-sections ${libfile}gabi.a ${copyfile}gabi.a"] 531if ![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 549setup_xfail "nds32*-*-*" 550set testname "objcopy compress debug sections in archive with zlib-gabi" 551set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${copyfile}gabi.a ${compressedcopyfile}gabi.a"] 552if ![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 570setup_xfail "nds32*-*-*" 571set testname "objdump compress debug sections 3 with zlib-gabi" 572set got [remote_exec host "$OBJDUMP -W ${compressedfile3}gabi.o" "" "/dev/null" "objdump.out"] 573if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { 574 fail "$testname" 575 send_log "$got\n" 576} 577if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3gabi.W] } then { 578 fail "$testname" 579} else { 580 pass "$testname" 581} 582 583proc 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 618if { ([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 676proc 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 765if {[isnative] && [is_elf_format]} then { 766 test_gnu_debuglink 767} 768