X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Ftestsuite%2Fbinutils-all%2Fobjcopy.exp;h=88f63fee393013d8388d8cbf0e79f986793905b7;hb=5b660084e26050d2e7f1fda06daec1e83311c188;hp=d979648758cda6b937982a1d36d1541a5544d435;hpb=7dd36a6f1ca92cd4ca4776064c604cda7755bc44;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index d979648758..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 @@ -80,7 +80,7 @@ proc objcopy_test {testname srcfile} { setup_xfail "hppa*-*-*" setup_xfail "m8*-*" setup_xfail "sh-*-coff*" - setup_xfail "tic80-*-*" + setup_xfail "tic54x-*-*" clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*" clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*" @@ -101,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. @@ -1045,10 +1089,10 @@ 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" @@ -1057,16 +1101,18 @@ if [is_elf_format] { run_dump_test "group-7c" run_dump_test "copy-1" run_dump_test "note-1" - # Use bintest.o from the note-1 test to determine ELF32 or ELF64 - 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" } @@ -1074,6 +1120,9 @@ if [is_elf_format] { 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] } { @@ -1098,7 +1147,11 @@ if [is_elf_format] { set reloc_format mips64 } # A relocation type not supported by any target - set reloc 215 + 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}"]] @@ -1168,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 { @@ -1223,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"