# Expect script for DWARF relocation test.
#   Copyright 2008  Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
#

#
# Written by Jan Kratochvil (jan.kratochvil@redhat.com)
#
# Test PR ld/3290 Comment 8+9.  DW_FORM_ref_addr used in dwarfreloc2.s was left
# unrelocated as its target symbol from dwarfreloc1.s became LOCAL due to its
# `ld -r'.
#
#  <1><57>: Abbrev Number: 2 (DW_TAG_variable)
#     <58>   DW_AT_name        : i2	
#  ...
#     <5d>   DW_AT_type        : <0x32>	
# vs.
#     <5d>   DW_AT_type        : <0x0>	

# Only the testcase .s files are arch-dependent, the relocations are cross-arch.
if { !([istarget "x86_64-*-elf*"]
       || [istarget "x86_64-*-linux*"]) } {
    return
}

set build_tests_ld {
  {"Build dwarfreloc1x.o"
   "-r" ""
   {dwarfreloc1.s} {} "dwarfreloc1x.o"}
  {"Build dwarfreloc2.o"
   "-r" ""
   {dwarfreloc2.s} {} "dwarfreloc2x.o"}
}

run_ld_link_tests $build_tests_ld

set testname "Link dwarfreloc1x.o and dwarfreloc2x.o to dwarfreloc.o"
if [ld_simple_link $ld "tmpdir/dwarfreloc.o" "-r tmpdir/dwarfreloc1x.o tmpdir/dwarfreloc2x.o"] {
    pass $testname
} else {
    fail $testname
}

# The code is copied from `ld-lib.exp'.  We cannot use the functions there as
# they expect source (.s or .c) files while we to check a `ld -r' output (.o).

set testname "Check dwarfreloc.o readelf"
set dumpfile "dwarfreloc.rd"
set cmd "$READELF --debug-dump=info tmpdir/dwarfreloc.o"
set status [remote_exec host [concat sh -c [list "$cmd >dump.out 2>ld.stderr"]] "" "/dev/null"]
send_log "$cmd\n"
remote_upload host "ld.stderr"
set comp_output [prune_warnings [file_contents "ld.stderr"]]
remote_file host delete "ld.stderr"
remote_file build delete "ld.stderr"

if ![string match "" $comp_output] then {
    send_log "$comp_output\n"
    fail $testname
} else {
    remote_upload host "dump.out"
    if { [regexp_diff "dump.out" "$srcdir/$subdir/$dumpfile"] } then {
	verbose "output is [file_contents "dump.out"]" 2
	fail $testname
    } else {
	pass $testname
    }
    remote_file build delete "dump.out"
    remote_file host delete "dump.out"
}
