# Relocation test.

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 microblaze*-*-*] {
    gas_test "reloc_strongsym.s" {-o reloc_strongsym.o} {} {assembling reloc_strongsym}
    gas_test "reloc_weaksym.s" {-o reloc_weaksym.o} {} {assembling reloc_weaksym}
    ld_test {reloc_strongsym.o reloc_weaksym.o} {-e 0 -section-start .text=0x10000054 -section-start .testsection=0x4} {reloc_sym.x} {linking reloc_sym.x}
    objdump_test {reloc_sym.x} {-d --section=.text --section=.testsection} {reloc_sym.dump} {disassembling reloc_sym.x}
    regexp_test {reloc_sym.dump} "$srcdir/$subdir/reloc_sym.d" {matching disassembly}
}
