-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+# Copyright (C) 1994-2019 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
global copyfile
if {![binutils_assemble $srcdir/$subdir/${srcfile} $tempfile]} then {
- perror "unresolved $testname"
unresolved "objcopy ($testname)"
remote_file host delete $tempfile
return
# files in the first place, and may order things a little
# differently. Those systems should use setup_xfail here.
- setup_xfail "h8300-*-coff"
- setup_xfail "h8500-*-rtems*" "h8500-*-coff"
setup_xfail "hppa*-*-*"
- setup_xfail "i960-*"
- setup_xfail "m68*-*-*coff" "m68*-*-hpux*" "m68*-*-lynxos*"
- setup_xfail "m68*-*-sysv*" "m68*-apple-aux*"
setup_xfail "m8*-*"
setup_xfail "sh-*-coff*"
- setup_xfail "tic80-*-*" "w65-*"
+ setup_xfail "tic54x-*-*"
clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*"
- clear_xfail "m68*-*-sysv4*"
if [string equal "" $exec_output] then {
pass "objcopy ($testname)"
objcopy_test "simple copy" bintest.s
+# Test verilog data width
+proc objcopy_test_verilog {testname} {
+ global OBJCOPY
+ global OBJCOPYFLAGS
+ global srcdir
+ global subdir
+ global copyfile
+ set binfile tmpdir/verilogtest.o
+ set verilog tmpdir/verilog
+
+ set got [binutils_assemble $srcdir/$subdir/verilogtest.s $binfile]
+ if {![binutils_assemble $srcdir/$subdir/verilogtest.s $binfile]} then {
+ unresolved "objcopy ($testname)"
+ return
+ }
+
+ set got [binutils_run $OBJCOPY "-O verilog $binfile $verilog"]
+ if ![string equal "" $got] then {
+ fail "objcopy ($testname)"
+ }
+
+ set got [binutils_run $OBJCOPY "-O verilog --verilog-data-width 0 $binfile $verilog-0.hex"]
+ if ![regexp "verilog data width must be at least 1 byte" $got] then {
+ fail "objcopy ($testname 0) {$got}"
+ } else {
+ pass "objcopy ($testname 0)"
+ }
+
+ foreach width {1 2 4 8} {
+ set got [binutils_run $OBJCOPY "-O verilog --verilog-data-width $width $binfile $verilog-$width.hex"]
+ if ![string equal "" $got] then {
+ fail "objcopy ($testname $width)"
+ }
+ send_log "regexp_diff $verilog-$width.hex $srcdir/$subdir/verilog-$width.hex\n"
+ if {! [regexp_diff "$verilog-$width.hex" "$srcdir/$subdir/verilog-$width.hex"]} {
+ pass "objcopy ($testname $width)"
+ } else {
+ fail "objcopy ($testname $width)"
+ }
+ }
+}
+
+objcopy_test_verilog "verilog data width"
+
if { [file exists $tempfile] } {
# Test reversing bytes in a section.
remote_file build delete tmpdir/libstrip.a
set exec_output [binutils_run $AR "rc $archive ${objfile}"]
+ set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
fail $test
unresolved "$test preserving OS/ABI"
}
set exec_output [binutils_run $STRIP "-g $archive"]
+ set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
fail $test
unresolved "$test preserving OS/ABI"
}
set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
+ set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
fail $test
unresolved "$test preserving OS/ABI"
}
set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"]
+ set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
fail $test
return
}
set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"]
+ set exec_output [prune_warnings $exec_output]
if ![string match "*: no symbols*" $exec_output] {
fail $test
return
}
set exec_output [binutils_run $STRIP "$STRIPFLAGS -K main -K _main $objfile"]
+ set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
fail $test
return
}
set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
+ set exec_output [prune_warnings $exec_output]
if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
&& ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
fail $test
set res [build_wrapper testglue.o]
set flags { debug }
- if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] } {
+ if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] && ![istarget arm*-*-uclinuxfdpiceabi] } {
return 1
}
setup_xfail "*-*-*"
}
- setup_xfail "arm*-*-coff"
setup_xfail "arm*-*-pe"
setup_xfail "*-*-mingw*"
setup_xfail "*-*-cygwin*"
}
# ELF specific tests
+set elf64 ""
if [is_elf_format] {
objcopy_test_symbol_manipulation
objcopy_test_elf_common_symbols
objcopy_test "ELF unknown section type" unknown.s
- objcopy_test_readelf "ELF group" group.s
- objcopy_test_readelf "ELF group" group-2.s
- objcopy_test_readelf "ELF group" group-3.s
- objcopy_test_readelf "ELF group" group-4.s
+ objcopy_test_readelf "ELF group 1" group.s
+ objcopy_test_readelf "ELF group 2" group-2.s
+ objcopy_test_readelf "ELF group 3" group-3.s
+ objcopy_test_readelf "ELF group 4" group-4.s
objcopy_test_readelf "GNU_MBIND section" mbind1.s
run_dump_test "group-5"
run_dump_test "group-6"
+ run_dump_test "group-7a"
+ run_dump_test "group-7b"
+ run_dump_test "group-7c"
run_dump_test "copy-1"
run_dump_test "note-1"
- if [is_elf64 tmpdir/bintest.o] {
+ # Use copytest.o from the note-1 test to determine ELF32 or ELF64
+ if [is_elf64 tmpdir/copytest.o] {
+ set elf64 "--defsym ELF64=1"
run_dump_test "note-2-64"
+ run_dump_test "note-3-64"
+ run_dump_test "note-4-64"
+ run_dump_test "note-6-64"
} else {
run_dump_test "note-2-32"
+ run_dump_test "note-3-32"
+ run_dump_test "note-4-32"
+ run_dump_test "note-6-32"
}
+ run_dump_test "note-5"
}
run_dump_test "copy-2"
run_dump_test "copy-3"
run_dump_test "copy-4"
+run_dump_test "copy-5"
+run_dump_test "copy-6"
+
+# Use bintest.o from the copy-4 test to determine ELF reloc type
+set reloc_format rel
+if { [is_elf_format] && [is_rela tmpdir/bintest.o] } {
+ set reloc_format rela
+}
run_dump_test "pr19020a"
run_dump_test "pr19020b"
run_dump_test "strip-8"
run_dump_test "strip-9"
run_dump_test "strip-12"
+
+ if { [istarget "mips64*-*-openbsd*"] } {
+ set reloc_format mips64
+ }
+ # A relocation type not supported by any target
+ if { [istarget "nds32*-*"] } {
+ set reloc 255
+ } else {
+ set reloc 215
+ }
+ run_dump_test "strip-13" [list \
+ [list source strip-13${reloc_format}.s] \
+ [list as "${elf64} --defsym RELOC=${reloc}"]]
+ # Select a relocation number that corresponds to one actually
+ # supported by the target and ABI being tested.
+ if { [istarget "aarch64*-*"] } {
+ set reloc 259
+ } elseif { [istarget "ia64*-*"] \
+ || [istarget "m32r*-*"] \
+ || [istarget "nds32*-*"] \
+ || [istarget "v850*-*"] } {
+ set reloc 50
+ } elseif { [istarget "pru-*"] } {
+ set reloc 11
+ } else {
+ set reloc 1
+ }
+ run_dump_test "strip-14" [list \
+ [list source strip-14${reloc_format}.s] \
+ [list as "${elf64} --defsym RELOC=${reloc}"]]
+ run_dump_test "strip-15" [list \
+ [list source strip-15${reloc_format}.s] \
+ [list as "${elf64} --defsym RELOC=${reloc}"]]
+
# This requires STB_GNU_UNIQUE support with OSABI set to GNU.
if { [supports_gnu_unique] } {
run_dump_test "strip-10"
}
- set extra_strip11 ""
- if { [istarget "sh64*-*"] } {
- # pr17755 testcase
- set extra_strip11 { { "as" "--isa=SHmedia --abi=64" } }
- }
- run_dump_test "strip-11" $extra_strip11
+ run_dump_test "strip-11"
if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } {
# Check to make sure we don't strip a symbol named in relocations.
run_dump_test "only-section-01"
run_dump_test "remove-section-01"
+ run_dump_test "keep-section-1"
+ run_dump_test "keep-section-2"
+
# Test the remove relocation functionality
set test_list [lsort [glob -nocomplain $srcdir/$subdir/remove-relocs-*.d]]
foreach t $test_list {
}
set exec_output [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-unneeded $objfile"]
+ set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
fail $test
return
}
set exec_output [binutils_run $OBJDUMP "$OBJDUMPFLAGS -t $objfile"]
+ set exec_output [prune_warnings $exec_output]
if {![regexp "no symbols" $exec_output]} {
fail $test
return
setup_xfail aarch64*-*-* arm*-*-*
objcopy_test_without_global_symbol
+
+# objcopy remove relocation from executable test
+
+proc objcopy_remove_relocations_from_executable { } {
+ global OBJCOPY
+ global srcdir
+ global subdir
+ global READELF
+
+ set test "remove-section relocation sections"
+
+ if { [target_compile $srcdir/$subdir/testprog.c tmpdir/pr23611 executable debug] != "" } {
+ untested $test
+ return
+ }
+
+ if [is_remote host] {
+ set objfile [remote_download host tmpdir/pr23611]
+ } else {
+ set objfile tmpdir/pr23611
+ }
+ set out tmpdir/pr23611.out
+
+ set exec_output1 [binutils_run $OBJCOPY "-R .rela.plt -R .rela.dyn -R .rel.plt -R .rel.dyn $objfile $out"]
+ set exec_output2 [binutils_run $READELF "-S $out"]
+ 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] } {
+ fail $test
+ return
+ }
+ pass $test
+}
+
+objcopy_remove_relocations_from_executable
+
+run_dump_test "pr23633"
+
+run_dump_test "set-section-alignment"