# Copyright 1998, 2000, 2001, 2002, 2003 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 "*-*-cygwin*"] then {
        set link-flags "--entry _start"
    }
}
if [istarget "m32r*-*"] then {
    set asm-arch m32r
}
if [istarget "m6811-*-*"] then {
    set asm-arch m68hc11
    set asm-flags "-mshort-double -m68hc11 -gdwarf2 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}"
}
if [istarget "m6812-*-*"] then {
    set asm-arch m68hc11
    set asm-flags "-mshort-double -m68hc12 -gdwarf2 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}"
}
if [istarget "mips*-*"] then {
    set asm-arch mips
}
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 srcfile1 asmsrc1.s
set srcfile2 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 ${srcdir}/${subdir}/${srcfile1} asmsrc1.o "${asm-flags}"] != ""} then {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
if {[target_assemble ${srcdir}/${subdir}/${srcfile2} 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" \
	"40\[ \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:45.*\#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 (foo2|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\\+0>:.*End of assembler dump." \
	"look at static function"

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