# Copyright 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.  

# This file was written by Elena Zannoni (ezannoni@cygnus.com)

if $tracelevel then {
    strace $tracelevel
}


# are we on a target board? If so, don't run these tests.
# note: this is necessary because we cannot use runto_main (which would
# work for remote targets too) because of the different prompt we get
# when using annotation level 2.
#
if [is_remote target] then {
    return 0
}


#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile "annota3"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}


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

if [target_info exists gdb_stub] {
    gdb_step_for_stub;
}

#
# the line at which break main will put the breakpoint
#
set main_line 32

# The commands we test here produce many lines of output; disable "press 
# <return> to continue" prompts.
send_gdb "set height 0\n"
gdb_expect -re "$gdb_prompt $"

#
# break at main
#
gdb_test "break main" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "breakpoint main"


# NOTE: this prompt is OK only when the annotation level is > 1

# NOTE: When this prompt is in use the gdb_test procedure cannot be
# used because it assumes that the last char after the gdb_prompt is a
# white space. This is not true with this annotated prompt. So we must
# use send_gdb and gdb_expect or gdb_expect_list.

set old_gdb_prompt $gdb_prompt
set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"



#
# set the annotation level to 3
#
# of course, this will test:
# annotate-pre-prompt
# annotate-prompt
# annotate-post-prompt (in the next block)
#
send_gdb "set annotate 3\n" 
gdb_expect_list "annotation set at level 3" "\r\n$gdb_prompt$" {
    "set annotate 3"
}


#
# info break:
#
send_gdb "info break\n" 
gdb_expect_list "breakpoint info" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Num Type           Disp Enb Address    +What\r\n"
    "1   breakpoint     keep y   0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:32\r\n"
}


#
# run to a break point will test:
#
#exp_internal 1
send_gdb "run\n"
gdb_expect_list "run until main breakpoint" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Starting program: .*annota3 \r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032breakpoint 1\r\n"
    "\r\n"
    "Breakpoint 1, main \\(\\) at .*annota3.c:32\r\n"
    "\r\n\032\032source.*annota3.c:32:.*:beg:0x\[0-9a-z\]+\r\n"
    "\r\n\032\032stopped\r\n"
}
#exp_internal 0
#exit 0

#
# Let's do a next, to get to a point where the array is initialized
# We don't care about the annotated output for this operation, it is the same as
# the one produced by run above
#
send_gdb "next\n" 
gdb_expect_list "go after array init line" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    "\r\n\032\032stopped\r\n"
}


#
# printing the array:
#
send_gdb "print my_array\n"
gdb_expect_list "print array" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    ".*= .1, 2, 3.\r\n"
}


#
# this should generate an error message, so to test:
# annotate-error-begin
# FIXME: annotate-error not tested
#

#exp_internal 1
send_gdb "print non_existent_value\n"
gdb_expect_list "print non_existent_value" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032error-begin\r\n"
    "No symbol \"non_existent_value\" in current context.\r\n"
    "\r\n\032\032error\r\n"
}


#
# break at signal handler
#
send_gdb "break handle_USR1\n"
gdb_expect_list "breakpoint handle_USR1" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Breakpoint.*at 0x\[0-9a-z\]+: file.*annota3.c, line.*\r\n"
}

#
# break at printf. When we are stopped at printf, we can test 
#
send_gdb "break printf\n"
gdb_expect_list "breakpoint printf" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Breakpoint.*at 0x\[0-9a-z\]+.*"
}

#
# get to printf
#
send_gdb "continue\n"
gdb_expect_list "continue to printf" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Continuing.\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032breakpoint 3\r\n"
    "\r\n"
    "Breakpoint 3, \[^\r\n\]*\r\n"
    "\r\n\032\032stopped\r\n"
}

send_gdb "backtrace\n"
gdb_expect_list "backtrace from shlibrary" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "#0 .* printf \[^\r\n\]*\r\n"
    "#1 .* main \[^\r\n\]*\r\n"
}


#
# test printing a frame with some arguments: 
#

if [target_info exists gdb,nosignals] {
    unsupported "send SIGUSR1"
    unsupported "backtrace @ signal handler"
} else {
    send_gdb "signal SIGUSR1\n"
    gdb_expect_list "send SIGUSR1" "$gdb_prompt$" {
	"\r\n\032\032post-prompt\r\n"
	"Continuing with signal SIGUSR1.\r\n"
	"\r\n\032\032starting\r\n"
	"\r\n\032\032breakpoint 2\r\n"
	"Breakpoint 2, handle_USR1 \\(sig=\[0-9\]+\\) at .*annota3.c:\[0-9\]+\r\n"
	"\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
	"\r\n\032\032stopped\r\n"
    }

    #
    # test:
    #
    verbose "match_max local is: [match_max]"
    verbose "match_max default is: [match_max -d]"
    # This is necessary because a 2000 buffer is not enought to get everything
    # up to the prompt ad the test gets a timeout.
    match_max 3000
    verbose "match_max now is: [match_max]"
    send_gdb "backtrace\n"
    gdb_expect_list "backtrace @ signal handler" "$gdb_prompt$" {
	"#0 +handle_USR1 \[^\r\n\]+\r\n"
	"#1 +.signal handler called.\r\n"
	"#2 .* printf \[^\r\n\]+\r\n"
	"#3 .* main \[^\r\n\]+\r\n"
    }
}

#
# delete all the breakpoints
#
send_gdb "delete 1\n"
gdb_expect_list "delete bp 1" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
}

send_gdb "delete 2\n"
gdb_expect_list "delete bp 2" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
}

send_gdb "delete 3\n"
gdb_expect_list "delete bp 3" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
}

#
# break at main, after value is initialized. This is in preparation
# to test the annotate output for the display command.
#
send_gdb "break main\n"
gdb_expect_list "break at 28" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line 32.\r\n"
}

#
# display the value
#
send_gdb "display value\n"
gdb_expect_list "set up display" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "1: value = 7\r\n"
}


# should ask query. Test annotate-query.
# we don't care about anything else here, only the query.

send_gdb "run\n"
gdb_expect {
  -re "pre-query.*already.*\\(y or n\\).*query\r\n" {
         send_gdb "y\n"
         gdb_expect {
	     -re ".*post-query.*$gdb_prompt$" \
		     { pass "re-run" }
	     -re ".*$gdb_prompt$"  { fail "re-run" }
	     timeout { fail "re-run (timeout)" }
	 }
     }
  -re ".*$gdb_prompt$"  { fail "re-run" }
  timeout { fail "re-run (timeout)" }
}

#
# Test that breakpoints-invalid is issued once and only once for
# breakpoint ignore count changes, after annotation stopped.
# NOTE: breakpoints-invalid annotations have been removed from
# level 3 but keep these tests for continuity and comparison
# with annota1.exp.
send_gdb "break 46\n"
gdb_expect_list  "break at 46" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line 46.\r\n"
}

send_gdb "ignore 5 4\n"
gdb_expect_list "ignore 5 4" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Will ignore next 4 crossings of breakpoint 5"
    "\r\n"
}

send_gdb "continue\n"
gdb_expect_list "annotate ignore count change" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032breakpoint 5\r\n"
    "Breakpoint 5, main \\(\\) at .*annota3.c:46\r\n"
    "\r\n\032\032source .*annota3.c:46:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    "1: value = 11\r\n"
    "\r\n\032\032stopped\r\n"
}

# check that ignore command is working, or the above can provide
# misleading assurance ...

send_gdb "next\n"
gdb_expect_list "next to exit loop" "$gdb_prompt$"  {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032source.*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    "1: value = 12\r\n"
    "\r\n\032\032stopped\r\n"
}

send_gdb "next\n"
gdb_expect_list "breakpoint ignore count" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032source.*annota3.c:49:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    "1: value = 12\r\n"
    "\r\n\032\032stopped\r\n"
}

#
# Send a signal that is not handled
#
# SIGTRAP signals are dropped before they get to the inferior process
# on hpux11.  In theory, this behaivor can be controlled by setting
# TTEO_NORM_SIGTRAP in the inferior, but doing so did not cause
# the signal to be properly delivered.
#
# It has been verified that other signals will be delivered.  However,
# rather than twiddle the test, I choose to leave it as-is as it
# exposes an interesting failure on hpux11.

if [target_info exists gdb,nosignals] {
    unsupported "signal sent"
} else {
    setup_xfail hppa*-*-hpux11*
    send_gdb "signal SIGTRAP\n"
    gdb_expect_list "signal sent" "$gdb_prompt$" {
	"\r\n\032\032post-prompt\r\n"
	"Continuing with signal SIGTRAP.\r\n"
	"\r\n\032\032starting\r\n"
	"\r\n\032\032signalled\r\n"
	"\r\nProgram terminated with signal SIGTRAP, Trace.breakpoint trap.\r\n"
	"The program no longer exists.\r\n"
	"\r\n\032\032stopped\r\n"
    }
}


# Check for production of a core file and remove it!

set exec_output [remote_exec build "ls core"]

set test "cleanup core file"
if [ regexp "core not found" $exec_output]  {
    pass "$test (not dumped)"
} else {
    if [ regexp "No such file or directory" $exec_output] {
	pass "$test (not dumped)"
    } else {
	remote_exec build "rm -f core"
	pass "$test (removed)"
    }
}

# restore the original prompt for the rest of the testsuite

set gdb_prompt $old_gdb_prompt
