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

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
    untested annota1.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.
#

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

#
# Escape all the characters in the path that need it. For instance 
# the directory name could contain '+'.
#
set escapedsrcfile [string_to_regexp ${srcdir}/${subdir}/${srcfile}]


#
# set the annotation level to 2
#
# of course, this will test:
# annotate-pre-prompt
# annotate-prompt
# annotate-post-prompt (in the next block)
#
send_gdb "set annotate 2\n" 
gdb_expect {
    -re "set annotate 2\r\n$gdb_prompt$" { pass "annotation set at level 2" }
    -re ".*$gdb_prompt$"       { fail "annotation set at level 2" }
    timeout	            { fail "annotation set at level 2 (timeout)" }
  }


#
# info break will test:
# annotate-breakpoints-headers
# annotate-field
# annotate-breakpoints-table
# annotate-record
# annotate-breakpoints-table-end
#
gdb_test_multiple "info break" "breakpoint info" {
    -re "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-headers\r\n\r\n\032\032field 0\r\nNum     \r\n\032\032field 1\r\nType           \r\n\032\032field 2\r\nDisp \r\n\032\032field 3\r\nEnb \r\n\032\032field 4\r\nAddress    +\r\n\032\032field 5\r\nWhat\r\n\r\n\032\032breakpoints-table\r\n\r\n\032\032record\r\n\r\n\032\032field 0\r\n1       \r\n\032\032field 1\r\nbreakpoint     \r\n\032\032field 2\r\nkeep \r\n\032\032field 3\r\ny   \r\n\032\032field 4\r\n$hex +\r\n\032\032field 5\r\nin main at ${escapedsrcfile}:$main_line\r\n\r\n\032\032breakpoints-table-end\r\n$gdb_prompt$" {
	pass "breakpoint info"
    }
    -re "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-headers\r\n\r\n\032\032field 0\r\nNum     \r\n\032\032field 1\r\nType           \r\n\032\032field 2\r\nDisp \r\n\032\032field 3\r\nEnb \r\n\032\032field 4\r\nAddress    +\r\n\032\032field 5\r\nWhat\r\n\r\n\032\032breakpoints-table\r\n\r\n\032\032record\r\n\r\n\032\032field 0\r\n1       \r\n\032\032field 1\r\nbreakpoint     \r\n\032\032field 2\r\nkeep \r\n\032\032field 3\r\ny   \r\n\032\032field 4\r\n$hex +\r\n\032\032field 5\r\nin main at .*${srcfile}:$main_line\r\n\r\n\032\032breakpoints-table-end\r\n$gdb_prompt$" {
	setup_xfail "*-*-*" 1270
	fail "breakpoint info"
    }
}


#
# run to a break point will test:
# annotate-frames-invalid
# annotate-breakpoints-invalid (a.k.a. breakpoints-changed)
# annotate-starting
# annotate-breakpoint
# annotate-frame-begin
# annotate-frame-function-name
# annotate-frame-args
# annotate-frame-source-begin
# annotate-frame-source-file
# annotate-frame-source-file-end
# annotate-frame-source-line
# annotate-frame-source-end
# annotate-source
# annotate-frame-end
# annotate-stopped
#
#exp_internal 1
set binexp [string_to_regexp $binfile]
gdb_test_multiple "run" "run until main breakpoint" {
    -re "\r\n\032\032post-prompt\r\nStarting program: $binexp \(\r\nwarning: Skipping \[^\r\n\]+ .gdb_index section in \[^\r\n\]+\)?\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)*\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota1.c\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped.*$gdb_prompt$" {
	pass "run until main breakpoint" 
    }
}
#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
#
gdb_test_multiple "next" "go after array init line" {
    -re "source .*annota1.c.*$gdb_prompt$" {
	pass "go after array init line"
    }
}


#
# printing the array will test:
# annotate-value-history-begin
# annotate-value-history-value
# annotate-array-section-begin
# annotate-elt
# FIXME: annotate-elt-rep and annotate-elt-rep-end not tested
# annotate-array-section-end
# annotate-value-history-end
# FIXME: annotate-value-begin and annotate-value-end not tested (the gdb output
#              command would cause them to be used)
#
gdb_test_multiple "print my_array" "print array" {
    -re "\r\n\032\032post-prompt\r\n\r\n\032\032value-history-begin 1 -\r\n.*= \r\n\032\032value-history-value\r\n.\r\n\032\032array-section-begin 0 -\r\n1\r\n\032\032elt\r\n, 2\r\n\032\032elt\r\n, 3\r\n\032\032elt\r\n\r\n\032\032array-section-end\r\n.\r\n\r\n\032\032value-history-end\r\n$gdb_prompt$" {
	pass "print array"
    }
}


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

#exp_internal 1
gdb_test_multiple "print non_existent_value" "print non_existent_value" {
    -re "\r\n\032\032post-prompt\r\n\r\n\032\032error-begin\r\nNo symbol \"non_existent_value\" in current context.\r\n\r\n\032\032error\r\n$gdb_prompt$" {
	pass "print non_existent_value"
    }
}


#
# break at signal handler. So that, once we are in the sig handler, if we do a bt
# we can test annotate-signal-handler-caller
#
gdb_test_multiple "break handle_USR1" "break handle_USR1" {
    -re  "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-invalid\r\nBreakpoint.*at $hex: file.*$srcfile, line.*\r\n$gdb_prompt$" {
	pass "break handle_USR1"
    }
}

#
# break at printf. When we are stopped at printf, we can test 
#
gdb_test_multiple "break printf" "break printf" {
    -re  "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-invalid\r\nBreakpoint.*at $hex.*$gdb_prompt$" {
	pass "break printf" 
    }
    -re  "\r\n\032\032post-prompt\r\nwarning: Breakpoint address adjusted from $hex to $hex.\r\n\r\n\032\032breakpoints-invalid\r\nBreakpoint.*at $hex.*$gdb_prompt$" {
	pass "break printf"
    }
}

#
# get to printf
#
set pat_begin "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n"
set pat_adjust "warning: Breakpoint 3 address previously adjusted from $hex to $hex.\r\n"
set pat_end "\r\n\032\032breakpoint 3\r\n\r\nBreakpoint 3, \r\n\032\032frame-begin 0 $hex\r\n\r\n(\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n)*.*\032\032frame-function-name\r\n.*printf(@.*)?\r\n\032\032frame-args\r\n.*\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$"

gdb_test_multiple "continue" "continue to printf" {
    -re "${pat_begin}($pat_adjust)?$pat_end" {
	pass "continue to printf"
    }
    -re ".*$gdb_prompt$"     { fail "continue to printf" }
}

#
# test:
# annotate-frame-where
# annotate-frame-address
# annotate-frame-address-end
#
set pat_begin "\r\n\032\032post-prompt\r\n\r\n\032\032frame-begin 0 $hex\r\n.0  \r\n(\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n)*\032\032frame-function-name\r\n.*printf(@.*)?\r\n\032\032frame-args\r\n \\(.*frame-end\r\n\r\n\032\032frame-begin 1 $hex\r\n.1  \r\n\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n"

set pat_end "\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032frame-end\r\n(\r\n\032\032frame-begin .*\r\n\r\n\032\032frame-end\r\n)*$gdb_prompt$"

gdb_test_multiple "backtrace" "backtrace from shlibrary" {
    -re "$pat_begin$escapedsrcfile$pat_end" {
	pass "backtrace from shlibrary"
    }
    -re "$pat_begin.*$srcfile$pat_end" {
	setup_xfail "*-*-*" 1270
	fail "backtrace from shlibrary"
    }
}


#
# test printing a frame with some arguments: 
# annotate-arg-begin
# annotate-arg-name-end
# annotate-arg-value
# annotate-arg-end
#

if [target_info exists gdb,nosignals] {
    unsupported "send SIGUSR1"
    unsupported "backtrace @ signal handler"
} else {
    gdb_test_multiple "signal SIGUSR1" "send SIGUSR1" {
	-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
	    pass "send SIGUSR1"
	}
	-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
	    setup_xfail "*-*-*" 1270
	    fail "send SIGUSR1"
	}
    }

    #
    # test:
    # annotate-signal-handler-caller
    #
    gdb_test_multiple "backtrace" "backtrace @ signal handler" {
	-re "frame-begin 0 $hex\r\n#0.*frame-end.*frame-begin 1 $hex\r\n#1.*(\032\032signal-handler-caller\r\n.signal handler called.\r\n\r\n)+\032\032frame-end\r\n\r\n\032\032frame-begin 2 $hex\r\n#2.*(frame-begin 3 $hex\r\n#3.*)*frame-end.*$gdb_prompt$" {
	    pass "backtrace @ signal handler"
	}
    }
}

#
# delete all the breakpoints
#
gdb_test_multiple "delete 1" "delete bp 1" {
    -re "\r\n\032\032post-prompt\r\n$gdb_prompt$" {
	pass "delete bp 1"
    }
}

gdb_test_multiple "delete 2" "delete bp 2" {
    -re "\r\n\032\032post-prompt\r\n$gdb_prompt$" {
	pass "delete bp 2"
    }
}

gdb_test_multiple "delete 3" "delete bp 3" {
    -re "\r\n\032\032post-prompt\r\n$gdb_prompt$" {
	pass "delete bp 3"
    }
}

#
# break at main, after value is initialized. This is in preparation
# to test the annotate output for the display command.
#
gdb_test_multiple "break main" "break at main" {
    -re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file ${escapedsrcfile}, line $main_line.*$gdb_prompt$" {
	pass "break at main"
    }
    -re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file .*${srcfile}, line $main_line.*$gdb_prompt$" {
	setup_xfail "*-*-*" 1270
	fail "break at main"
    }
}

#
# display the value; test:
# annotate-display-begin
# annotate-display-number-end
# annotate-display-format
# annotate-display-expression
# annotate-display-expression-end
# annotate-display-end
# FIXME: annotate-display-value not tested
#
gdb_test_multiple "display value" "set up display" {
    -re "post-prompt\r\n\r\n\032\032display-begin\r\n1\r\n\032\032display-number-end\r\n: \r\n\032\032display-format\r\n\r\n\032\032display-expression\r\nvalue\r\n\032\032display-expression-end\r\n = \r\n\032\032display-expression\r\n7\r\n\r\n\032\032display-end\r\n$gdb_prompt$" {
	pass "set up display"
    }
}


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

set value_inc_line [gdb_get_line_number "increment value"]

gdb_test_multiple "break $value_inc_line" "break at value++" {
    -re "Breakpoint 5 at $hex: file .*$srcfile, line $value_inc_line.*$gdb_prompt$" {
	pass "break at value++"
    }
}

gdb_test_multiple "ignore 5 4" "ignore 5 4" {
    -re "Will ignore next 4 crossings of breakpoint 5.*$gdb_prompt$" {
	pass "ignore 5 4"
    }
}

gdb_test_multiple "continue" "annotate ignore count change" {
    -re ".*$srcfile:$value_inc_line:.*\032\032stopped\r\n\r\n\032\032breakpoints-invalid\r\n$gdb_prompt$" {
	pass "annotate ignore count change"
    }
}

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

gdb_test_multiple "next" "next to exit loop" {
    -re "source .*annota1.c.*$gdb_prompt$" {
    }
}

set after_loop_line [gdb_get_line_number "after loop"]

gdb_test_multiple "next" "breakpoint ignore count" {
    -re ".*$srcfile:$after_loop_line:.*$gdb_prompt$" {
	pass "breakpoint ignore count"
    }
}

# 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; test:
# annotate-signalled
# annotate-signal-name
# annotate-signal-name-end
# annotate-signal-string
# annotate-signal-string-end
# FIXME: annotate-signal not tested (requires that the inferior be 
#                        stopped by a "random" signal)
#
# 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*
    gdb_test_multiple "signal SIGTRAP" "signal sent" {
	-re ".*\032\032post-prompt\r\nContinuing with signal SIGTRAP.\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032signalled\r\n\r\nProgram terminated with signal \r\n\032\032signal-name\r\nSIGTRAP\r\n\032\032signal-name-end\r\n, \r\n\032\032signal-string\r\nTrace.breakpoint trap\r\n\032\032signal-string-end\r\n.\r\nThe program no longer exists.\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
	    pass "signal sent"
	}
    }
}

# 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)"
}

proc thread_test {} {
    global objdir subdir srcdir testfile
    global gdb_prompt old_gdb_prompt
    set srcfile watch_thread_num.c
    set binfile ${objdir}/${subdir}/${testfile}-watch_thread_num
    set gdb_prompt $old_gdb_prompt

    if { ![get_compiler_info ${binfile}] && [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] == "" } {

	gdb_exit
	gdb_start
	gdb_reinitialize_dir $srcdir/$subdir
	gdb_load ${binfile}
	if { ![runto main] } then {
	    fail "run to main"
	    return
	}

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

	gdb_test_multiple "set annotate 2" "" {
	    -re "set annotate 2\r\n$gdb_prompt$" {
	    }
	}

	gdb_test_multiple "next 2" "new thread" {
	    -re ".*\032\032new-thread" {
		pass "new thread"
	    }
	}
    }
}

proc thread_switch {} {
    gdb_test_multiple "thread 1" "thread switch" {
	-re ".*\032\032thread-changed" {
	    pass "thread switch"
	}
    }
}

thread_test
thread_switch

# restore the original prompt for the rest of the testsuite

set gdb_prompt $old_gdb_prompt
