# Relocation test.
# This test is special because it exercises the linker's 

proc ld_test { objects ldflags dest test } {
    set ld_output [target_link $objects $dest $ldflags]
    if [string match "" $ld_output] then { pass $test } else { fail $test }
}


proc objdump_test { exec flags dest test } {
    set objcopy [find_binutils_prog objdump]
    verbose -log "$objcopy $flags $exec > $dest"
    catch "exec $objcopy $flags $exec > $dest" objdump_output
    if [string match "" $objdump_output] then { pass $test } else { fail $test }
}

proc regexp_test { file1 file2 test } {
    if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
}


global srcdir subdir
if [istarget ms1-*] {
    gas_test "relocs1.s" {-o relocs1.o} {} {assembling relocs1}

    #    gas_test "relocs2.s" {-o relocs2.o} {} {assembling relocs2}
    #    ld_test {relocs1.o relocs2.o} {} {relocs.x} {linking relocs.x}
    #    objdump_test {relocs.x} {-ds} {relocs.dump} {disassembling relocs.x}
    #    regexp_test {relocs.dump} "$srcdir/$subdir/relocs.d" {matching disassembly}

    gas_test "relocs2.s" {-o relocs2.o} {} {assembling relocs2}
    ld_test {relocs1.o relocs2.o} {} {relocs.x} {linking relocs.x}
    objdump_test {relocs.x} {-ds} {relocs.dump} {disassembling relocs.x}
    regexp_test {relocs.dump} "$srcdir/$subdir/relocs.d" {matching disassembly}
}
