# Expect script for LD section checks tests
#   Copyright (C) 1999 Free Software Foundation
#
# This file 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Written by Nick Clifton (nickc@cygnus.com)

proc section_check {} {
    global ld_flags
    global as
    global ld
    global srcdir
    global subdir
    
    set test "check sections 1"
    
    set ldflags "--check-sections"

    if { ![ld_assemble $as $srcdir/$subdir/asm.s tmpdir/asm.o]} {
	unresolved $test
	return
    }

    if ![ld_simple_link $ld tmpdir/asm.x "$ldflags tmpdir/asm.o"] {
	fail $test
    } else {
	pass $test
    }

    set test "check sections 2"

    # Change the linker flags so that our "buggy" linker
    # script is used.
    set ldflags "--check-sections -T $srcdir/$subdir/script -e foo"

    # Perform the equivalent of invoking ld_simple_link
    # except that we need to massage the output futher.
    
    catch "exec $ld -o tmpdir/asm.x $ldflags tmpdir/asm.o" exec_output
    set exec_output [prune_warnings $exec_output]

    # Make sure that we got some output from the linker
    if [string match "" $exec_output] then {
	fail $test
    } 

    # Now remove our expected error message
    regsub -all ".*: section .data .* overlaps section .text .*" $exec_output "" exec_output

    # And check to see if anything else, (unexpected) was left
    if [string match "" $exec_output] then {
	pass $test
    } else {
	verbose -log "Unexpected linker message(s): $exec_output"
	fail $test
    }
}

section_check


