# Copyright 1998, 2000, 2001, 2002, 2003, 2004 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-note "empty"
set asm-flags ""
set link-flags "--entry _start"

switch -glob -- [istarget] {
    "alpha*-*-*" {
        set asm-arch alpha
	# ??? Won't work with ecoff systems like Tru64, but then we also
	# don't have any other -g flag that creates mdebug output.
        set asm-flags "-gdwarf2 -no-mdebug -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "*arm-*-*" {
        set asm-arch arm
    }
    "xscale-*-*" {
        set asm-arch arm
    }
    "d10v-*-*" {
        set asm-arch d10v
    }
    "frv-*-*" {
	set asm-arch frv
    }
    "s390-*-*" {
        set asm-arch s390
    }
    "s390x-*-*" {
        set asm-arch s390x
    }
    "x86_64-*-*" {
        set asm-arch x86_64
        set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "i\[3456\]86-*-*" {
        set asm-arch i386
    }
    "m32r*-*" {
        set asm-arch m32r
        append link-flags "--whole-archive -lgloss --no-whole-archive"
    }
    "m6811-*-*" {
        set asm-arch m68hc11
        set asm-flags "-mshort-double -m68hc11 -gdwarf2 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "m6812-*-*" {
        set asm-arch m68hc11
        set asm-flags "-mshort-double -m68hc12 -gdwarf2 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "mips*-*" {
        set asm-arch mips
    }
    "powerpc*-*" {
        set asm-arch powerpc
    }
    "sh*-*-*" {
        set asm-arch sh
        set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "sparc-*-*" {
        set asm-arch sparc
    }
    "sparc64-*-*" {
        set asm-arch sparc64
        set asm-flags "-xarch=v9 -gstabs -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "xstormy16-*-*" {
        set asm-arch xstormy16
        set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "v850-*-*" {
        set asm-arch v850
        set gdb_wrapper_initialized 1
    }
    "m68k-*-*" {
        set asm-arch m68k
    }
    "ia64-*-*" {
        set asm-arch ia64
        set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
    "hppa*-linux-*" {
        set asm-arch pa
        set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
    }
}

if { "${asm-arch}" == "" } {
    gdb_suppress_entire_file "Assembly source test -- not implemented for this target."
}

# On NetBSD/ELF we need a special NetBSD-identifying note section.
if { [istarget "*-*-netbsdelf*"]
     || [istarget "x86_64-*-netbsd*"] } then {
    set asm-note "netbsd"
}

# On OpenBSD/ELF we need a similar note section.  We make no attempt
# of handing a.out here since most OpenBSD/a.out systems use a rather
# outdated assembler that doesn't assemble this test's code anyway.
if { [istarget "*-*-openbsd*"] } then {
    set asm-note "openbsd"
}

# 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
remote_exec build "rm -f ${subdir}/note.inc"
remote_download host ${srcdir}/${subdir}/${asm-note}.inc ${subdir}/note.inc

if { "${asm-flags}" == "" } {
    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."
}

# We deliberately don't use gdb_compile here to link together the
# assembled object files.  Using gdb_compile, and therefore the C
# compiler, is conceptually wrong, since we're testing raw assembler
# code here that provides its own startup code.  Using target_link
# also avoids a lot of problems on many systems, most notably on
# *-*-*bsd* and *-*-solaris2*.
if {[target_link "asmsrc1.o asmsrc2.o" "${binfile}" ${link-flags}] != "" } then {
     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" \
	"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"

# Disassemble something, check the output
proc test_dis { command var } {
    global gdb_prompt
    send_gdb "${command}\n"
    gdb_expect {
	-re "${var}.*:.*(Cannot access|Bad address)" {
	    # The "disassembler" was only accessing the local
	    # executable and that would cause attempts to disassemble
	    # variables to fail (memory not valid).
	    fail "${command} (memory read error)"
	}
	-re "${var}.*:.*${gdb_prompt}" {
	    pass "${command}"
	}
	timeout {
	    fail "${command} (timeout)"
	}
    }
}

# See if we can look at a global variable, three ways
gdb_test "print globalvar" ".* = 11" "look at global variable"
test_dis "x/i &globalvar" "globalvar"
test_dis "disassem &globalvar &globalvar+1" "globalvar"

# See if we can look at a static variable, three ways
gdb_test "print staticvar" ".* = 5" "look at static variable"
test_dis "x/i &staticvar" "staticvar"
test_dis "disassem &staticvar &staticvar+1" "staticvar"

# 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"
remote_exec build "rm -f ${subdir}/note.inc"
