]> Git Repo - binutils.git/blob - binutils/testsuite/binutils-all/compress.exp
Automatic date update in version.in
[binutils.git] / binutils / testsuite / binutils-all / compress.exp
1 #   Copyright (C) 2010-2022 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 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"
170 }
171 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-1.W] } then {
172     fail "$testname"
173 } else {
174     pass "$testname"
175 }
176
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"
182 }
183 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
184     fail "$testname"
185 } else {
186     pass "$testname"
187 }
188
189 if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S ${testfile}empty.o --nocompress-debug-sections] } then {
190     unsupported "compressed debug sections"
191     return
192 }
193
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]
206
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     }
214 }
215
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
222 }
223
224 run_dump_test "debug_str"
225
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
229 }
230
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
234 }
235
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
244 }
245
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
249 }
250
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
254 }
255
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
264 }
265
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
269 }
270
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"
276 }
277 if { [regexp_diff tmpdir/dw2-3.rt $srcdir/$subdir/dw2-3.rt] } then {
278     fail "$testname"
279 } else {
280     pass "$testname"
281 }
282
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"
288 }
289 if { [regexp_diff tmpdir/dw2-3.rS $srcdir/$subdir/dw2-3.rS] } then {
290     fail "$testname"
291 } else {
292     pass "$testname"
293 }
294
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
298 }
299
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
308 }
309
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
315 }
316
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
322 }
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)"
336 }
337
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
343 }
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)"
357 }
358
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
364 }
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)"
378 }
379
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
385 }
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)"
399 }
400
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
406 }
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)"
420 }
421
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
427 }
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)"
441 }
442
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
448 }
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)"
462 }
463
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
469 }
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)"
483 }
484
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
490 }
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)"
504 }
505
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
511 }
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)"
525 }
526
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"]
533
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     }
539
540     if { [regexp_diff tmpdir/libdw2.out $srcdir/$subdir/libdw2.out] } then {
541         fail "$testname"
542     } else {
543         pass "$testname"
544     }
545 }
546
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"]
553
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     }
559
560     if { [regexp_diff tmpdir/libdw2-compressedgabi.out $srcdir/$subdir/libdw2-compressedgabi.out] } then {
561         fail "$testname"
562     } else {
563         pass "$testname"
564     }
565 }
566
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"
572 }
573 if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3gabi.W] } then {
574     fail "$testname"
575 } else {
576     pass "$testname"
577 }
578
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     }
600
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     }
621 }
622
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
630
631     if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o "$as_flags"] } then {
632        unsupported "$testname"
633        return
634     }
635
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     }
641
642     set got [remote_exec host "$OBJDUMP -W ${copyfile}.o" "" "/dev/null" "objdump.out"]
643
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     }
650
651     if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
652         fail "$testname"
653     } else {
654         pass "$testname"
655     }
656 }
657
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"
662
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"
665
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"
668
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"
671
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"
674
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"
677
678     set testname "Convert x86-64 object to x32 (1)"
679     convert_test "$testname" "--nocompress-debug-sections --64" "-O elf32-x86-64"
680
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"
683
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"
686
687
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"
690
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"
693
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"
696
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"
699
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"
702
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"
705
706     set testname "Convert x32 object to x86-64 (1)"
707     convert_test "$testname" "--nocompress-debug-sections --x32" "-O elf64-x86-64"
708
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"
711
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"
714 }
715
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
725
726     set test "gnu-debuglink"
727
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     }
775
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     }
790
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     }
805
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     }
819 }
820
821 if {[is_elf_format]} then {
822     test_gnu_debuglink
823 }
This page took 0.073705 seconds and 4 git commands to generate.