#
# elf tests
#

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 {
	fail $testname
	verbose "output is [file_contents "dump.out"]" 2
	return
    }
    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 {
	fail $testname
	verbose "output is [file_contents "dump.out"]" 2
	return
    }
    pass $testname
}

# We're testing bits in obj-elf -- don't run on anything else.
if { ([istarget "*-*-*elf*"]
      || [istarget "*-*-linux*"]
      || [istarget "*-*-gnu*"]
      || [istarget "m6811-*"]
      || [istarget "m6812-*"]
      || [istarget "sparc*-*-solaris*"]
      || [istarget "mips*-*-irix6*"]
      || [istarget "arm*-*-eabi"])
     && ![istarget *-*-linux*aout*]
     && ![istarget *-*-linux*coff*]
     && ![istarget *-*-linux*oldld*]
     && ![istarget sh64*-*-linux*]
} then {
    set target_machine ""
    if {[istarget "mips*-*-*"]} then {
	set target_machine -mips
    }
    if {[istarget m32r*-*-*]} then {
	set target_machine -m32r
    }
    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*-*-*"]} {

	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 "group0c"
    run_dump_test "group1a"
    run_dump_test "group1b"
    run_dump_test "groupautoa"
    case $target_triplet in {
	{ xtensa*-*-* } { }
	default {
	    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-*-*"] && ! [istarget "rx-*-*"]} then {
	# The h8300 port issues a warning message for
	# new sections created without atrributes.
	# The RX port does not complain about changing the attributes of the
	# .data and .bss sections since it does not use those names.
	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*-*-*"]} 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 "section9"
    run_dump_test "dwarf2-1"
    run_dump_test "dwarf2-2"
    run_dump_test "dwarf2-3"
    run_dump_test "dwarf2-4"
    run_dump_test "bad-section-flag"
    run_dump_test "bad-size"
    run_dump_test "bad-group"

load_lib gas-dg.exp
dg-init
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/err-*.s $srcdir/$subdir/warn-*.s]] "" ""
dg-finish
    
}
