X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Ftestsuite%2Fbinutils-all%2Fobjcopy.exp;h=88f63fee393013d8388d8cbf0e79f986793905b7;hb=5b660084e26050d2e7f1fda06daec1e83311c188;hp=8308adcb03dfe0d92209654f38adc0b67930b29d;hpb=219d1afa89d0d53ca93a684cac341f16470f3ca0;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 8308adcb03..88f63fee39 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1994-2018 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 @@ -77,19 +77,13 @@ proc objcopy_test {testname srcfile} { # 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)" @@ -107,6 +101,50 @@ proc objcopy_test {testname srcfile} { 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. @@ -446,6 +484,7 @@ proc strip_test { } { 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" @@ -453,6 +492,7 @@ proc strip_test { } { } 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" @@ -460,6 +500,7 @@ proc strip_test { } { } 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" @@ -494,12 +535,14 @@ proc strip_test { } { } 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 @@ -535,12 +578,14 @@ proc strip_test_with_saving_a_symbol { } { } 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 @@ -570,7 +615,7 @@ proc copy_setup { } { set res [build_wrapper testglue.o] set flags { debug } - if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] } { + if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] && ![istarget arm*-*-uclinuxfdpiceabi] } { return 1 } @@ -657,7 +702,6 @@ proc copy_executable { prog flags test1 test2 } { setup_xfail "*-*-*" } - setup_xfail "arm*-*-coff" setup_xfail "arm*-*-pe" setup_xfail "*-*-mingw*" setup_xfail "*-*-cygwin*" @@ -1040,31 +1084,50 @@ if { ([istarget "ia64-*-elf*"] } # 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" @@ -1079,16 +1142,45 @@ if [is_elf_format] { 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. @@ -1129,6 +1221,9 @@ if [is_elf_format] { 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 { @@ -1163,12 +1258,14 @@ proc objcopy_test_without_global_symbol { } { } 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 @@ -1182,3 +1279,40 @@ proc objcopy_test_without_global_symbol { } { 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"