X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gas%2Ftestsuite%2Fgas%2Felf%2Felf.exp;h=4aa2b2e6a8784243a3bd6395b80ed84ed28f30dd;hb=79c077509f32b19b6a16728a9afb7b42a8d3dc27;hp=4680dcebdb453e517615cac7a683eff890b3d9b7;hpb=86654c128fc2efa5bc86018d84673ec12bda507a;p=binutils-gdb.git diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index 4680dcebdb4..4aa2b2e6a87 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -2,27 +2,33 @@ # elf tests # -proc run_list_test { name suffix opts readelf_pipe } { +proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } { global READELF global srcdir subdir set testname "elf $name list" set file $srcdir/$subdir/$name gas_run ${name}.s "$opts -o dump.o" ">&dump.out" if { ![string match "" $opts] - && [regexp_diff "dump.out" "${file}.l"] } then { + && [regexp_diff "dump.out" "${file}.l" ""] } then { fail $testname verbose "output is [file_contents "dump.out"]" 2 return } - send_log "$READELF -s dump.o > dump.out\n" - catch "exec $READELF -s dump.o $readelf_pipe > dump.out\n" comp_output + send_log "$READELF $readelf_opts dump.o $readelf_pipe > dump.out\n" + set status [gas_host_run "$READELF $readelf_opts dump.o" ">readelf.out"] + if { [lindex $status 0] != 0 || ![string match "" [lindex $status 1]] } then { + send_log "[lindex $status 1]\n" + fail $testname + return + } + catch "exec cat readelf.out $readelf_pipe > dump.out\n" comp_output if ![string match "" $comp_output] then { send_log "$comp_output\n" fail $testname return } verbose_eval {[file_contents "dump.out"]} 3 - if { [regexp_diff "dump.out" "${file}.e${suffix}"] } then { + if { [regexp_diff "dump.out" "${file}.e${suffix}" ""] } then { fail $testname verbose "output is [file_contents "dump.out"]" 2 return @@ -31,10 +37,13 @@ proc run_list_test { name suffix opts readelf_pipe } { } # We're testing bits in obj-elf -- don't run on anything else. -if { ([istarget "*-*-elf*"] +if { ([istarget "*-*-*elf*"] || [istarget "*-*-linux*"] + || [istarget "m6811-*"] + || [istarget "m6812-*"] || [istarget "sparc*-*-solaris*"] - || [istarget "mips*-*-irix6*"]) + || [istarget "mips*-*-irix6*"] + || [istarget "arm*-*-eabi"]) && ![istarget *-*-linux*aout*] && ![istarget *-*-linux*coff*] && ![istarget *-*-linux*oldld*] @@ -47,15 +56,119 @@ if { ([istarget "*-*-elf*"] if {[istarget m32r*-*-*]} then { set target_machine -m32r } - run_dump_test "ehopt0" - run_dump_test "group0a" - run_dump_test "group0b" - run_dump_test "group1a" - run_dump_test "group1b" - run_dump_test "section0" - run_dump_test "section1" - run_list_test "section2" "$target_machine" "-al" "" - run_dump_test "section3" - run_dump_test "symver" - run_list_test "type" "" "" "| grep \"1 \\\[FONT\\\]\"" + if {[istarget "score-*-*"]} then { + set target_machine -score + } + if {[istarget "tic6x-*-*"]} then { + set target_machine -tic6x + } + if {[istarget "xtensa*-*-*"]} then { + set target_machine -xtensa + } + if {[istarget "rx-*-*"]} then { + set target_machine -rx + } + if { ([istarget "*arm*-*-*"] + || [istarget "xscale*-*-*"]) } { + + if { ([istarget "*-*-*eabi"] + || [istarget "*-*-linux-*"] + || [istarget "*-*-symbianelf"])} then { + set target_machine -armeabi + } else { + set target_machine -armelf + } + } + + # The MN10300 and Xtensa ports disable the assembler's call frame + # optimization because it interfers with link-time relaxation of + # function prologues. + if {![istarget "mn10300-*-*"] + && ![istarget "xtensa*-*-*"] + && ![istarget "am3*-*-*"]} then { + run_dump_test "ehopt0" + } + case $target_triplet in { + { m68k-*-* m68[03]??-*-* } { + run_dump_test "file" { { as "--defsym m68k=1" } } + } + { mmix-*-* } { + run_dump_test "file" { { as "--defsym mmix=1" } } + } + { xtensa*-*-* } { + run_dump_test "file" { { as "--rename-section file.s=file.c" } } + } + default { + run_dump_test "file" + } + } + run_dump_test "group0a" + run_dump_test "group0b" + run_dump_test "group1a" + run_dump_test "group1b" + run_dump_test "groupautoa" + run_dump_test "groupautob" + case $target_triplet in { + { alpha*-*-* } { } + { cr16*-*-* } { } + { crx*-*-* } { } + { h8300-*-* } { } + { hppa*-*-* } { } + { iq2000*-*-* } { } + { mips*-*-* } { } + { mn10200-*-* } { } + { mn10300-*-* } { } + { *c54x*-*-* } { } + { rx-*-* } { } + default { + # The next test can fail if the target does not convert fixups + # against ordinary symbols into relocations against section symbols. + # This is usually revealed by the error message: + # symbol `sym' required but not present + run_dump_test redef + run_dump_test equ-reloc + } + } + run_dump_test "pseudo" + run_dump_test "section0" + run_dump_test "section1" + if {! [istarget "h8300-*-*"]} then { + # The h8300 port issues a warning message for + # new sections created without atrributes. + run_elf_list_test "section2" "$target_machine" "-al" "-s" "" + } + run_dump_test "section3" + run_dump_test "section4" + if {! [istarget "h8300-*-*"]} then { + # The h8300 port issues a warning message for + # new sections created without atrributes. + run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\"" + } + run_dump_test "struct" + if { ![istarget "alpha*-*-*"] } then { + # The alpha port uses .set for state, e.g. nomacro. + run_dump_test "symtab" + } + run_dump_test "symver" + + # The MSP port sets the ELF header's OSABI field to ELFOSABI_STANDALONE. + # The non-eabi ARM ports sets it to ELFOSABI_ARM. + # So for these targets we cannot include an IFUNC symbol type + # in the symbol type test. + if { [istarget "msp*-*-*"] + || [istarget "arm*-*-*"] + || [istarget "xscale*-*-*"]} then { + run_elf_list_test "type-noifunc" "" "" "-s" "| grep \"1 *\\\[FONTC\\\]\"" + } else { + run_dump_test ifunc-1 + run_elf_list_test "type" "" "" "-s" "| grep \"1 *\\\[FIONTCU\\\]\"" + } + + run_dump_test "section6" + run_dump_test "section7" + run_dump_test "section8" + run_dump_test "dwarf2-1" + run_dump_test "dwarf2-2" + run_dump_test "dwarf2-3" + run_dump_test "bad-section-flag" }