Enhance objdump's --disassemble switch so that it can now take an optional parameter...
[deliverable/binutils-gdb.git] / binutils / testsuite / binutils-all / objcopy.exp
CommitLineData
219d1afa 1# Copyright (C) 1994-2018 Free Software Foundation, Inc.
252b5132
RH
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
32866df7 5# the Free Software Foundation; either version 3 of the License, or
252b5132 6# (at your option) any later version.
21c40443 7#
252b5132
RH
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.
21c40443 12#
252b5132
RH
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
b43b5d5f 15# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
252b5132
RH
16
17# Please email any bugs, comments, and/or additions to this file to:
18# bug-dejagnu@prep.ai.mit.edu
19
20# Written by Ian Lance Taylor <ian@cygnus.com>
21
22if ![is_remote host] {
23 if {[which $OBJCOPY] == 0} then {
24 perror "$OBJCOPY does not exist"
25 return
26 }
27}
28
29send_user "Version [binutil_version $OBJCOPY]"
30
252b5132 31if ![is_remote host] {
8d263650
BE
32 set tempfile tmpdir/bintest.o
33 set copyfile tmpdir/copy
252b5132
RH
34} else {
35 set tempfile [remote_download host tmpdir/bintest.o]
36 set copyfile copy
37}
38
39# Test that objcopy does not modify a file when copying it.
40
64bb95af
L
41proc objcopy_test {testname srcfile} {
42 global OBJCOPY
43 global OBJCOPYFLAGS
44 global srcdir
45 global subdir
46 global tempfile
47 global copyfile
252b5132 48
96037eb0 49 if {![binutils_assemble $srcdir/$subdir/${srcfile} $tempfile]} then {
64bb95af 50 unresolved "objcopy ($testname)"
96037eb0 51 remote_file host delete $tempfile
64bb95af 52 return
252b5132 53 }
252b5132 54
64bb95af
L
55 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS $tempfile ${copyfile}.o"]
56
21c40443 57 if ![string equal "" $got] then {
64bb95af 58 fail "objcopy ($testname)"
252b5132 59 } else {
64bb95af
L
60 send_log "cmp $tempfile ${copyfile}.o\n"
61 verbose "cmp $tempfile ${copyfile}.o"
62 if [is_remote host] {
63 set src1 tmpdir/bintest.o
64 set src2 tmpdir/copy.o
65 remote_upload host $tempfile $src1
66 remote_upload host ${copyfile}.o $src2
67 } else {
68 set src1 ${tempfile}
69 set src2 ${copyfile}.o
70 }
71 set status [remote_exec build cmp "${src1} ${src2}"]
72 set exec_output [lindex $status 1]
73 set exec_output [prune_warnings $exec_output]
74
75 # On some systems the result of objcopy will not be identical.
76 # Usually this is just because gas isn't using bfd to write the
77 # files in the first place, and may order things a little
78 # differently. Those systems should use setup_xfail here.
79
64bb95af 80 setup_xfail "hppa*-*-*"
64bb95af 81 setup_xfail "m8*-*"
b0a0c50a 82 setup_xfail "sh-*-coff*"
d3def5d7 83 setup_xfail "tic54x-*-*"
a9a4b302 84 setup_xfail "tic80-*-*"
64bb95af
L
85
86 clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
87 clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*"
64bb95af 88
21c40443 89 if [string equal "" $exec_output] then {
64bb95af
L
90 pass "objcopy ($testname)"
91 } else {
92 send_log "$exec_output\n"
93 verbose "$exec_output" 1
252b5132 94
64bb95af
L
95 # On OSF/1, this succeeds with gas and fails with /bin/as.
96 setup_xfail "alpha*-*-osf*"
252b5132 97
64bb95af
L
98 fail "objcopy ($testname)"
99 }
252b5132
RH
100 }
101}
102
64bb95af
L
103objcopy_test "simple copy" bintest.s
104
96037eb0
NC
105if { [file exists $tempfile] } {
106 # Test reversing bytes in a section.
9e48b4c6 107
96037eb0
NC
108 set reversed ${tempfile}-reversed
109 set sect_names [get_standard_section_names]
110 if { $sect_names != "" } {
111 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j [lindex $sect_names 1] --reverse-bytes=4 $tempfile $reversed"]
112 } else {
113 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j .data --reverse-bytes=4 $tempfile $reversed"]
9e48b4c6
NC
114 }
115
96037eb0
NC
116 if ![string equal "" $got] then {
117 fail "objcopy --reverse-bytes"
118 } else {
119 if [is_remote host] {
120 remote_upload host ${reversed} tmpdir/copy-reversed.o
121 set reversed tmpdir/copy-reversed.o
122 }
9e48b4c6 123
96037eb0
NC
124 set origdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $tempfile"]
125 set revdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $reversed"]
9e48b4c6 126
96037eb0
NC
127 set want "^ \[0-9\]+ (\[0-9\]+)"
128 set found_orig [regexp -lineanchor $want $origdata -> origdata]
129 set found_rev [regexp -lineanchor $want $revdata -> revdata]
8941d5e8 130
96037eb0
NC
131 if {$found_orig == 0 || $found_rev == 0} then {
132 # som doesn't have a .data section
133 setup_xfail "hppa*-*-hpux*"
134 clear_xfail "hppa*64*-*-hpux*"
9e48b4c6 135
96037eb0
NC
136 fail "objcopy --reverse-bytes"
137 } else {
138 scan $origdata "%2x%2x%2x%2x" b1 b2 b3 b4
139 scan $revdata "%2x%2x%2x%2x" c4 c3 c2 c1
140
141 if {$b1 == $c1 && $b2 == $c2 && $b3 == $c3 && $b4 == $c4} then {
142 pass "objcopy --reverse-bytes"
143 } else {
144 fail "objcopy --reverse-bytes"
145 }
146 }
9e48b4c6
NC
147 }
148}
149
b7dd81f7
NC
150# Test interleaved copy of multiple byte width
151
152set sequence_file sequence_file
153set file [open ${sequence_file} w]
154puts ${file} "12345678"
155close ${file}
156
157if [is_remote host] {
158 remote_upload host ${sequence_file} tmpdir/sequence_file
159 set sequence_file tmpdir/sequence_file
160}
161
162set got [binutils_run $OBJCOPY "-I binary -i 4 -b 0 --interleave-width 2 ${sequence_file} ${copyfile}"]
163
21c40443 164if ![string equal "" $got] then {
b7dd81f7
NC
165 fail "objcopy -i --interleave-width"
166} else {
167 if [is_remote host] {
168 remote_upload host ${copyfile} tmpdir/interleave_output
169 set interleave_output tmpdir/interleave_output
170 } else {
171 set interleave_output ${copyfile}
172 }
173
174 set file [open ${interleave_output} r]
175 gets $file line
176 send_log "$line\n"
177 verbose $line
178
21c40443 179 if ![string equal "1256" $line] then {
b7dd81f7
NC
180 fail "objcopy -i --interleave-width"
181 }
182 pass "objcopy -i --interleave-width"
183
184 close $file
185}
186
252b5132
RH
187# Test generating S records.
188
96037eb0
NC
189if { [file exists $tempfile] } {
190 # We make the srec filename 8.3 compatible. Note that the header string
191 # matched against depends on the name of the file. Ugh.
252b5132 192
252b5132 193 if [is_remote host] {
96037eb0
NC
194 set srecfile copy.sre
195 set header_string S00B0000636F70792E737265C1
196 } else {
197 set srecfile ${copyfile}.srec
198 set header_string S0130000746D706469722F636F70792E7372656397
252b5132 199 }
252b5132 200
96037eb0
NC
201 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${srecfile}"]
202
203 if ![string equal "" $got] then {
252b5132
RH
204 fail "objcopy -O srec"
205 } else {
96037eb0
NC
206 if [is_remote host] {
207 remote_upload host ${srecfile} tmpdir/copy.srec
208 set srecfile tmpdir/copy.srec
252b5132 209 }
96037eb0
NC
210 set file [open ${srecfile} r]
211
212 # The first S record is fixed by the file name we are using.
213 gets $file line
252b5132
RH
214 send_log "$line\n"
215 verbose $line
96037eb0
NC
216 if ![regexp "$header_string.*" $line] {
217 send_log "bad header\n"
252b5132
RH
218 fail "objcopy -O srec"
219 } else {
96037eb0
NC
220 while {[gets $file line] != -1 \
221 && [regexp "^S\[123\]\[0-9a-fA-F\]+\[\r\n\]*$" $line]} {
252b5132
RH
222 send_log "$line\n"
223 verbose $line
96037eb0
NC
224 set line "**EOF**"
225 }
226 send_log "$line\n"
227 verbose $line
228 if ![regexp "^S\[789\]\[0-9a-fA-F\]+\[\r\n\]*$" $line] then {
229 send_log "bad trailer\n"
252b5132
RH
230 fail "objcopy -O srec"
231 } else {
96037eb0
NC
232 if {[gets $file line] != -1} then {
233 send_log "garbage at end\n"
234 send_log "$line\n"
235 verbose $line
252b5132
RH
236 fail "objcopy -O srec"
237 } else {
96037eb0
NC
238 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${srecfile}"]
239 if ![regexp "file format srec" $got] then {
240 send_log "objdump failed\n"
241 fail "objcopy -O srec"
242 } else {
243 pass "objcopy -O srec"
244 }
252b5132
RH
245 }
246 }
247 }
252b5132 248
96037eb0
NC
249 close $file
250 }
252b5132
RH
251}
252
253# Test setting and adjusting the start address. We only test this
254# while generating S records, because we may not be able to set the
255# start address for other object file formats, and the S record case
256# is the only useful one anyhow.
257
258set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f $tempfile"]
259if ![regexp "start address (\[0-9a-fA-FxX\]+)" $got all origstart] then {
260 perror "objdump can not recognize bintest.o"
261 set origstart ""
262} else {
627fe3fb 263 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --set-start 0x7654 $tempfile ${copyfile}.srec"]
21c40443 264 if ![string equal "" $got] then {
252b5132
RH
265 fail "objcopy --set-start"
266 } else {
267 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
268 if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
269 fail "objcopy --set-start"
270 } else {
271 if {$srecstart != 0x7654} then {
272 send_log "$srecstart != 0x7654\n"
273 fail "objcopy --set-start"
274 } else {
275 pass "objcopy --set-start"
276 }
277 }
278 }
279
627fe3fb 280 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-start 0x123 $tempfile ${copyfile}.srec"]
21c40443 281 if ![string equal "" $got] then {
252b5132
RH
282 fail "objcopy --adjust-start"
283 } else {
284 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
285 if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
286 fail "objcopy --adjust-start"
287 } else {
288 if {$srecstart != $origstart + 0x123} then {
289 send_log "$srecstart != $origstart + 0x123\n"
290 fail "objcopy --adjust-start"
291 } else {
292 pass "objcopy --adjust-start"
293 }
294 }
295 }
296}
297
298# Test adjusting the overall VMA, and adjusting the VMA of a
299# particular section. We again only test this when generating S
300# records.
301
302set low ""
303set lowname ""
304
305set headers [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h $tempfile"]
306
307set headers_regexp "\[ 0-9\]+(\[^ \]+)\[ \]*(\[0-9a-fA-F\]+)\[ \]+\[0-9a-fA-F\]+\[ \]+(\[0-9a-fA-F\]+)\[ \]+\[0-9a-fA-F\]+\[ \]+2\[*\]\[*\]\[0-9\]+(.*)"
308
309set got $headers
310while {[regexp $headers_regexp $got all name size vma rest]} {
311 set vma 0x$vma
312 set size 0x$size
313 if {$size != 0} {
314 if {$low == "" || $vma < $low} {
315 set low $vma
316 set lowname $name
317 }
318 }
319 set got $rest
320}
321
322if {$low == "" || $origstart == ""} then {
323 perror "objdump can not recognize bintest.o"
324} else {
627fe3fb 325 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-vma 0x123 $tempfile ${copyfile}.srec"]
21c40443 326 if ![string equal "" $got] then {
252b5132
RH
327 fail "objcopy --adjust-vma"
328 } else {
329 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -fh ${copyfile}.srec"]
330 set want "file format srec.*start address\[ \]*(\[0-9a-fA-FxX\]+).*sec1\[ \]+\[0-9a-fA-F\]+\[ \]+(\[0-9a-fA-F\]+)"
331 if ![regexp $want $got all start vma] then {
332 fail "objcopy --adjust-vma"
333 } else {
334 set vma 0x$vma
335 if {$vma != $low + 0x123} then {
336 send_log "$vma != $low + 0x123\n"
337 fail "objcopy --adjust-vma"
338 } else {
339 if {$start != $origstart + 0x123} then {
340 send_log "$start != $origstart + 0x123\n"
341 fail "objcopy --adjust-vma"
342 } else {
343 pass "objcopy --adjust-vma"
344 }
345 }
346 }
347 }
348
349 set arg ""
350 set got $headers
351 while {[regexp $headers_regexp $got all name size vma rest]} {
352 set vma 0x$vma
353 if {$vma == $low} then {
354 set arg "$arg --adjust-section-vma $name+4"
355 }
356 set got $rest
357 }
358
627fe3fb 359 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $arg $tempfile ${copyfile}.srec"]
21c40443 360 if ![string equal "" $got] then {
252b5132
RH
361 fail "objcopy --adjust-section-vma +"
362 } else {
363 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
364 set want "file format srec.*sec1\[ \]+\[0-9a-fA-F\]+\[ \]+(\[0-9a-fA-F\]+)"
365 if ![regexp $want $got all vma] then {
366 fail "objcopy --adjust-section-vma +"
367 } else {
368 set vma 0x$vma
369 if {$vma != $low + 4} then {
370 send_log "$vma != $low + 4\n"
371 fail "objcopy --adjust-section-vma +"
372 } else {
373 pass "objcopy --adjust-section-vma +"
374 }
375 }
376 }
377
378 regsub -all "\\+4" $arg "=[expr $low + 4]" argeq
627fe3fb 379 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $argeq $tempfile ${copyfile}.srec"]
21c40443 380 if ![string equal "" $got] then {
252b5132
RH
381 fail "objcopy --adjust-section-vma ="
382 } else {
383 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
384 set want "file format srec.*sec1\[ \]+\[0-9a-fA-F\]+\[ \]+(\[0-9a-fA-F\]+)"
385 if ![regexp $want $got all vma] then {
386 fail "objcopy --adjust-section-vma ="
387 } else {
388 set vma 0x$vma
389 if {$vma != $low + 4} then {
390 send_log "$vma != $low + 4\n"
391 fail "objcopy --adjust-section-vma ="
392 } else {
393 pass "objcopy --adjust-section-vma ="
394 }
395 }
396 }
397}
398
399# Test stripping an object.
400
401proc strip_test { } {
1983fbac 402 global AR
252b5132
RH
403 global CC
404 global STRIP
405 global STRIPFLAGS
406 global NM
407 global NMFLAGS
408 global srcdir
409 global subdir
28902555 410 global READELF
252b5132
RH
411
412 set test "strip"
413
414 if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
415 untested $test
416 return
417 }
418
28902555
BS
419 set osabi_fail "false"
420 if [is_elf_format] {
421 verbose -log "$READELF -a tmpdir/testprog.o > tmpdir/osabi.in"
422 set exec_output [remote_exec host "$READELF -h tmpdir/testprog.o" "" "/dev/null" "tmpdir/osabi.in"]
423 if { [lindex $exec_output 0] != 0 } then {
21c40443 424 unresolved "$test preserving OS/ABI"
28902555
BS
425 set osabi_fail "true"
426 } else {
427 verbose -log "grep OS/ABI tmpdir/osabi.in"
428 catch "exec grep OS/ABI tmpdir/osabi.in" osabi_in
429 }
430 }
431
252b5132 432 if [is_remote host] {
1983fbac 433 set archive libstrip.a
8d263650 434 set objfile [remote_download host tmpdir/testprog.o]
1983fbac
L
435 remote_file host delete $archive
436 } else {
437 set archive tmpdir/libstrip.a
438 set objfile tmpdir/testprog.o
439 }
440
441 remote_file build delete tmpdir/libstrip.a
442
443 set exec_output [binutils_run $AR "rc $archive ${objfile}"]
7dd36a6f 444 set exec_output [prune_warnings $exec_output]
21c40443 445 if ![string equal "" $exec_output] {
1983fbac 446 fail $test
21c40443 447 unresolved "$test preserving OS/ABI"
1983fbac
L
448 return
449 }
450
8648f88f 451 set exec_output [binutils_run $STRIP "-g $archive"]
7dd36a6f 452 set exec_output [prune_warnings $exec_output]
21c40443 453 if ![string equal "" $exec_output] {
8648f88f 454 fail $test
21c40443 455 unresolved "$test preserving OS/ABI"
8648f88f
L
456 return
457 }
458
1983fbac 459 set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
7dd36a6f 460 set exec_output [prune_warnings $exec_output]
21c40443 461 if ![string equal "" $exec_output] {
1983fbac 462 fail $test
21c40443 463 unresolved "$test preserving OS/ABI"
1983fbac
L
464 return
465 }
466
28902555
BS
467 if { $osabi_fail != "true" && [is_elf_format] } {
468 verbose -log "$READELF -a tmpdir/testprog.o > tmpdir/osabi.out"
469 set exec_output [remote_exec host "$READELF -h tmpdir/testprog.o" "" "/dev/null" "tmpdir/osabi.out"]
470 if { [lindex $exec_output 0] != 0 } then {
21c40443 471 unresolved "$test preserving OS/ABI"
28902555
BS
472 } else {
473 verbose -log "grep OS/ABI tmpdir/osabi.out"
474 catch "exec grep OS/ABI tmpdir/osabi.out" osabi_out
475 if { "$osabi_in" == "$osabi_out" } {
476 pass "$test preserving OS/ABI"
477 } else {
478 fail "$test preserving OS/ABI"
479 }
480 }
481 }
482
1983fbac
L
483 if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
484 untested $test
485 return
486 }
487
488 if [is_remote host] {
8d263650 489 set objfile [remote_download host tmpdir/testprog.o]
252b5132
RH
490 } else {
491 set objfile tmpdir/testprog.o
492 }
493
494 set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"]
7dd36a6f 495 set exec_output [prune_warnings $exec_output]
21c40443 496 if ![string equal "" $exec_output] {
252b5132
RH
497 fail $test
498 return
499 }
500
501 set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"]
7dd36a6f 502 set exec_output [prune_warnings $exec_output]
68a4c073 503 if ![string match "*: no symbols*" $exec_output] {
252b5132
RH
504 fail $test
505 return
506 }
507
508 pass $test
509}
510
511strip_test
512
513# Test stripping an object file with saving a symbol
514
515proc strip_test_with_saving_a_symbol { } {
516 global CC
517 global STRIP
518 global STRIPFLAGS
519 global NM
520 global NMFLAGS
521 global srcdir
522 global subdir
523
524 set test "strip with saving a symbol"
525
526 if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
527 untested $test
528 return
529 }
530
531 if [is_remote host] {
8d263650 532 set objfile [remote_download host tmpdir/testprog.o]
252b5132
RH
533 } else {
534 set objfile tmpdir/testprog.o
535 }
536
537 set exec_output [binutils_run $STRIP "$STRIPFLAGS -K main -K _main $objfile"]
7dd36a6f 538 set exec_output [prune_warnings $exec_output]
21c40443 539 if ![string equal "" $exec_output] {
252b5132
RH
540 fail $test
541 return
542 }
543
544 set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
7dd36a6f 545 set exec_output [prune_warnings $exec_output]
195fe636 546 if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
252b5132
RH
547 && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
548 fail $test
549 return
550 }
551
552 pass $test
553}
554
555strip_test_with_saving_a_symbol
556
557# Build a final executable.
558
99ad8390 559if { [istarget *-*-cygwin] || [istarget *-*-mingw*] } {
f8a7038a
NC
560 set test_prog "testprog.exe"
561} else {
562 set test_prog "testprog"
563}
564
252b5132
RH
565proc copy_setup { } {
566 global srcdir
567 global subdir
9a580d9a 568 global gcc_gas_flag
f8a7038a 569 global test_prog
72d4c02f 570 global host_triplet
21c40443 571
8d263650
BE
572 set res [build_wrapper testglue.o]
573 set flags { debug }
21c40443 574
f1ac0afe 575 if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] && ![istarget arm*-*-uclinuxfdpiceabi] } {
903b1f5b
NS
576 return 1
577 }
21c40443 578
252b5132 579 if { $res != "" } {
8d263650
BE
580 lappend flags "additional_flags=[lindex $res 1]"
581 set add_libs "testglue.o"
252b5132 582 } else {
8d263650 583 set add_libs ""
252b5132
RH
584 }
585
5940a93c
TS
586 if { [istarget *-*-linux*]
587 || [istarget *-*-gnu*] } {
9a580d9a
L
588 foreach i $gcc_gas_flag {
589 set flags "additional_flags=$i $flags"
590 }
591 }
f8a7038a 592 if { [target_compile "$srcdir/$subdir/testprog.c $add_libs" tmpdir/$test_prog executable $flags] != "" } {
252b5132
RH
593 return 2
594 }
595
8d263650
BE
596 set result [remote_load target tmpdir/$test_prog]
597 set status [lindex $result 0]
252b5132
RH
598
599 if { $status != "pass" } {
72d4c02f 600 send_log "cannot run executable, status = ${status} on ${host_triplet}\n"
21c40443 601 return 3
252b5132
RH
602 }
603
604 return 0
605}
606
607# Test copying an executable.
608
609proc copy_executable { prog flags test1 test2 } {
f8a7038a 610 global test_prog
252b5132
RH
611
612 if [is_remote host] {
8d263650 613 set testfile [remote_download host tmpdir/$test_prog]
252b5132
RH
614 set testcopy copyprog
615 } else {
f8a7038a 616 set testfile tmpdir/$test_prog
252b5132
RH
617 set testcopy tmpdir/copyprog
618 }
8d263650 619 remote_file host delete $testcopy
252b5132
RH
620
621 set exec_output [binutils_run $prog "$flags $testfile $testcopy"]
622
21c40443 623 if ![string equal "" $exec_output] {
252b5132 624 fail $test1
21c40443 625 if [string equal "" $test2] {
0d063f63
AM
626 return
627 }
252b5132
RH
628 fail $test2
629 return
630 }
631
632 if [is_remote host] {
633 remote_upload host $testcopy tmpdir/copyprog
634 }
635
f8a7038a 636 set status [remote_exec build "cmp" "tmpdir/$test_prog tmpdir/copyprog"]
8d263650 637 set exec_output [lindex $status 1]
252b5132 638
21c40443 639 if [string equal "" $exec_output] then {
252b5132
RH
640 pass $test1
641 } else {
642 send_log "$exec_output\n"
643 verbose "$exec_output"
644
645 # This will fail for many reasons. For example, it will most
646 # likely fail if a non-GNU linker is used. Therefore, we do
647 # not insist that it pass. If you are using an assembler and
648 # linker based on the same BFD as objcopy, it is worth
649 # investigating to see why this failure occurs. If we are
650 # cross compiling, we assume that a GNU linker is being used,
651 # and expect it to succeed.
652 if {[isnative]} then {
653 setup_xfail "*-*-*"
654 }
655
9cc0123f 656 # This also fails for some mips targets. See elf32-mips.c
252b5132 657 # mips_elf_sym_is_global.
9cc0123f
AM
658 if { [is_bad_symtab] } then {
659 setup_xfail "*-*-*"
660 }
252b5132 661
11d47adc 662 setup_xfail "arm*-*-pe"
88f14853 663 setup_xfail "*-*-mingw*"
899396fe 664 setup_xfail "*-*-cygwin*"
21c40443 665
252b5132
RH
666 fail $test1
667 }
668
21c40443 669 if [string equal "" $test2] {
0d063f63
AM
670 return
671 }
672
252b5132 673 set output [remote_load target tmpdir/copyprog]
8d263650 674 set status [lindex $output 0]
252b5132
RH
675 if { $status != "pass" } {
676 fail $test2
677 } else {
678 pass $test2
679 }
680}
681
682# Test stripping an executable
683
21c40443 684proc strip_executable { prog flags test1 test2 } {
252b5132
RH
685 global NM
686 global NMFLAGS
28902555 687 global READELF
252b5132 688
0fcc17f8 689 remote_file build delete tmpdir/striprog
252b5132
RH
690 remote_download build tmpdir/copyprog tmpdir/striprog
691 if [is_remote host] {
8d263650 692 set copyfile [remote_download host tmpdir/striprog]
252b5132
RH
693 } else {
694 set copyfile tmpdir/striprog
695 }
696
28902555
BS
697 set osabi_fail "false"
698 if [is_elf_format] {
699 verbose -log "$READELF -a ${copyfile} > tmpdir/osabi.in"
700 set exec_output [remote_exec host "$READELF -h ${copyfile}" "" "/dev/null" "tmpdir/osabi.in"]
701 if { [lindex $exec_output 0] != 0 } then {
21c40443 702 unresolved "$test1 preserving OS/ABI"
28902555
BS
703 set osabi_fail "true"
704 } else {
705 verbose -log "grep OS/ABI tmpdir/osabi.in"
706 catch "exec grep OS/ABI tmpdir/osabi.in" osabi_in
707 }
708 }
709
252b5132 710 set exec_output [binutils_run $prog "$flags ${copyfile}"]
21c40443
AM
711 if ![string equal "" $exec_output] {
712 fail $test1
713 if [string equal "" $test2] {
714 return
715 }
716 fail $test2
252b5132
RH
717 return
718 }
719
720 if [is_remote host] {
8d263650 721 remote_upload host ${copyfile} tmpdir/striprog
252b5132
RH
722 }
723
28902555
BS
724 if { $osabi_fail != "true" && [is_elf_format] } {
725 verbose -log "$READELF -a ${copyfile} > tmpdir/osabi.out"
726 set exec_output [remote_exec host "$READELF -h ${copyfile}" "" "/dev/null" "tmpdir/osabi.out"]
727 if { [lindex $exec_output 0] != 0 } then {
21c40443 728 unresolved "$test1 preserving OS/ABI"
28902555
BS
729 } else {
730 verbose -log "grep OS/ABI tmpdir/osabi.out"
731 catch "exec grep OS/ABI tmpdir/osabi.out" osabi_out
732 if { "$osabi_in" == "$osabi_out" } {
21c40443 733 pass "$test1 preserving OS/ABI"
28902555 734 } else {
21c40443 735 fail "$test1 preserving OS/ABI"
28902555
BS
736 }
737 }
738 }
739
252b5132 740 set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
68a4c073 741 if ![string match "*: no symbols*" $exec_output] {
21c40443 742 fail $test1
252b5132
RH
743 return
744 }
21c40443
AM
745
746 if [string equal "" $test2] {
747 return
748 }
749
750 set result [remote_load target tmpdir/striprog]
751 set status [lindex $result 0]
752 if { $status != "pass" } {
753 fail $test2
754 return
755 }
756
757 pass $test2
252b5132
RH
758}
759
760# Test stripping an executable with saving a symbol
761
21c40443 762proc strip_executable_with_saving_a_symbol { prog flags test1 test2 } {
252b5132
RH
763 global NM
764 global NMFLAGS
765
0fcc17f8 766 remote_file build delete tmpdir/striprog
252b5132
RH
767 remote_download build tmpdir/copyprog tmpdir/striprog
768 if [is_remote host] {
8d263650 769 set copyfile [remote_download host tmpdir/striprog]
252b5132
RH
770 } else {
771 set copyfile tmpdir/striprog
772 }
773
774 set exec_output [binutils_run $prog "$flags ${copyfile}"]
21c40443
AM
775 if ![string equal "" $exec_output] {
776 fail $test1
777 if [string equal "" $test2] {
778 return
779 }
780 fail $test2
252b5132
RH
781 return
782 }
783
252b5132 784 set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
edc45ab9
HPN
785 if { [istarget mmix-knuth-mmixware] } {
786 # Whenever there's a symbol in the mmo format, there's the symbol
787 # Main, so remove it manually from the expected output for sake of
788 # this test.
789
790 # Using "" not {} to get the \n and \r translated.
791 regsub "^\[0-9a-fA-F\]+\[ \]+T Main\[\n\r\]+" $exec_output "" exec_output
792 }
793
adacfc81
JJ
794 if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
795 && ![regexp {^([0-9a-fA-F]+)?[ ]+[TD] _main} $exec_output]} {
21c40443 796 fail $test1
252b5132
RH
797 return
798 }
21c40443
AM
799
800 if [string equal "" $test2] {
801 return
802 }
803
804 if [is_remote host] {
805 remote_upload host ${copyfile} tmpdir/striprog
806 }
807
808 set result [remote_load target tmpdir/striprog]
809 set status [lindex $result 0]
810 if { $status != "pass" } {
811 fail $test2
812 return
813 }
814
815 pass $test2
252b5132
RH
816}
817
11701589
JK
818# Test keeping only debug symbols of an executable
819
820proc keep_debug_symbols_and_test_copy { prog1 flags1 test1 prog2 flags2 test2 } {
0fcc17f8 821 remote_file build delete tmpdir/striprog
11701589
JK
822 remote_download build tmpdir/copyprog tmpdir/striprog
823 if [is_remote host] {
824 set copyfile [remote_download host tmpdir/striprog]
825 } else {
826 set copyfile tmpdir/striprog
827 }
828
829 set exec_output [binutils_run $prog1 "$flags1 ${copyfile}"]
21c40443 830 if ![string equal "" $exec_output] {
11701589
JK
831 fail $test1
832 return
833 }
834 pass $test1
835
836 set exec_output [binutils_run $prog2 "$flags2 ${copyfile}"]
21c40443 837 if ![string equal "" $exec_output] {
11701589
JK
838 fail $test2
839 return
840 }
841 pass $test2
842}
843
63b9bbb7 844# Tests that in a debug only copy of a file the sections
de194d85 845# headers whose types have been changed to NOBITS still
63b9bbb7
NC
846# retain their sh_link fields.
847
848proc keep_debug_symbols_and_check_links { prog flags test } {
849 global READELF
850
851 remote_file build delete tmpdir/striprog
852 remote_download build tmpdir/copyprog tmpdir/striprog
853 if [is_remote host] {
854 set copyfile [remote_download host tmpdir/striprog]
855 } else {
856 set copyfile tmpdir/striprog
857 }
858
859 set exec_output [binutils_run $prog "$flags ${copyfile}"]
21c40443 860 if ![string equal "" $exec_output] {
63b9bbb7
NC
861 fail $test
862 return
863 }
864
865 set got [binutils_run $READELF "-S --wide ${copyfile}"]
866
867 set fails 0
868 # Regexp to match a section with NOBITS type and extract its name and sh_link fields
869 while {[regexp \
870 {[^a-zA-Z]+([a-zA-Z0-9_\.]+)[ ]+NOBITS[ ]+[0-9a-fA-F]+ [0-9a-fA-F]+ [0-9a-fA-F]+ [0-9]+[ A]+([0-9]+)(.*)} \
871 $got all name link rest]} {
872 set sh_link 0x$link
873 if {$sh_link == 0} {
874 # Only some NOBITS sections should have a non-zero sh_link field.
875 # Look for them by name.
876 verbose "NOBITS section .$name has a 0 sh_link field\n"
877 switch $name {
878 "rela.*" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
879 "rel.*" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
880 "hash" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
881 "gnu_version" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
882 "dynsym" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
883 "gnu.version_r" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
884 "dynamic" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
885 "symtab" { set fails 1 ; send_log "Expected non-zero sh_link for .$name\n" }
886 }
887 }
888 set got $rest
889 }
890
891 if {$fails == 0} {
892 pass $test
893 } else {
894 fail $test
895 }
896}
897
898
252b5132 899set test1 "simple objcopy of executable"
21c40443
AM
900set test1r "run objcopy of executable"
901set test2 "strip executable"
902set test2r "run stripped executable"
903set test3 "strip executable with saving a symbol"
904set test3r "run stripped executable with saving a symbol"
905set test4 "keep only debug data"
906set test5 "simple objcopy of debug data"
63b9bbb7 907if [is_elf_format] {
21c40443 908 set test6 "NOBITS sections retain sh_link field"
63b9bbb7 909}
252b5132
RH
910
911switch [copy_setup] {
912 "1" {
913 # do nothing
914 }
915 "2" {
916 untested $test1
21c40443 917 untested $test1r
252b5132 918 untested $test2
21c40443 919 untested $test2r
252b5132 920 untested $test3
21c40443 921 untested $test3r
252b5132 922 untested $test4
11701589 923 untested $test5
63b9bbb7 924 if [is_elf_format] {
21c40443 925 untested $test6
63b9bbb7 926 }
252b5132
RH
927 }
928 "3" {
0d063f63 929 copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" ""
21c40443
AM
930 unsupported $test1r
931 strip_executable "$STRIP" "$STRIPFLAGS" "$test2" ""
932 unsupported $test2r
933 strip_executable_with_saving_a_symbol "$STRIP" "-K main -K _main $STRIPFLAGS" "$test3" ""
934 unsupported $test3r
935 keep_debug_symbols_and_test_copy "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test4" \
936 "$OBJCOPY" "$OBJCOPYFLAGS" "$test5"
63b9bbb7 937 if [is_elf_format] {
21c40443 938 keep_debug_symbols_and_check_links "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test6"
63b9bbb7 939 }
252b5132
RH
940 }
941 "0" {
21c40443
AM
942 copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "$test1r"
943 strip_executable "$STRIP" "$STRIPFLAGS" "$test2" "$test2r"
944 strip_executable_with_saving_a_symbol "$STRIP" "-K main -K _main $STRIPFLAGS" "$test3" "$test3r"
945 keep_debug_symbols_and_test_copy "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test4" \
946 "$OBJCOPY" "$OBJCOPYFLAGS" "$test5"
63b9bbb7 947 if [is_elf_format] {
21c40443 948 keep_debug_symbols_and_check_links "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test6"
63b9bbb7 949 }
252b5132
RH
950 }
951}
ad2fb2cd 952
6a0d0afd
L
953proc objcopy_test_readelf {testname srcfile} {
954 global OBJCOPY
955 global OBJCOPYFLAGS
956 global READELF
957 global srcdir
958 global subdir
959
960 if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
961 unresolved "objcopy ($testname)"
962 return
963 }
964
965 verbose -log "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"
7f6a71ff
JM
966 set exec_output [remote_exec host "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"]
967 if { [lindex $exec_output 0] != 0
21c40443 968 || ![string equal "" [lindex $exec_output 1]] } then {
6a0d0afd 969 fail "objcopy ($testname)"
004314cc 970 return
6a0d0afd
L
971 }
972
973 verbose -log "$READELF -a tmpdir/bintest.o > tmpdir/bintest.o.out"
7f6a71ff
JM
974 set exec_output [remote_exec host "$READELF -a tmpdir/bintest.o" "" "/dev/null" "tmpdir/bintest.o.out"]
975 if { [lindex $exec_output 0] != 0 } then {
976 unresolved "objcopy ($testname)"
977 return
978 }
979 set exec_output [prune_warnings [lindex $exec_output 1]]
21c40443 980 if ![string equal "" $exec_output] then {
6a0d0afd
L
981 unresolved "objcopy ($testname)"
982 return
983 }
984
985 verbose -log "$READELF -a tmpdir/copy.o > tmpdir/copy.o.out"
7f6a71ff
JM
986 set exec_output [remote_exec host "$READELF -a tmpdir/copy.o" "" "/dev/null" "tmpdir/copy.o.out"]
987 if { [lindex $exec_output 0] != 0 } then {
988 unresolved "objcopy ($testname)"
989 return
990 }
991 set exec_output [prune_warnings [lindex $exec_output 1]]
21c40443 992 if ![string equal "" $exec_output] then {
6a0d0afd
L
993 unresolved "objcopy ($testname)"
994 return
995 }
996
997 verbose -log "diff tmpdir/bintest.o.out tmpdir/copy.o.out"
998 catch "exec diff tmpdir/bintest.o.out tmpdir/copy.o.out" exec_output
999 set exec_output [prune_warnings $exec_output]
1000
21c40443 1001 if [string equal "" $exec_output] then {
6a0d0afd
L
1002 pass "objcopy ($testname)"
1003 } else {
1004 fail "objcopy ($testname)"
1005 }
1006}
1007
0b45135e
AB
1008proc objcopy_test_symbol_manipulation {} {
1009 global srcdir
1010 global subdir
1011
1012 set test_list [lsort [glob -nocomplain $srcdir/$subdir/symbols-*.d]]
1013 foreach t $test_list {
1014 # We need to strip the ".d", but can leave the dirname.
1015 verbose [file rootname $t]
1016 run_dump_test [file rootname $t]
1017 }
1018}
1019
b8871f35
L
1020proc objcopy_test_elf_common_symbols {} {
1021 global srcdir
1022 global subdir
1023
1024 # hpux has a non-standard common directive.
1025 if { [istarget "*-*-hpux*"] } then {
1026 return
1027 }
1028
1029 set test_list [lsort [glob -nocomplain $srcdir/$subdir/common-*.d]]
1030 foreach t $test_list {
1031 # We need to strip the ".d", but can leave the dirname.
1032 verbose [file rootname $t]
1033 run_dump_test [file rootname $t]
1034 }
1035}
1036
ad2fb2cd
L
1037# ia64 specific tests
1038if { ([istarget "ia64-*-elf*"]
1039 || [istarget "ia64-*-linux*"]) } {
64bb95af
L
1040 objcopy_test "ia64 link order" link-order.s
1041}
ad2fb2cd 1042
64bb95af 1043# ELF specific tests
506b86a4 1044set elf64 ""
64bb95af 1045if [is_elf_format] {
0b45135e 1046 objcopy_test_symbol_manipulation
b8871f35 1047 objcopy_test_elf_common_symbols
64bb95af 1048 objcopy_test "ELF unknown section type" unknown.s
a0a8a934
NC
1049 objcopy_test_readelf "ELF group 1" group.s
1050 objcopy_test_readelf "ELF group 2" group-2.s
1051 objcopy_test_readelf "ELF group 3" group-3.s
1052 objcopy_test_readelf "ELF group 4" group-4.s
a91e1603 1053 objcopy_test_readelf "GNU_MBIND section" mbind1.s
b2fc24d4 1054 run_dump_test "group-5"
4c8e8a7e 1055 run_dump_test "group-6"
6e5e9d58
AM
1056 run_dump_test "group-7a"
1057 run_dump_test "group-7b"
1058 run_dump_test "group-7c"
85d7f0b9 1059 run_dump_test "copy-1"
0930eddd 1060 run_dump_test "note-1"
506b86a4 1061 # Use bintest.o from the note-1 test to determine ELF32 or ELF64
9ef920e9 1062 if [is_elf64 tmpdir/bintest.o] {
506b86a4 1063 set elf64 "--defsym ELF64=1"
9ef920e9 1064 run_dump_test "note-2-64"
714da62f 1065 run_dump_test "note-3-64"
6f156d7a 1066 run_dump_test "note-4-64"
9ef920e9
NC
1067 } else {
1068 run_dump_test "note-2-32"
714da62f 1069 run_dump_test "note-3-32"
6f156d7a 1070 run_dump_test "note-4-32"
9ef920e9 1071 }
0df8ad28 1072 run_dump_test "note-5"
ad2fb2cd 1073}
af3c5dea 1074
af3c5dea 1075run_dump_test "copy-2"
81fc501a 1076run_dump_test "copy-3"
0691f7af 1077run_dump_test "copy-4"
de564eb5
NC
1078run_dump_test "copy-5"
1079
506b86a4
AM
1080# Use bintest.o from the copy-4 test to determine ELF reloc type
1081set reloc_format rel
1082if { [is_elf_format] && [is_rela tmpdir/bintest.o] } {
1083 set reloc_format rela
1084}
cbd44e24
L
1085run_dump_test "pr19020a"
1086run_dump_test "pr19020b"
d58c2e3a
RS
1087
1088if [is_elf_format] {
748fc5e9
L
1089 run_dump_test "strip-1"
1090 run_dump_test "strip-2"
1aa9ef63 1091 run_dump_test "strip-3"
eb3980ce
L
1092 run_dump_test "strip-4"
1093 run_dump_test "strip-5"
f206e905
L
1094 run_dump_test "strip-6"
1095 run_dump_test "strip-7"
e1e87d1e
L
1096 run_dump_test "strip-8"
1097 run_dump_test "strip-9"
d4ac1f87 1098 run_dump_test "strip-12"
2f8ceb38
MR
1099
1100 if { [istarget "mips64*-*-openbsd*"] } {
1101 set reloc_format mips64
2f8ceb38 1102 }
506b86a4 1103 # A relocation type not supported by any target
fbaf61ad
NC
1104 if { [istarget "nds32*-*"] } {
1105 set reloc 255
1106 } else {
1107 set reloc 215
1108 }
506b86a4
AM
1109 run_dump_test "strip-13" [list \
1110 [list source strip-13${reloc_format}.s] \
1111 [list as "${elf64} --defsym RELOC=${reloc}"]]
3f97ba9f
MR
1112 # Select a relocation number that corresponds to one actually
1113 # supported by the target and ABI being tested.
1114 if { [istarget "aarch64*-*"] } {
1115 set reloc 259
1116 } elseif { [istarget "ia64*-*"] \
1117 || [istarget "m32r*-*"] \
d4ae1932 1118 || [istarget "nds32*-*"] \
3f97ba9f
MR
1119 || [istarget "v850*-*"] } {
1120 set reloc 50
d4ae1932
AM
1121 } elseif { [istarget "pru-*"] } {
1122 set reloc 11
3f97ba9f
MR
1123 } else {
1124 set reloc 1
1125 }
1126 run_dump_test "strip-14" [list \
506b86a4
AM
1127 [list source strip-14${reloc_format}.s] \
1128 [list as "${elf64} --defsym RELOC=${reloc}"]]
d52e3d06 1129 run_dump_test "strip-15" [list \
506b86a4
AM
1130 [list source strip-15${reloc_format}.s] \
1131 [list as "${elf64} --defsym RELOC=${reloc}"]]
f3185997 1132
a43942db
MR
1133 # This requires STB_GNU_UNIQUE support with OSABI set to GNU.
1134 if { [supports_gnu_unique] } {
4cd28456
AM
1135 run_dump_test "strip-10"
1136 }
211dc24b 1137 run_dump_test "strip-11"
312aaa3c 1138
b8b6abe0
AM
1139 if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } {
1140 # Check to make sure we don't strip a symbol named in relocations.
1141 set test "objcopy keeps symbols needed by relocs"
312aaa3c 1142
b8b6abe0 1143 set srcfile $srcdir/$subdir/needed-by-reloc.s
312aaa3c 1144
b8b6abe0
AM
1145 if {![binutils_assemble $srcfile tmpdir/bintest.o]} then {
1146 unresolved $test
1147 } else {
1148 set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-symbol=foo tmpdir/bintest.o ${copyfile}.o"]
312aaa3c 1149
b8b6abe0
AM
1150 if [regexp "not stripping symbol `foo' because it is named in a relocation" $got] {
1151 pass $test
1152 } else {
1153 fail $test
1154 }
1155 }
312aaa3c 1156 }
b8b6abe0 1157
8560e02a
HPN
1158 # The symbol table for some MIPS targets is sorted differently than
1159 # the ELF canonical order, so the regexps in localize-hidden-1.d fail
9cc0123f
AM
1160 # to match.
1161 if { [is_bad_symtab] } then {
1162 setup_xfail "*-*-*"
8560e02a 1163 }
b8b6abe0 1164 run_dump_test "localize-hidden-1"
afeb3d7f
L
1165 run_dump_test "testranges"
1166 run_dump_test "testranges-ia64"
500ee42e
ILT
1167
1168 run_dump_test "add-section"
2b35fb28 1169 run_dump_test "add-symbol"
500ee42e 1170 run_dump_test "add-empty-section"
18ae9cc1
L
1171
1172 run_dump_test "exclude-1a"
1173 run_dump_test "exclude-1b"
e511c9b1
AB
1174
1175 run_dump_test "only-section-01"
1176 run_dump_test "remove-section-01"
d3e5f6c8
AB
1177
1178 # Test the remove relocation functionality
1179 set test_list [lsort [glob -nocomplain $srcdir/$subdir/remove-relocs-*.d]]
1180 foreach t $test_list {
1181 # We need to strip the ".d", but can leave the dirname.
1182 verbose [file rootname $t]
1183 run_dump_test [file rootname $t]
1184 }
312aaa3c 1185}
b8b6abe0 1186run_dump_test "localize-hidden-2"
14f2c699
L
1187
1188# Test objcopying an object file without global symbol
1189
1190proc objcopy_test_without_global_symbol { } {
1191 global OBJCOPY
1192 global OBJCOPYFLAGS
1193 global OBJDUMP
1194 global OBJDUMPFLAGS
1195 global srcdir
1196 global subdir
1197
1198 set test "strip without global symbol "
1199
1200 if { [target_compile $srcdir/$subdir/pr19547.c tmpdir/pr19547.o object debug] != "" } {
1201 untested $test
1202 return
1203 }
1204
1205 if [is_remote host] {
1206 set objfile [remote_download host tmpdir/pr19547.o]
1207 } else {
1208 set objfile tmpdir/pr19547.o
1209 }
1210
1211 set exec_output [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-unneeded $objfile"]
7dd36a6f 1212 set exec_output [prune_warnings $exec_output]
14f2c699
L
1213 if ![string equal "" $exec_output] {
1214 fail $test
1215 return
1216 }
1217
1218 set exec_output [binutils_run $OBJDUMP "$OBJDUMPFLAGS -t $objfile"]
7dd36a6f 1219 set exec_output [prune_warnings $exec_output]
14f2c699
L
1220 if {![regexp "no symbols" $exec_output]} {
1221 fail $test
1222 return
1223 }
1224
1225 pass $test
1226}
1227
41699fa4
NC
1228# The AArch64 and ARM targets preserve mapping symbols
1229# in object files, so they will fail this test.
1230setup_xfail aarch64*-*-* arm*-*-*
1231
14f2c699 1232objcopy_test_without_global_symbol
f9853190
AM
1233
1234# objcopy remove relocation from executable test
1235
1236proc objcopy_remove_relocations_from_executable { } {
1237 global OBJCOPY
1238 global srcdir
1239 global subdir
1240 global READELF
1241
1242 set test "remove-section relocation sections"
1243
1244 if { [target_compile $srcdir/$subdir/testprog.c tmpdir/pr23611 executable debug] != "" } {
1245 untested $test
1246 return
1247 }
1248
1249 if [is_remote host] {
1250 set objfile [remote_download host tmpdir/pr23611]
1251 } else {
1252 set objfile tmpdir/pr23611
1253 }
1254 set out tmpdir/pr23611.out
1255
1256 set exec_output1 [binutils_run $OBJCOPY "-R .rela.plt -R .rela.dyn -R .rel.plt -R .rel.dyn $objfile $out"]
1257 set exec_output2 [binutils_run $READELF "-S $out"]
1258 if { [string match "*.rel.plt*" $exec_output2] || [string match "*.rela.plt*" $exec_output2] || [string match "*.rel.dyn*" $exec_output2] || [string match "*.rela.dyn*" $exec_output2] } {
1259 fail $test
1260 return
1261 }
1262 pass $test
1263}
1264
1265objcopy_remove_relocations_from_executable
319dbdfb
L
1266
1267run_dump_test "pr23633"
This page took 0.833073 seconds and 4 git commands to generate.