# Copyright 2003-2012 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 3 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, see <http://www.gnu.org/licenses/>.

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


# 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 testfile "annota3"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}$EXEEXT

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
    untested annota3.exp
    return -1
}


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

# The commands we test here produce many lines of output; disable "press 
# <return> to continue" prompts.
gdb_test_no_output "set height 0"

#
# break at main
#

set main_line [gdb_get_line_number "break main"]

gdb_test "break main" \
    "Breakpoint.*at.* file .*$srcfile, line $main_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"
}

#
# if construct:
#
gdb_test_multiple "if 1" "start if construct" {
    -re "^if 1\r\n\r\n\032\032post-prompt\r\n\r\n\032\032pre-commands\r\n >\r\n\032\032commands\r\n$" {
	pass "start if construct"
    }
}

gdb_test_multiple "end" "end if construct" {
    -re "^end\r\n\r\n\032\032post-commands\r\n$gdb_prompt$" {
 	pass "end if construct"
    }
}

#
# info break:
#
send_gdb "info break\n" 
gdb_expect_list "breakpoint info" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "Num     Type           Disp Enb Address    +What\r\n" } [list \
    "1       breakpoint     keep y   0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:$main_line\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$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "Starting program: .*annota3(|\.exe) \r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032breakpoint 1\r\n"
    "\r\n"
    "Breakpoint 1, "
    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
    "main \\(\\) at .*annota3.c:$main_line\r\n"] [list \
    "\r\n\032\032source.*annota3.c:$main_line:.*: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"
	"\r\n"
	"Breakpoint 2, "
	"\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n"
	"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:
    #
    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 main" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n" } [list \
    "Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line $main_line.\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.

set value_inc_line [gdb_get_line_number "increment value"]

send_gdb "break $value_inc_line\n"
gdb_expect_list  "break at value++" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n" } [list \
    "Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line $value_inc_line.\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$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032breakpoint 5\r\n"
    "\r\n"
    "Breakpoint 5, "
    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
    "main \\(\\) at .*annota3.c:$value_inc_line\r\n"] [list \
    "\r\n\032\032source .*annota3.c:$value_inc_line:\[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"
}

set after_loop_line [gdb_get_line_number "after loop"]

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

# Get the inferior's PID for later.

set test "get inferior pid"
set pid -1
gdb_test_multiple "info inferior 1" "$test" {
    -re "process (\[0-9\]*).*$gdb_prompt$" {
	set pid $expect_out(1,string)
	pass "$test"
    }
}

#
# 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 test "cleanup core file"
if { [remote_file host exists core] } {
    remote_file host delete core
    pass "$test (removed)"
} elseif { $pid != -1 && [remote_file host exists core.$pid] } {
    remote_file host delete core.$pid
    pass "$test (removed)"
} else {
    pass "$test (not dumped)"
}

# restore the original prompt for the rest of the testsuite

set gdb_prompt $old_gdb_prompt
