2013-01-01 07:33:28 +01:00
# Copyright 1999-2013 Free Software Foundation, Inc.
1999-05-05 23:45:13 +02:00
# 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
2007-08-23 20:14:19 +02:00
# the Free Software Foundation; either version 3 of the License, or
1999-05-05 23:45:13 +02:00
# (at your option) any later version.
2007-08-23 20:14:19 +02:00
#
1999-05-05 23:45:13 +02:00
# 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.
2007-08-23 20:14:19 +02:00
#
1999-05-05 23:45:13 +02:00
# You should have received a copy of the GNU General Public License
2007-08-23 20:14:19 +02:00
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1999-05-05 23:45:13 +02:00
# This file was written by Elena Zannoni (ezannoni@cygnus.com)
2001-03-08 22:09:23 +01:00
# 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.
#
2002-02-14 07:25:19 +01:00
if [is_remote target] then {
2001-03-08 22:09:23 +01:00
return 0
}
1999-05-05 23:45:13 +02:00
#
# test running programs
#
set testfile "annota1"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
2006-03-07 16:23:33 +01:00
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
2006-08-10 07:27:22 +02:00
untested annota1.exp
return -1
1999-05-05 23:45:13 +02:00
}
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.
2010-05-26 20:05:25 +02:00
gdb_test_no_output "set height 0"
1999-05-05 23:45:13 +02:00
#
# break at main
#
2012-02-28 23:40:48 +01:00
set main_line [gdb_get_line_number "break main"]
1999-05-05 23:45:13 +02:00
gdb_test "break main" \
2012-02-28 23:40:48 +01:00
"Breakpoint.*at.* file .*$srcfile, line $main_line\\." \
1999-05-05 23:45:13 +02:00
"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"
2003-07-09 15:19:08 +02:00
#
# 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}]
1999-05-05 23:45:13 +02:00
#
# 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
#
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
#
# 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
#
1999-05-25 20:09:09 +02:00
#exp_internal 1
2006-10-12 21:03:22 +02:00
set binexp [string_to_regexp $binfile]
2010-05-26 20:05:25 +02:00
gdb_test_multiple "run" "run until main breakpoint" {
2012-08-02 17:59:59 +02:00
-re "\r\n\032\032post-prompt\r\nStarting program: $binexp \(\r\nwarning: Skipping \[^\r\n\]+ .gdb_index section in \[^\r\n\]+\r\nDo \"set use-deprecated-index-sections on\" before the file is read\r\nto use the section anyway\\.\)?\(\(\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$" {
2000-06-12 22:34:00 +02:00
pass "run until main breakpoint"
}
2010-05-26 20:05:25 +02:00
}
1999-05-25 20:09:09 +02:00
#exp_internal 0
#exit 0
1999-05-05 23:45:13 +02:00
#
# 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
#
2010-05-26 20:05:25 +02:00
gdb_test_multiple "next" "go after array init line" {
-re "source .*annota1.c.*$gdb_prompt$" {
pass "go after array init line"
}
1999-05-05 23:45:13 +02:00
}
#
# 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)
#
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
#
# this should generate an error message, so to test:
# annotate-error-begin
# FIXME: annotate-error not tested
#
#exp_internal 1
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
#
# 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
#
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
#
# break at printf. When we are stopped at printf, we can test
#
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
#
# get to printf
#
2009-06-17 20:32:40 +02:00
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"
2006-12-31 21:01:25 +01:00
set pat_adjust "warning: Breakpoint 3 address previously adjusted from $hex to $hex.\r\n"
2008-05-16 14:48:08 +02:00
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$"
2005-04-27 23:45:16 +02:00
2006-12-31 21:01:25 +01:00
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" }
1999-05-05 23:45:13 +02:00
}
#
# test:
# annotate-frame-where
# annotate-frame-address
# annotate-frame-address-end
#
2008-05-16 14:48:08 +02:00
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"
2010-05-26 20:05:25 +02:00
2006-12-31 21:01:25 +01:00
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$"
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
#
# test printing a frame with some arguments:
# annotate-arg-begin
# annotate-arg-name-end
# annotate-arg-value
# annotate-arg-end
#
2004-07-20 02:24:41 +02:00
if [target_info exists gdb,nosignals] {
unsupported "send SIGUSR1"
unsupported "backtrace @ signal handler"
} else {
2010-05-26 20:05:25 +02:00
gdb_test_multiple "signal SIGUSR1" "send SIGUSR1" {
2011-04-27 19:08:42 +02:00
-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$" {
2010-05-26 20:05:25 +02:00
pass "send SIGUSR1"
}
2011-04-27 19:08:42 +02:00
-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$" {
2010-05-26 20:05:25 +02:00
setup_xfail "*-*-*" 1270
fail "send SIGUSR1"
}
2004-07-20 02:24:41 +02:00
}
1999-05-05 23:45:13 +02:00
2004-07-20 02:24:41 +02:00
#
# test:
# annotate-signal-handler-caller
#
2010-05-26 20:05:25 +02:00
gdb_test_multiple "backtrace" "backtrace @ signal handler" {
2004-07-20 02:24:41 +02:00
-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"
}
2000-05-24 19:14:50 +02:00
}
1999-05-05 23:45:13 +02:00
}
#
# delete all the breakpoints
#
2010-05-26 20:05:25 +02:00
gdb_test_multiple "delete 1" "delete bp 1" {
-re "\r\n\032\032post-prompt\r\n$gdb_prompt$" {
pass "delete bp 1"
}
1999-05-05 23:45:13 +02:00
}
2010-05-26 20:05:25 +02:00
gdb_test_multiple "delete 2" "delete bp 2" {
-re "\r\n\032\032post-prompt\r\n$gdb_prompt$" {
pass "delete bp 2"
}
1999-05-05 23:45:13 +02:00
}
2010-05-26 20:05:25 +02:00
gdb_test_multiple "delete 3" "delete bp 3" {
-re "\r\n\032\032post-prompt\r\n$gdb_prompt$" {
pass "delete bp 3"
}
1999-05-05 23:45:13 +02:00
}
#
# break at main, after value is initialized. This is in preparation
# to test the annotate output for the display command.
#
2012-02-28 23:40:48 +01:00
gdb_test_multiple "break main" "break at main" {
2010-05-26 20:05:25 +02:00
-re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file ${escapedsrcfile}, line $main_line.*$gdb_prompt$" {
2012-02-28 23:40:48 +01:00
pass "break at main"
2010-05-26 20:05:25 +02:00
}
-re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file .*${srcfile}, line $main_line.*$gdb_prompt$" {
setup_xfail "*-*-*" 1270
2012-02-28 23:40:48 +01:00
fail "break at main"
2010-05-26 20:05:25 +02:00
}
1999-05-05 23:45:13 +02:00
}
#
# 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
#
2010-05-26 20:05:25 +02:00
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"
}
1999-05-05 23:45:13 +02:00
}
# 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)" }
}
1999-11-02 05:44:47 +01:00
#
# Test that breakpoints-invalid is issued once and only once for
# breakpoint ignore count changes, after annotation stopped.
#
2012-02-28 23:40:48 +01:00
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++"
1999-11-02 05:44:47 +01:00
}
}
2010-05-26 20:05:25 +02:00
gdb_test_multiple "ignore 5 4" "ignore 5 4" {
1999-11-02 05:44:47 +01:00
-re "Will ignore next 4 crossings of breakpoint 5.*$gdb_prompt$" {
pass "ignore 5 4"
}
}
2010-05-26 20:05:25 +02:00
gdb_test_multiple "continue" "annotate ignore count change" {
There's code in annotate.c and breakpoint.c that is supposed to
suppress multiple breakpoints-invalid annotations when the ignore
count of a breakpoint changes, up until the target actually stops.
But, the code is bogus:
void
annotate_breakpoints_changed (void)
{
if (annotation_level == 2)
{
target_terminal_ours ();
printf_unfiltered (("\n\032\032breakpoints-invalid\n"));
if (ignore_count_changed)
ignore_count_changed = 0; /* Avoid multiple break annotations. */
}
}
The "ignore_count_changed" flag isn't actually guarding the output of
the annotation at all. It would have been better written something
like:
void
annotate_breakpoints_changed (void)
{
if (annotation_level == 2 && !ignore_count_changed)
{
target_terminal_ours ();
printf_unfiltered (("\n\032\032breakpoints-invalid\n"));
ignore_count_changed = 0; /* Avoid multiple break annotations. */
}
}
but, it wasn't. AFAICS, that goes all the way back to the original
patch'es submission and check in, at
<http://sourceware.org/ml/gdb-patches/1999-q4/msg00106.html>. I
looked a tar of HP's wdb from 1999, and even though that contains
local changes in the annotate code, this suppression seems borked
there too to me.
The original patch added a test to supposedly exercise this
suppression, but, it actually doesn't. It merely tests that
"breakpoints-invalid" is output after "stopped", but doesn't check
whether the duplicates supression actually works (IOW, check that only
_one_ annotation is seen). I was going to simply delete the tests
too, but a following patch will eliminate the duplicates in a
different way (which I needed for a different reason), so instead, I'm
making the tests actually fail if a duplicate annotation is seen.
Worry not, the test doesn't actually fail! The reason is that
breakpoint.c does:
else if (b->ignore_count > 0)
{
b->ignore_count--;
annotate_ignore_count_change ();
bs->stop = 0;
/* Increase the hit count even though we don't stop. */
++(b->hit_count);
observer_notify_breakpoint_modified (b);
}
where the annotate_ignore_count_change call is meant to inform the
"breakpoint_modified" annotation observer to ignore the notification.
All sounds good. But, the trouble is that nowadays annotate.c only
installs the observers if GDB is started with annotations enabled with
a command line option (gdb --annotate=2):
void
_initialize_annotate (void)
{
if (annotation_level == 2)
{
observer_attach_breakpoint_deleted (breakpoint_changed);
observer_attach_breakpoint_modified (breakpoint_changed);
}
}
and annota1.exp, to enable annotations, starts GDB normally, and
afterwards does "set annotate 2", so the observers aren't installed
when annota1.exp is run, and therefore changing the ignore count isn't
triggering any annotation at all...
gdb/
2013-01-22 Pedro Alves <palves@redhat.com>
* annotate.c (ignore_count_changed): Delete.
(annotate_breakpoints_changed): Don't clear ignore_count_changed.
(annotate_ignore_count_change): Delete.
(annotate_stopped): Don't emit a delayed breakpoints-changed
annotation.
* annotate.h (annotate_ignore_count_change): Delete.
* breakpoint.c (bpstat_check_breakpoint_conditions): Don't call
annotate_ignore_count_change.
gdb/testsuite/
2013-01-22 Pedro Alves <palves@redhat.com>
* gdb.base/annota1.exp (annotate ignore count change): Add
expected output for failure case.
2013-01-22 21:08:30 +01:00
-re ".*breakpoints-invalid.*breakpoints-invalid.*$gdb_prompt$" {
fail "annotate ignore count change"
}
-re ".*$srcfile:$value_inc_line:.*\032\032stopped\r\n$gdb_prompt$" {
1999-11-02 05:44:47 +01:00
pass "annotate ignore count change"
}
}
# check that ignore command is working, or the above can provide
# misleading assurance ...
2010-05-26 20:05:25 +02:00
gdb_test_multiple "next" "next to exit loop" {
-re "source .*annota1.c.*$gdb_prompt$" {
}
1999-11-02 05:44:47 +01:00
}
2012-02-28 23:40:48 +01:00
set after_loop_line [gdb_get_line_number "after loop"]
2010-05-26 20:05:25 +02:00
gdb_test_multiple "next" "breakpoint ignore count" {
2012-02-28 23:40:48 +01:00
-re ".*$srcfile:$after_loop_line:.*$gdb_prompt$" {
1999-11-02 05:44:47 +01:00
pass "breakpoint ignore count"
}
}
1999-05-05 23:45:13 +02:00
2011-09-08 16:56:34 +02:00
# 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"
}
}
1999-05-05 23:45:13 +02:00
#
# 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)
#
2001-12-20 17:52:07 +01:00
# 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.
2004-07-20 02:24:41 +02:00
if [target_info exists gdb,nosignals] {
unsupported "signal sent"
} else {
setup_xfail hppa*-*-hpux11*
2010-05-26 20:05:25 +02:00
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"
}
2004-07-20 02:24:41 +02:00
}
1999-05-05 23:45:13 +02:00
}
2004-07-12 23:39:35 +02:00
# Check for production of a core file and remove it!
1999-05-05 23:45:13 +02:00
2004-07-12 23:39:35 +02:00
set test "cleanup core file"
2011-09-08 16:56:34 +02:00
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)"
1999-05-05 23:45:13 +02:00
} else {
2011-09-08 16:56:34 +02:00
pass "$test (not dumped)"
1999-05-05 23:45:13 +02:00
}
2008-05-20 23:11:04 +02:00
proc thread_test {} {
2009-07-13 21:20:39 +02:00
global objdir subdir srcdir testfile
2008-05-20 23:11:04 +02:00
global gdb_prompt old_gdb_prompt
2009-07-13 21:20:39 +02:00
set srcfile watch_thread_num.c
set binfile ${objdir}/${subdir}/${testfile}-watch_thread_num
2008-05-20 23:11:04 +02:00
set gdb_prompt $old_gdb_prompt
2012-06-21 22:46:25 +02:00
if { ![get_compiler_info] && [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] == "" } {
2008-05-20 23:11:04 +02:00
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"
2010-05-26 20:05:25 +02:00
gdb_test_multiple "set annotate 2" "" {
-re "set annotate 2\r\n$gdb_prompt$" {
}
2008-05-20 23:11:04 +02:00
}
2010-05-26 20:05:25 +02:00
gdb_test_multiple "next 2" "new thread" {
2008-05-20 23:11:04 +02:00
-re ".*\032\032new-thread" {
2010-05-26 20:05:25 +02:00
pass "new thread"
2008-05-20 23:11:04 +02:00
}
}
}
}
2008-06-06 02:40:21 +02:00
proc thread_switch {} {
2010-05-26 20:05:25 +02:00
gdb_test_multiple "thread 1" "thread switch" {
-re ".*\032\032thread-changed" {
2008-06-06 02:40:21 +02:00
pass "thread switch"
}
2010-05-26 20:05:25 +02:00
}
2008-06-06 02:40:21 +02:00
}
2008-05-20 23:11:04 +02:00
thread_test
2008-06-06 02:40:21 +02:00
thread_switch
2008-05-20 23:11:04 +02:00
1999-05-05 23:45:13 +02:00
# restore the original prompt for the rest of the testsuite
set gdb_prompt $old_gdb_prompt