#
# elf tests
#

proc run_list_test { name suffix opts } {
    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 { [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 > 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 "sparc*-*-solaris*"]
      || [istarget "mips*-*-irix6*"])
     && ![istarget *-*-linux*aout*]
     && ![istarget *-*-linux*coff*]
     && ![istarget *-*-linux*oldld*]
} then {
    set target_machine ""
    if [istarget "mips*-*-*"] then {
	set target_machine -mips
    }
    run_dump_test "ehopt0"
    run_dump_test "section0" 
    run_dump_test "section1" 
    run_list_test "section2" "$target_machine" "-al"
}
