# Copyright 1998, 2000, 2002 Free Software Foundation, Inc.
# 
# 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 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.  
# 
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
#
# This file was written by Kendra.

if $tracelevel then {
    strace $tracelevel
}

#
# Test debugging assembly level programs.
# This file uses asmsrc[12].s for input.
#

set prms_id 0
set bug_id 0

set asm-arch ""
set asm-flags ""
set link-flags ""

if [istarget "*arm-*-*"] then {
    set asm-arch arm
}
if [istarget "xscale-*-*"] then {
    set asm-arch arm
}
if [istarget "d10v-*-*"] then {
    set asm-arch d10v
}
if [istarget "s390-*-*"] then {
    set asm-arch s390
}
if [istarget "x86_64-*-*"] then {
    set asm-arch x86_64
    set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
}
if [istarget "i\[3456\]86-*-*"] then {
    set asm-arch i386
}
if [istarget "m32r*-*"] then {
    set asm-arch m32r
}
if [istarget "powerpc*-*"] then {
    set asm-arch powerpc
}
if [istarget "sparc-*-*"] then {
    set asm-arch sparc
}
if [istarget "sparc64-*-*"] then {
    set asm-arch sparc64
    set asm-flags "-xarch=v9 -gstabs -I${srcdir}/${subdir} -I${objdir}/${subdir}"
}
if [istarget "xstormy16-*-*"] then {
    set asm-arch xstormy16
    set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
}
if [istarget "v850-*-*"] then {
    set asm-arch v850
    set gdb_wrapper_initialized 1
}
if { "${asm-arch}" == "" } {
    gdb_suppress_entire_file "Assembly source test -- not implemented for this target."
}

# Watch out, we are invoking the assembler, but the testsuite sets multilib
# switches according to compiler syntax.  If we pass these options straight
# to the assembler, they won't always make sense.  If we don't pass them to
# the assembler, the final link will complain that the object files were
# built with different defaults.  So no matter what we do, we lose.  We may as
# well get out of this test sooner rather than later.
set dest [target_info name]
if [board_info $dest exists multilib_flags] {
	set multilib_flags [board_info $dest multilib_flags]
	if { "${multilib_flags}" != "" } {
	   gdb_suppress_entire_file "Assembly source test -- multilibs not supported by this test."
	   return;
	 }
}

set testfile "asm-source"
set binfile ${objdir}/${subdir}/${testfile}
set src1 ${srcdir}/${subdir}/asmsrc1.s
set src2 ${srcdir}/${subdir}/asmsrc2.s

remote_exec build "rm -f ${subdir}/arch.inc"
remote_download host ${srcdir}/${subdir}/${asm-arch}.inc ${subdir}/arch.inc

if { "${asm-flags}" == "" } {
    #set asm-flags "-Wa,-gstabs,-I${srcdir}/${subdir},-I${objdir}/${subdir}"
    set asm-flags "-gstabs -I${srcdir}/${subdir} -I${objdir}/${subdir}"
}

if {[target_assemble ${src1} asmsrc1.o "${asm-flags}"] != ""} then {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
if {[target_assemble ${src2} asmsrc2.o "${asm-flags}"] != ""} then {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

set opts "debug ldflags=-nostartfiles"
foreach i ${link-flags} {
    append opts " ldflags=$i"
}
if { [gdb_compile "asmsrc1.o asmsrc2.o" "${binfile}" executable $opts] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

remote_exec build "mv asmsrc1.o asmsrc2.o ${objdir}/${subdir}"


gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

#
# Run to `main' where we begin our tests.
#

if ![runto_main] then {
    gdb_suppress_tests
}

# Execute the `f' command and see if the result includes source info.
gdb_test "f" "asmsrc1\[.\]s:29.*several_nops" "f at main"

# See if we properly `next' over a macro with several insns.
gdb_test "n" "33\[ 	\]*.*foo2" "next over macro"

# See if we can properly `step' into a subroutine call.
gdb_test "s" "8\[ 	\]*.*" "step into foo2"

# Test 'info target', and incidentally capture the entry point address.
set entry_point 0
send_gdb "info target\n"
gdb_expect {
    -re "Symbols from .*asm-source.*Entry point: 0x(\[01232456789abcdefABCDEF\]+).*$gdb_prompt $" {
	set entry_point $expect_out(1,string)
	pass "info target"
    }
    -re ".*$gdb_prompt $" {
	fail "info target"
    }
    timeout {
	fail "info target (timeout)"
    }
}

# Capture the start symbol (may be '_start' or 'start')
set entry_symbol ""
send_gdb "info symbol 0x$entry_point\n"
gdb_expect {
    -re "info symbol 0x$entry_point\[\r\n\]+(\[^\r\n\]*) in section .*$gdb_prompt $" {
        # We match the echoed `info symbol' command here, to help us
        # reliably identify the beginning of the start symbol in the
        # command's output.  You might think we could just use '^' to
        # start matching at the beginning of the line, but
        # unfortunately, in Expect, '^' matches the beginning of the
        # input that hasn't been matched by any expect clause yet.  If
        # every expect clause consumes a complete line, along with its
        # terminating CR/LF, this is equivalent to the beginning of a
        # line.  But expect clauses that end with `.*' will consume as
        # much as happened to arrive from the TTY --- exactly where
        # they leave you depends on inter-process timing.  :(
	set entry_symbol $expect_out(1,string)
	pass "info symbol"
    }
    -re ".*$gdb_prompt $" {
	fail "info symbol"
    }
    timeout {
	fail "info symbol (timeout)"
    }
}

# Now try a 'list' from the other source file.
gdb_test "list $entry_symbol" ".*gdbasm_startup.*" "list"

# Now try a source file search
gdb_test "search A routine for foo2 to call" \
	"39\[ \t\]+comment \"A routine for foo2 to call.\"" "search"

# See if `f' prints the right source file.
gdb_test "f" ".*asmsrc2\[.\]s:8.*" "f in foo2"

# `next' one insn (or macro) to set up our stackframe (for the following bt).
gdb_test "n" "12\[ 	\]*.*foo3" "n in foo2"

# See if a simple `bt' prints the right source files and 
# doesn't fall off the stack.

gdb_test "bt 10" \
	"\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33(.*\#2.*start\[^\r\n\]*)?" \
	"bt ALL in foo2"

# See if a capped `bt' prints the right source files.
gdb_test "bt 2" "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33.*" "bt 2 in foo2"

# Step into another subroutine which lives back in the first source file.
gdb_test "s" "" "s 2"

# Next over insns to set up the stack frame.
gdb_test "n" "" "n 2"

# Now see if a capped `bt' is correct.
gdb_test "bt 3" "\#0.*foo3.*asmsrc1\[.\]s:44.*\#1.*foo2.*asmsrc2\[.\]s:12.*\#2.*main.*asmsrc1\[.\]s:33.*" "bt 3 in foo3"

# Try 'info source' from asmsrc1.s
gdb_test "info source" \
	"Current source file is .*asmsrc1.s.*Source language is asm.*" \
	"info source asmsrc1.s"

# Try 'finishing' from foo3
gdb_test "finish" "Run till exit from.*\[\r\n\]13\[ \t\]+gdbasm_call foo3" \
	"finish from foo3"

# Try 'info source' from asmsrc2.s
gdb_test "info source" \
	"Current source file is .*asmsrc2.s.*Source language is asm.*" \
	"info source asmsrc2.s"

# Try 'info sources'.  This can produce a lot of output on systems
# with dynamic linking, where the system's shared libc was compiled
# with debugging info; for example, on Linux, this produces 47kb of
# output.  So we consume it as we go.
send_gdb "info sources\n"
set seen_asmsrc_1 0
set seen_asmsrc_2 0
gdb_expect {
    -re "^\[^,\]*asmsrc1.s(, |\[\r\n\]+)" {
        set seen_asmsrc_1 1
        exp_continue
    }
    -re "^\[^,\]*asmsrc2.s(, |\[\r\n\]+)" {
        set seen_asmsrc_2 1
        exp_continue
    }
    -re ", " { 
        exp_continue
    }
    -re "$gdb_prompt $" {
        if {$seen_asmsrc_1 && $seen_asmsrc_2} {
            pass "info sources"
        } else {
            fail "info sources"
        }
    }
    timeout {
            fail "info sources (timeout)"
    }
}
        

# Try 'info line'
gdb_test "info line" \
	"Line 13 of.*asmsrc2.s.*starts at.*<foo2+.*> and ends at.*<foo2+.*>." \
	"info line"

# Try 'nexting' over next call to foo3
gdb_test "next" "17\[ \t\]+gdbasm_leave" "next over foo3"

# Try 'return' from foo2
gdb_test "return" "\#0  main .*37\[ \t\]+gdbasm_exit0" "return from foo2" \
	"Make selected stack frame return now\?.*" "y"

# See if we can look at a global variable
gdb_test "print globalvar" ".* = 11" "look at global variable"

# See if we can look at a static variable
gdb_test "print staticvar" ".* = 5" "look at static variable"

# See if we can look at a static function
gdb_test "disassem foostatic" ".*<foostatic>:.*End of assembler dump." \
	"look at static function"

remote_exec build "rm -f ${subdir}/arch.inc"
