Update release-README after completing the 2.43 release.
[binutils-gdb.git] / binutils / testsuite / binutils-all / compress.exp
blobc9d771ca3397647fbf04bcee2dac0bad038eacf7
1 #   Copyright (C) 2010-2024 Free Software Foundation, Inc.
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.
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.
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.
17 # Test compressed .debug section.
19 if { [is_remote host] || ![is_elf_format] } then {
20     return
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
32 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${testfile}.o --nocompress-debug-sections] } then {
33     unsupported "compressed debug sections"
34     return
37 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}.o --compress-debug-sections] } then {
38     unsupported "compressed debug sections"
39     return
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
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"
56 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}.o --compress-debug-sections] } then {
57     unsupported "compressed debug sections"
58     return
61 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o --nocompress-debug-sections] } then {
62     unsupported "compressed debug sections"
63     return
66 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}.o --compress-debug-sections] } then {
67     unsupported "compressed debug sections"
68     return
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
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]
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     }
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]
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     }
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"]
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     }
135     if { [regexp_diff tmpdir/libdw2.out $srcdir/$subdir/libdw2.out] } then {
136         fail "$testname"
137     } else {
138         pass "$testname"
139     }
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"]
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     }
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     }
165 set testname "objdump compress debug sections"
166 set got [remote_exec host "$OBJDUMP -W ${compressedfile}.o" "" "/dev/null" "objdump.out"]
167 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
168     fail "$testname"
169     send_log "$got\n"
171 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-1.W] } then {
172     fail "$testname"
173 } else {
174     pass "$testname"
177 set testname "objdump compress debug sections 3"
178 set got [remote_exec host "$OBJDUMP -W ${compressedfile3}.o" "" "/dev/null" "objdump.out"]
179 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
180     fail "$testname"
181     send_log "$got\n"
183 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
184     fail "$testname"
185 } else {
186     pass "$testname"
189 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S ${testfile}empty.o --nocompress-debug-sections] } then {
190     unsupported "compressed debug sections"
191     return
194 set testname "objcopy compress empty debug sections"
195 set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}empty.o ${copyfile}empty.o"]
196 if ![string match "" $got] then {
197     fail "objcopy ($testname)"
198 } else {
199     send_log "cmp ${testfile}empty.o ${copyfile}empty.o\n"
200     verbose "cmp ${testfile}empty.o ${copyfile}empty.o"
201     set src1 ${testfile}empty.o
202     set src2 ${copyfile}empty.o
203     set status [remote_exec build cmp "${src1} ${src2}"]
204     set exec_output [lindex $status 1]
205     set exec_output [prune_warnings $exec_output]
207     if [string match "" $exec_output] then {
208         pass "objcopy ($testname)"
209     } else {
210         send_log "$exec_output\n"
211         verbose "$exec_output" 1
212         fail "objcopy ($testname)"
213     }
216 if ![is_remote host] {
217     set tempfile tmpdir/debug_str.o
218     set copyfile tmpdir/debug_str.copy
219 } else {
220     set tempfile [remote_download host tmpdir/debug_str.o]
221     set copyfile debug_str.copy
224 run_dump_test "debug_str"
226 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gabi.o --compress-debug-sections=zlib-gabi] } then {
227     fail "compressed debug sections with zlib-gabi"
228     return
231 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gnu.o --compress-debug-sections=zlib-gnu] } then {
232     fail "compressed debug sections with zlib-gnu"
233     return
236 set src1 ${compressedfile}gabi.o
237 set src2 ${compressedfile}.o
238 set status [remote_exec build cmp "${src1} ${src2}"]
239 set exec_output [lindex $status 1]
240 set exec_output [prune_warnings $exec_output]
241 if ![string match "" $exec_output] then {
242     fail "compressed debug sections with zlib-gabi"
243     return
246 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}gabi.o --compress-debug-sections=zlib-gabi] } then {
247     fail "compressed debug sections with zlib-gabi"
248     return
251 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}gnu.o --compress-debug-sections=zlib-gnu] } then {
252     fail "compressed debug sections with zlib-gnu"
253     return
256 set src1 ${compressedfile2}gabi.o
257 set src2 ${compressedfile2}.o
258 set status [remote_exec build cmp "${src1} ${src2}"]
259 set exec_output [lindex $status 1]
260 set exec_output [prune_warnings $exec_output]
261 if ![string match "" $exec_output] then {
262     fail "compressed debug sections with zlib-gabi"
263     return
266 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}gabi.o --compress-debug-sections=zlib-gabi] } then {
267     fail "compressed debug sections with zlib-gabi"
268     return
271 set testname "readelf -t zlib-gabi compress debug sections"
272 set got [remote_exec host "$READELF -t --wide ${compressedfile3}gabi.o" "" "/dev/null" "tmpdir/dw2-3.rt"]
273 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
274     fail "$testname (reason: unexpected output)"
275     send_log "$got\n"
277 if { [regexp_diff tmpdir/dw2-3.rt $srcdir/$subdir/dw2-3.rt] } then {
278     fail "$testname"
279 } else {
280     pass "$testname"
283 set testname "readelf -S zlib-gabi compress debug sections"
284 set got [remote_exec host "$READELF -S --wide ${compressedfile3}gabi.o" "" "/dev/null" "tmpdir/dw2-3.rS"]
285 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
286     fail "$testname (reason: unexpected output)"
287     send_log "$got\n"
289 if { [regexp_diff tmpdir/dw2-3.rS $srcdir/$subdir/dw2-3.rS] } then {
290     fail "$testname"
291 } else {
292     pass "$testname"
295 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}gnu.o --compress-debug-sections=zlib-gnu] } then {
296     fail "compressed debug sections with zlib-gnu"
297     return
300 set src1 ${compressedfile3}gabi.o
301 set src2 ${compressedfile3}.o
302 set status [remote_exec build cmp "${src1} ${src2}"]
303 set exec_output [lindex $status 1]
304 set exec_output [prune_warnings $exec_output]
305 if ![string match "" $exec_output] then {
306     fail "compressed debug sections with zlib-gabi"
307     return
310 remote_file host delete ${libfile}gabi.a
311 set got [binutils_run $AR "rc ${libfile}gabi.a ${compressedfile}gabi.o ${compressedfile2}gabi.o ${compressedfile3}gabi.o"]
312 if ![string match "" $got] then {
313     fail "compressed debug sections"
314     return
317 set testname "objcopy compress debug sections with zlib-gabi"
318 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${testfile}.o ${copyfile}gabi.o"]
319 if ![string match "" $got] then {
320     fail "objcopy ($testname)"
321     return
323 send_log "cmp ${compressedfile}gabi.o ${copyfile}gabi.o\n"
324 verbose "cmp ${compressedfile}gabi.o ${copyfile}gabi.o"
325 set src1 ${compressedfile}gabi.o
326 set src2 ${copyfile}gabi.o
327 set status [remote_exec build cmp "${src1} ${src2}"]
328 set exec_output [lindex $status 1]
329 set exec_output [prune_warnings $exec_output]
330 if ![string match "" $exec_output] then {
331     send_log "$exec_output\n"
332     verbose "$exec_output" 1
333     fail "objcopy ($testname)"
334 } else {
335     pass "objcopy ($testname)"
338 set testname "objcopy decompress compressed debug sections with zlib-gabi"
339 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}gabi.o ${copyfile}gabi.o"]
340 if ![string match "" $got] then {
341     fail "objcopy ($testname)"
342     return
344 send_log "cmp ${testfile}.o ${copyfile}gabi.o\n"
345 verbose "cmp ${testfile}.o ${copyfile}gabi.o"
346 set src1 ${testfile}.o
347 set src2 ${copyfile}gabi.o
348 set status [remote_exec build cmp "${src1} ${src2}"]
349 set exec_output [lindex $status 1]
350 set exec_output [prune_warnings $exec_output]
351 if ![string match "" $exec_output] then {
352     send_log "$exec_output\n"
353     verbose "$exec_output" 1
354     fail "objcopy ($testname)"
355 } else {
356     pass "objcopy ($testname)"
359 set testname "objcopy zlib-gnu compress debug sections with zlib-gabi"
360 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${compressedfile}.o ${copyfile}gabi.o"]
361 if ![string match "" $got] then {
362     fail "objcopy ($testname)"
363     return
365 send_log "cmp ${compressedfile}gabi.o ${copyfile}gabi.o\n"
366 verbose "cmp ${compressedfile}gabi.o ${copyfile}gabi.o"
367 set src1 ${compressedfile}gabi.o
368 set src2 ${copyfile}gabi.o
369 set status [remote_exec build cmp "${src1} ${src2}"]
370 set exec_output [lindex $status 1]
371 set exec_output [prune_warnings $exec_output]
372 if ![string match "" $exec_output] then {
373     send_log "$exec_output\n"
374     verbose "$exec_output" 1
375     fail "objcopy ($testname)"
376 } else {
377     pass "objcopy ($testname)"
380 set testname "objcopy zlib-gabi compress debug sections with zlib-gnu"
381 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${compressedfile}gabi.o ${copyfile}gnu.o"]
382 if ![string match "" $got] then {
383     fail "objcopy ($testname)"
384     return
386 send_log "cmp ${compressedfile}gnu.o ${copyfile}gnu.o\n"
387 verbose "cmp ${compressedfile}gnu.o ${copyfile}gnu.o"
388 set src1 ${compressedfile}gnu.o
389 set src2 ${copyfile}gnu.o
390 set status [remote_exec build cmp "${src1} ${src2}"]
391 set exec_output [lindex $status 1]
392 set exec_output [prune_warnings $exec_output]
393 if ![string match "" $exec_output] then {
394     send_log "$exec_output\n"
395     verbose "$exec_output" 1
396     fail "objcopy ($testname)"
397 } else {
398     pass "objcopy ($testname)"
401 set testname "objcopy compress debug sections 3 with zlib-gabi"
402 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${testfile3}.o ${copyfile}gabi.o"]
403 if ![string match "" $got] then {
404     fail "objcopy ($testname)"
405     return
407 send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n"
408 verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o"
409 set src1 ${compressedfile3}gabi.o
410 set src2 ${copyfile}gabi.o
411 set status [remote_exec build cmp "${src1} ${src2}"]
412 set exec_output [lindex $status 1]
413 set exec_output [prune_warnings $exec_output]
414 if ![string match "" $exec_output] then {
415     send_log "$exec_output\n"
416     verbose "$exec_output" 1
417     fail "objcopy ($testname)"
418 } else {
419     pass "objcopy ($testname)"
422 set testname "objcopy decompress compressed debug sections 3 with zlib-gabi"
423 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile3}gabi.o ${copyfile}gabi.o"]
424 if ![string match "" $got] then {
425     fail "objcopy ($testname)"
426     return
428 send_log "cmp ${testfile3}.o ${copyfile}gabi.o\n"
429 verbose "cmp ${testfile3}.o ${copyfile}gabi.o"
430 set src1 ${testfile3}.o
431 set src2 ${copyfile}gabi.o
432 set status [remote_exec build cmp "${src1} ${src2}"]
433 set exec_output [lindex $status 1]
434 set exec_output [prune_warnings $exec_output]
435 if ![string match "" $exec_output] then {
436     send_log "$exec_output\n"
437     verbose "$exec_output" 1
438     fail "objcopy ($testname)"
439 } else {
440     pass "objcopy ($testname)"
443 set testname "objcopy zlib-gnu compress debug sections 3 with zlib-gabi"
444 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${compressedfile3}.o ${copyfile}gabi.o"]
445 if ![string match "" $got] then {
446     fail "objcopy ($testname)"
447     return
449 send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n"
450 verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o"
451 set src1 ${compressedfile3}gabi.o
452 set src2 ${copyfile}gabi.o
453 set status [remote_exec build cmp "${src1} ${src2}"]
454 set exec_output [lindex $status 1]
455 set exec_output [prune_warnings $exec_output]
456 if ![string match "" $exec_output] then {
457     send_log "$exec_output\n"
458     verbose "$exec_output" 1
459     fail "objcopy ($testname)"
460 } else {
461     pass "objcopy ($testname)"
464 set testname "objcopy zlib-gabi compress debug sections 3 with zlib-gnu"
465 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${compressedfile3}gabi.o ${copyfile}gnu.o"]
466 if ![string match "" $got] then {
467     fail "objcopy ($testname)"
468     return
470 send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n"
471 verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o"
472 set src1 ${compressedfile3}gnu.o
473 set src2 ${copyfile}gnu.o
474 set status [remote_exec build cmp "${src1} ${src2}"]
475 set exec_output [lindex $status 1]
476 set exec_output [prune_warnings $exec_output]
477 if ![string match "" $exec_output] then {
478     send_log "$exec_output\n"
479     verbose "$exec_output" 1
480     fail "objcopy ($testname)"
481 } else {
482     pass "objcopy ($testname)"
485 set testname "objcopy zlib-gnu compress debug sections 3"
486 set got [binutils_run $OBJCOPY "${compressedfile3}gnu.o ${copyfile}gnu.o"]
487 if ![string match "" $got] then {
488     fail "objcopy ($testname)"
489     return
491 send_log "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o\n"
492 verbose "cmp ${compressedfile3}gnu.o ${copyfile}gnu.o"
493 set src1 ${compressedfile3}gnu.o
494 set src2 ${copyfile}gnu.o
495 set status [remote_exec build cmp "${src1} ${src2}"]
496 set exec_output [lindex $status 1]
497 set exec_output [prune_warnings $exec_output]
498 if ![string match "" $exec_output] then {
499     send_log "$exec_output\n"
500     verbose "$exec_output" 1
501     fail "objcopy ($testname)"
502 } else {
503     pass "objcopy ($testname)"
506 set testname "objcopy zlib-gabi compress debug sections 3"
507 set got [binutils_run $OBJCOPY "${compressedfile3}gabi.o ${copyfile}gabi.o"]
508 if ![string match "" $got] then {
509     fail "objcopy ($testname)"
510     return
512 send_log "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o\n"
513 verbose "cmp ${compressedfile3}gabi.o ${copyfile}gabi.o"
514 set src1 ${compressedfile3}gabi.o
515 set src2 ${copyfile}gabi.o
516 set status [remote_exec build cmp "${src1} ${src2}"]
517 set exec_output [lindex $status 1]
518 set exec_output [prune_warnings $exec_output]
519 if ![string match "" $exec_output] then {
520     send_log "$exec_output\n"
521     verbose "$exec_output" 1
522     fail "objcopy ($testname)"
523 } else {
524     pass "objcopy ($testname)"
527 set testname "objcopy decompress debug sections in archive with zlib-gabi"
528 set got [binutils_run $OBJCOPY "--decompress-debug-sections ${libfile}gabi.a ${copyfile}gabi.a"]
529 if ![string match "" $got] then {
530     fail "objcopy ($testname)"
531 } else {
532     set got [remote_exec host "$READELF -S --wide ${copyfile}gabi.a" "" "/dev/null" "tmpdir/libdw2.out"]
534     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
535         fail "$testname (reason: unexpected output)"
536         send_log $got
537         send_log "\n"
538     }
540     if { [regexp_diff tmpdir/libdw2.out $srcdir/$subdir/libdw2.out] } then {
541         fail "$testname"
542     } else {
543         pass "$testname"
544     }
547 set testname "objcopy compress debug sections in archive with zlib-gabi"
548 set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gabi ${copyfile}gabi.a ${compressedcopyfile}gabi.a"]
549 if ![string match "" $got] then {
550     fail "objcopy ($testname)"
551 } else {
552     set got [remote_exec host "$OBJDUMP -W ${compressedcopyfile}gabi.a" "" "/dev/null" "tmpdir/libdw2-compressedgabi.out"]
554     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
555         fail "$testname (reason: unexpected output)"
556         send_log $got
557         send_log "\n"
558     }
560     if { [regexp_diff tmpdir/libdw2-compressedgabi.out $srcdir/$subdir/libdw2-compressedgabi.out] } then {
561         fail "$testname"
562     } else {
563         pass "$testname"
564     }
567 set testname "objdump compress debug sections 3 with zlib-gabi"
568 set got [remote_exec host "$OBJDUMP -W ${compressedfile3}gabi.o" "" "/dev/null" "objdump.out"]
569 if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
570     fail "$testname"
571     send_log "$got\n"
573 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3gabi.W] } then {
574     fail "$testname"
575 } else {
576     pass "$testname"
579 if { [binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}zstd.o --compress-debug-sections=zstd] } then {
580     set testname "objcopy compress debug sections with zstd"
581     set got [binutils_run $OBJCOPY "--compress-debug-sections=zstd ${testfile}.o ${copyfile}zstd.o"]
582     if ![string match "" $got] then {
583         fail "objcopy ($testname)"
584         return
585     }
586     send_log "cmp ${compressedfile}zstd.o ${copyfile}zstd.o\n"
587     verbose "cmp ${compressedfile}zstd.o ${copyfile}zstd.o"
588     set src1 ${compressedfile}zstd.o
589     set src2 ${copyfile}zstd.o
590     set status [remote_exec build cmp "${src1} ${src2}"]
591     set exec_output [lindex $status 1]
592     set exec_output [prune_warnings $exec_output]
593     if ![string match "" $exec_output] then {
594         send_log "$exec_output\n"
595         verbose "$exec_output" 1
596         fail "objcopy ($testname)"
597     } else {
598         pass "objcopy ($testname)"
599     }
601     set testname "objcopy decompress compressed debug sections with zstd"
602     set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}zstd.o ${copyfile}zstd.o"]
603     if ![string match "" $got] then {
604         fail "objcopy ($testname)"
605         return
606     }
607     send_log "cmp ${testfile}.o ${copyfile}zstd.o\n"
608     verbose "cmp ${testfile}.o ${copyfile}zstd.o"
609     set src1 ${testfile}.o
610     set src2 ${copyfile}zstd.o
611     set status [remote_exec build cmp "${src1} ${src2}"]
612     set exec_output [lindex $status 1]
613     set exec_output [prune_warnings $exec_output]
614     if ![string match "" $exec_output] then {
615         send_log "$exec_output\n"
616         verbose "$exec_output" 1
617         fail "objcopy ($testname)"
618     } else {
619         pass "objcopy ($testname)"
620     }
623 proc convert_test { testname  as_flags  objcop_flags } {
624     global srcdir
625     global subdir
626     global testfile3
627     global copyfile
628     global OBJCOPY
629     global OBJDUMP
631     if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o "$as_flags"] } then {
632        unsupported "$testname"
633        return
634     }
636     set got [binutils_run $OBJCOPY "$objcop_flags ${testfile3}.o ${copyfile}.o"]
637     if ![string match "" $got] then {
638         fail "objcopy ($testname)"
639         return
640     }
642     set got [remote_exec host "$OBJDUMP -W ${copyfile}.o" "" "/dev/null" "objdump.out"]
644     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
645         fail "$testname (reason: unexpected output)"
646         send_log $got
647         send_log "\n"
648         return
649     }
651     if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
652         fail "$testname"
653     } else {
654         pass "$testname"
655     }
658 if { ([istarget "x86_64-*-elf*"]
659        || [istarget "x86_64-*-linux*"]) } {
660     set testname "Convert x86-64 object with zlib-gabi to x32 (1)"
661     convert_test "$testname" "--compress-debug-sections=zlib-gabi --64" "-O elf32-x86-64"
663     set testname "Convert x86-64 object with zlib-gabi to x32 (2)"
664     convert_test "$testname" "--compress-debug-sections=zlib-gabi --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gnu"
666     set testname "Convert x86-64 object with zlib-gabi to x32 (3)"
667     convert_test "$testname" "--compress-debug-sections=zlib-gabi --64" "-O elf32-x86-64 --decompress-debug-sections"
669     set testname "Convert x86-64 object with zlib-gnu to x32 (1)"
670     convert_test "$testname" "--compress-debug-sections=zlib-gnu --64" "-O elf32-x86-64"
672     set testname "Convert x86-64 object with zlib-gnu to x32 (2)"
673     convert_test "$testname" "--compress-debug-sections=zlib-gnu --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gabi"
675     set testname "Convert x86-64 object with zlib-gnu to x32 (3)"
676     convert_test "$testname" "--compress-debug-sections=zlib-gnu --64" "-O elf32-x86-64 --decompress-debug-sections"
678     set testname "Convert x86-64 object to x32 (1)"
679     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64"
681     set testname "Convert x86-64 object to x32 (2)"
682     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gabi"
684     set testname "Convert x86-64 object to x32 (3)"
685     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64 --compress-debug-sections=zlib-gnu"
688     set testname "Convert x32 object with zlib-gabi to x86-64 (1)"
689     convert_test "$testname" "--compress-debug-sections=zlib-gabi --x32" "-O elf64-x86-64"
691     set testname "Convert x32 object with zlib-gabi to x86-64 (2)"
692     convert_test "$testname" "--compress-debug-sections=zlib-gabi --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gnu"
694     set testname "Convert x32 object with zlib-gabi to x86-64 (3)"
695     convert_test "$testname" "--compress-debug-sections=zlib-gabi --x32" "-O elf64-x86-64 --decompress-debug-sections"
697     set testname "Convert x32 object with zlib-gnu to x86-64 (1)"
698     convert_test "$testname" "--compress-debug-sections=zlib-gnu --x32" "-O elf64-x86-64"
700     set testname "Convert x32 object with zlib-gnu to x86-64 (2)"
701     convert_test "$testname" "--compress-debug-sections=zlib-gnu --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gabi"
703     set testname "Convert x32 object with zlib-gnu to x86-64 (3)"
704     convert_test "$testname" "--compress-debug-sections=zlib-gnu --x32" "-O elf64-x86-64 --decompress-debug-sections"
706     set testname "Convert x32 object to x86-64 (1)"
707     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64"
709     set testname "Convert x32 object to x86-64 (2)"
710     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gabi"
712     set testname "Convert x32 object to x86-64 (3)"
713     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64 --compress-debug-sections=zlib-gnu"
716 proc test_gnu_debuglink {} {
717     global srcdir
718     global subdir
719     global env
720     global STRIP
721     global OBJCOPY
722     global OBJDUMP
723     global READELF
724     global gcc_gas_flag
726     set test "gnu-debuglink"
728     # Use the newly built assembler and linker.
729     set flags debug
730     if { [istarget *-*-linux*]
731          || [istarget *-*-gnu*] } {
732         foreach i $gcc_gas_flag {
733             set flags "additional_flags=$i $flags"
734         }
735     }
736     if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog executable $flags] != "" } {
737         unsupported "$test (build)"
738         return
739     }
740     set got [remote_exec host "$OBJDUMP -d tmpdir/testprog" "" "/dev/null" "tmpdir/testprog.dump"]
741     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
742         fail "$test (objcopy dump)"
743         return
744     }
745     if { [binutils_run $STRIP "--strip-debug --remove-section=.comment --remove-section=.note tmpdir/testprog -o tmpdir/testprog.strip"] != "" } {
746         fail "$test (strip)"
747         return
748     }
749     if { [binutils_run $OBJCOPY "--only-keep-debug --decompress-debug-sections tmpdir/testprog tmpdir/testprog.decompress"] != "" } {
750         fail "$test (objcopy decompress)"
751         return
752     }
753     if { [binutils_run $OBJCOPY "--only-keep-debug --compress-debug-sections tmpdir/testprog tmpdir/testprog.compress"] != "" } {
754         fail "$test (objcopy compress)"
755         return
756     }
757     if { [binutils_run $OBJCOPY "--add-gnu-debuglink=tmpdir/testprog.decompress tmpdir/testprog.strip tmpdir/testprog"] != "" } {
758         fail "$test (objcopy link decompress)"
759         return
760     }
761     set got [remote_exec host "$OBJDUMP -d -WK tmpdir/testprog" "" "/dev/null" "tmpdir/testprog.decompress.dump"]
762     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
763         fail "$test (objcopy dump decompress)"
764         return
765     }
766     if { [binutils_run $OBJCOPY "--add-gnu-debuglink=tmpdir/testprog.compress tmpdir/testprog.strip tmpdir/testprog"] != "" } {
767         fail "$test (objcopy link compress)"
768         return
769     }
770     set got [remote_exec host "$OBJDUMP -d -WK tmpdir/testprog" "" "/dev/null" "tmpdir/testprog.compress.dump"]
771     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
772         fail "$test (objcopy dump compress)"
773         return
774     }
776     set src1 tmpdir/testprog.dump
777     set src2 tmpdir/testprog.compress.dump
778     send_log "diff ${src1} ${src2}\n"
779     verbose "diff ${src1} ${src2}"
780     set status [remote_exec build diff "${src1} ${src2}"]
781     set exec_output [lindex $status 1]
782     set exec_output [prune_warnings $exec_output]
783     if ![string match "" $exec_output] then {
784         send_log "$exec_output\n"
785         verbose "$exec_output" 1
786         fail "$test (objdump 1)"
787     } else {
788         pass "$test (objdump 1)"
789     }
791     set src1 tmpdir/testprog.decompress.dump
792     set src2 tmpdir/testprog.compress.dump
793     send_log "diff ${src1} ${src2}\n"
794     verbose "diff ${src1} ${src2}"
795     set status [remote_exec build diff "${src1} ${src2}"]
796     set exec_output [lindex $status 1]
797     set exec_output [prune_warnings $exec_output]
798     if ![string match "" $exec_output] then {
799         send_log "$exec_output\n"
800         verbose "$exec_output" 1
801         fail "$test (objdump 2)"
802     } else {
803         pass "$test (objdump 2)"
804     }
806     remote_file host delete tmpdir/testprog.compress
807     set got [remote_exec host [concat sh -c [list "$OBJDUMP --syms tmpdir/testprog > /dev/null"]]]
808     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
809         fail "$test (objdump with missing link)"
810     } else {
811         pass "$test (objdump with missing link)"
812     }
813     set got [remote_exec host [concat sh -c [list "$READELF -S tmpdir/testprog > /dev/null"]]]
814     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
815         fail "$test (readelf with missing link)"
816     } else {
817         pass "$test (readelf with missing link)"
818     }
821 if {[is_elf_format]} then {
822     test_gnu_debuglink