X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.base%2Fbreak.exp;h=d2121c3d635ec326ae2593b4f181ba73ba51b32b;hb=42e165c30c2f0602a73d301bd62a49a2290360c4;hp=71eb3a6348b55db726dd1f6b87b49abf011b2859;hpb=0d7941a9be533b6a7c3d05c06f74dfb74d3ec561;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp index 71eb3a6348..d2121c3d63 100644 --- a/gdb/testsuite/gdb.base/break.exp +++ b/gdb/testsuite/gdb.base/break.exp @@ -1,5 +1,4 @@ -# Copyright 1988, 1990-1992, 1994-2000, 2002-2003, 2007-2012 Free -# Software Foundation, Inc. +# Copyright 1988-2020 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 @@ -16,7 +15,7 @@ # This file was written by Rob Savoye. (rob@cygnus.com) -if { [prepare_for_testing break.exp "break" {break.c break1.c} {debug nowarnings}] } { +if { [prepare_for_testing "failed to prepare" "break" {break.c break1.c} {debug nowarnings}] } { return -1 } set srcfile break.c @@ -36,13 +35,13 @@ gdb_expect { send_gdb "y\n" gdb_expect { -re "$gdb_prompt $" { - fail "Delete all breakpoints when none (unexpected prompt)" + fail "delete all breakpoints when none (unexpected prompt)" } - timeout { fail "Delete all breakpoints when none (timeout after unexpected prompt)" } + timeout { fail "delete all breakpoints when none (timeout after unexpected prompt)" } } } - -re ".*$gdb_prompt $" { pass "Delete all breakpoints when none" } - timeout { fail "Delete all breakpoints when none (timeout)" } + -re ".*$gdb_prompt $" { pass "delete all breakpoints when none" } + timeout { fail "delete all breakpoints when none (timeout)" } } # @@ -78,7 +77,7 @@ set bp_location1 [gdb_get_line_number "set breakpoint 1 here"] # board. So, to be sure, we do a list command. # gdb_test "list main" \ - ".*main \\(argc, argv, envp\\).*" \ + ".*main \\(int argc, char \\*\\*argv, char \\*\\*envp\\).*" \ "use `list' to establish default source file" gdb_test "break $bp_location1" \ "Breakpoint.*at.* file .*$srcfile, line $bp_location1\\." \ @@ -119,21 +118,14 @@ set bp_location6 [gdb_get_line_number "set breakpoint 6 here"] set main_line $bp_location6 -if {$hp_aCC_compiler} { - set proto "\\(int\\)" -} else { - set proto "" -} - set bp_location7 [gdb_get_line_number "set breakpoint 7 here"] set bp_location8 [gdb_get_line_number "set breakpoint 8 here" $srcfile1] -set bp_location9 [gdb_get_line_number "set breakpoint 9 here" $srcfile1] gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.* \[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$main_line.* -\[0-9\]+\[\t \]+breakpoint keep y.* in marker2 at .*$srcfile1:($bp_location8|$bp_location9).* -\[0-9\]+\[\t \]+breakpoint keep y.* in factorial$proto at .*$srcfile:$bp_location7.* +\[0-9\]+\[\t \]+breakpoint keep y.* in marker2 at .*$srcfile1:$bp_location8.* +\[0-9\]+\[\t \]+breakpoint keep y.* in factorial at .*$srcfile:$bp_location7.* \[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$bp_location1.* \[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$bp_location1.* \[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$bp_location2.* @@ -336,7 +328,7 @@ gdb_test "enable" "" "" gdb_test "disable 10" "No breakpoint number 10." \ "disable non-existent breakpoint 10" -gdb_test "set \$baz 1.234" +gdb_test_no_output "set \$baz = 1.234" gdb_test "disable \$baz" \ "Convenience variable must have integer value.*" \ "disable with non-integer convenience var" @@ -359,17 +351,16 @@ gdb_test "disable \$1foo" \ # run until the breakpoint at main is hit. For non-stubs-using targets. # gdb_run_cmd -gdb_expect { - -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" { - pass "run until function breakpoint" - } - -re "$gdb_prompt $" { - fail "run until function breakpoint" - } - timeout { - fail "run until function breakpoint (timeout)" - } -} +gdb_test "" \ + "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*" \ + "run until function breakpoint" + +# Test the 'list' commands sets current file for the 'break LINENO' command. +set bp_marker1 [gdb_get_line_number "set breakpoint 15 here" ${srcfile1}] +gdb_test "list marker1" ".*" +gdb_test "break $bp_marker1" "Breakpoint \[0-9\]+ at 0x\[0-9a-f\]+: file .*${srcfile1}, line ${bp_marker1}\\." \ + "break lineno" +gdb_test_no_output {delete $bpnum} # # run until the breakpoint at a line number @@ -388,7 +379,7 @@ for {set i 6} {$i >= 1} {incr i -1} { # # Run until the breakpoint set at a quoted function # -gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, (0x\[0-9a-f\]+ in )?marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*" \ +gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, (0x\[0-9a-f\]+ in )?marker2 \\(a=43\\) at .*$srcfile1:$bp_location8.*" \ "run until quoted breakpoint" # # run until the file:function breakpoint at a line number in a file @@ -429,7 +420,7 @@ delete_breakpoints # test temporary breakpoint at function # -gdb_test "tbreak main" "Temporary breakpoint.*at.* file .*$srcfile, line.*" "Temporary breakpoint function" +gdb_test "tbreak main" "Temporary breakpoint.*at.* file .*$srcfile, line.*" "temporary breakpoint function" # # test break at function in file @@ -443,16 +434,16 @@ gdb_test "tbreak $srcfile:factorial" "Temporary breakpoint.*at.* file .*$srcfile # gdb_test "tbreak $bp_location1" \ "Temporary breakpoint.*at.* file .*$srcfile, line $bp_location1.*" \ - "Temporary breakpoint line number #1" + "temporary breakpoint line number #1" -gdb_test "tbreak $bp_location6" "Temporary breakpoint.*at.* file .*$srcfile, line $bp_location6.*" "Temporary breakpoint line number #2" +gdb_test "tbreak $bp_location6" "Temporary breakpoint.*at.* file .*$srcfile, line $bp_location6.*" "temporary breakpoint line number #2" # # test break at line number in file # gdb_test "tbreak $srcfile:$bp_location2" \ "Temporary breakpoint.*at.* file .*$srcfile, line $bp_location2.*" \ - "Temporary breakpoint line number in file #1" + "temporary breakpoint line number in file #1" set bp_location11 [gdb_get_line_number "set breakpoint 11 here"] gdb_test "tbreak $srcfile:$bp_location11" "Temporary breakpoint.*at.* file .*$srcfile, line $bp_location11.*" "Temporary breakpoint line number in file #2" @@ -462,7 +453,7 @@ gdb_test "tbreak $srcfile:$bp_location11" "Temporary breakpoint.*at.* file .*$s # gdb_test "info break" "Num Type.*Disp Enb Address.*What.*\[\r\n\] \[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$main_line.*\[\r\n\] -\[0-9\]+\[\t \]+breakpoint del.*y.*in factorial$proto at .*$srcfile:$bp_location7.*\[\r\n\] +\[0-9\]+\[\t \]+breakpoint del.*y.*in factorial at .*$srcfile:$bp_location7.*\[\r\n\] \[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location1.*\[\r\n\] \[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location6.*\[\r\n\] \[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location2.*\[\r\n\] @@ -482,48 +473,14 @@ gdb_test "catch" \ "Catch requires an event name." \ "catch requires an event name" +gdb_test "catch fork" "Catchpoint \[0-9\]+ \\(fork\\)" \ + "set catch fork, never expected to trigger" -set name "set catch fork, never expected to trigger" -gdb_test_multiple "catch fork" "$name" { - -re "Catchpoint \[0-9\]* .fork..*$gdb_prompt $" { - pass $name - } - -re "Catch of fork not yet implemented.*$gdb_prompt $" { - pass $name - } -} - - -# If we are on HP-UX 10.20, we expect an error message to be -# printed if we type "catch vfork" at the gdb gdb_prompt. This is -# because on HP-UX 10.20, we cannot catch vfork events. - -set name "set catch vfork, never expected to trigger" - -if [istarget "hppa*-hp-hpux10.20"] then { - gdb_test "catch vfork" \ - "Catch of vfork events not supported on HP-UX 10.20..*" \ - "$name" -} else { - gdb_test_multiple "catch vfork" "$name" { - -re "Catchpoint \[0-9\]* .vfork..*$gdb_prompt $" { - pass $name - } - -re "Catch of vfork not yet implemented.*$gdb_prompt $" { - pass $name - } - } -} +gdb_test "catch vfork" "Catchpoint \[0-9\]+ \\(vfork\\)" \ + "set catch vfork, never expected to trigger" -set name "set catch exec, never expected to trigger" -gdb_test_multiple "catch exec" "$name" { - -re "Catchpoint \[0-9\]* .exec..*$gdb_prompt $" { - pass $name - } - -re "Catch of exec not yet implemented.*$gdb_prompt $" { - pass $name - } -} +gdb_test "catch exec" "Catchpoint \[0-9\]+ \\(exec\\)" \ + "set catch exec, never expected to trigger" # Verify that GDB responds gracefully when asked to set a breakpoint # on a nonexistent source line. @@ -593,14 +550,14 @@ gdb_test "break $bp_location12 thread 999" "Unknown thread 999.*" \ "thread-specific breakpoint on non-existent thread disallowed" gdb_test "break $bp_location12 thread foo" \ - "Junk after thread keyword.*" \ + "Invalid thread ID: foo" \ "thread-specific breakpoint on bogus thread ID disallowed" # Verify that GDB responds gracefully to a breakpoint command with # trailing garbage. # gdb_test "break $bp_location12 foo" \ - "Junk at end of arguments.*" \ + "malformed linespec error: unexpected string, \"foo\".*" \ "breakpoint with trailing garbage disallowed" # Verify that GDB responds gracefully to a "clear" command that has @@ -626,60 +583,51 @@ gdb_test "clear marker3" {Deleted breakpoints [0-9]+ [0-9]+.*} # Verify that a breakpoint can be set via a convenience variable. # -gdb_test_no_output "set \$foo=$bp_location11" \ - "set convenience variable \$foo to bp_location11" -gdb_test "break \$foo" \ - "Breakpoint (\[0-9\]*) at .*, line $bp_location11.*" \ - "set breakpoint via convenience variable" +with_test_prefix "set line breakpoint via convenience variable" { + gdb_test_no_output "set \$foo=$bp_location11" \ + "set convenience variable \$foo to bp_location11" -# Verify that GDB responds gracefully to an attempt to set a -# breakpoint via a convenience variable whose type is not integer. -# -gdb_test_no_output "set \$foo=81.5" \ - "set convenience variable \$foo to 81.5" + gdb_test "break \$foo" \ + "Breakpoint (\[0-9\]*) at .*, line $bp_location11.*" + + # Verify that GDB responds gracefully to an attempt to set a + # breakpoint via a convenience variable whose type is not integer. + # -gdb_test "break \$foo" \ - "Convenience variables used in line specs must have integer values.*" \ - "set breakpoint via non-integer convenience variable disallowed" + gdb_test_no_output "set \$foo=81.5" \ + "set convenience variable \$foo to 81.5" + + gdb_test "break \$foo" \ + "Convenience variables used in line specs must have integer values.*" \ + "non-integer convenience variable disallowed" +} # Verify that we can set and trigger a breakpoint in a user-called function. # gdb_test "break marker2" \ - "Breakpoint (\[0-9\]*) at .*, line ($bp_location8|$bp_location9).*" \ + "Breakpoint (\[0-9\]*) at .*, line $bp_location8.*" \ "set breakpoint on to-be-called function" gdb_test "print marker2(99)" \ - "The program being debugged stopped while in a function called from GDB.\r\nEvaluation of the expression containing the function\r\n.marker2$proto. will be abandoned.\r\nWhen the function is done executing, GDB will silently stop.*" \ + "The program being debugged stopped while in a function called from GDB.\r\nEvaluation of the expression containing the function\r\n.marker2. will be abandoned.\r\nWhen the function is done executing, GDB will silently stop.*" \ "hit breakpoint on called function" # As long as we're stopped (breakpointed) in a called function, # verify that we can successfully backtrace & such from here. -# -# In this and the following test, the _sr4export check apparently is needed -# for hppa*-*-hpux. -# -gdb_test_multiple "bt" "backtrace while in called function" { - -re "#0\[ \t\]*($hex in )?marker2.*:($bp_location8|$bp_location9)\r\n#1.*_sr4export.*$gdb_prompt $" { - pass "backtrace while in called function" - } - -re "#0\[ \t\]*($hex in )?marker2.*:($bp_location8|$bp_location9)\r\n#1.*function called from gdb.*$gdb_prompt $" { - pass "backtrace while in called function" - } -} +gdb_test "bt" \ + "#0\[ \t\]*($hex in )?marker2.*:$bp_location8\r\n#1\[ \t\]*.*" \ + "backtrace while in called function" # Return from the called function. For remote targets, it's important to do # this before runto_main, which otherwise may silently stop on the dummy # breakpoint inserted by GDB at the program's entry point. # gdb_test_multiple "finish" "finish from called function" { - -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.* in _sr4export.*$gdb_prompt $" { + -re "Run till exit from .*marker2.* at .*$bp_location8\r\n.*function called from gdb.*$gdb_prompt $" { pass "finish from called function" } - -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.*function called from gdb.*$gdb_prompt $" { - pass "finish from called function" - } - -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.*Value returned.*$gdb_prompt $" { + -re "Run till exit from .*marker2.* at .*$bp_location8\r\n.*Value returned.*$gdb_prompt $" { pass "finish from called function" } } @@ -713,40 +661,6 @@ gdb_test_multiple "finish" "finish from outermost frame disallowed" { } } -# Verify that we can explicitly ask GDB to stop on all shared library -# events, and that it does so. -# -if [istarget "hppa*-*-hpux*"] then { - if ![runto_main] then { fail "break tests suppressed" } - - gdb_test_no_output "set stop-on-solib-events 1" \ - "set stop-on-solib-events" - - gdb_test "run" \ - "Stopped due to shared library event.*" \ - "triggered stop-on-solib-events" \ - "Start it from the beginning.*y or n. $" \ - "y" - - gdb_test_no_output "set stop-on-solib-events 0" \ - "reset stop-on-solib-events" -} - -# Hardware breakpoints are unsupported on HP-UX. Verify that GDB -# gracefully responds to requests to create them. -# -if [istarget "hppa*-*-hpux*"] then { - if ![runto_main] then { fail "break tests suppressed" } - - gdb_test "hbreak" \ - "No hardware breakpoint support in the target.*" \ - "hw breaks disallowed" - - gdb_test "thbreak" \ - "No hardware breakpoint support in the target.*" \ - "temporary hw breaks disallowed" -} - #******** @@ -767,14 +681,7 @@ proc test_next_with_recursion {} { # Run until we call factorial with 6 gdb_run_cmd - gdb_expect { - -re "Break.* factorial .value=6. .*$gdb_prompt $" {} - -re ".*$gdb_prompt $" { - fail "run to factorial(6)"; - gdb_suppress_tests; - } - timeout { fail "run to factorial(6) (timeout)" ; gdb_suppress_tests } - } + gdb_test "" "Break.* factorial .value=6. .*" "run to factorial(6)" # Continue until we call factorial recursively with 5. @@ -832,7 +739,7 @@ proc test_next_with_recursion {} { if [target_info exists gdb,noresults] { gdb_suppress_tests } gdb_continue_to_end "recursive next test" - gdb_stop_suppressing_tests; + gdb_stop_suppressing_tests } test_next_with_recursion @@ -843,7 +750,7 @@ test_next_with_recursion # build a new file with optimization enabled so that we can try breakpoints # on targets with optimized prologues -if { [prepare_for_testing break.exp "breako2" {break.c break1.c} {debug nowarnings optimize=-O2}] } { +if { [prepare_for_testing "failed to prepare" "breako2" {break.c break1.c} {debug nowarnings optimize=-O2}] } { return -1 } @@ -865,18 +772,14 @@ gdb_test "break marker4" \ # run until the breakpoint at main is hit. For non-stubs-using targets. # gdb_run_cmd -gdb_expect { + +set test "run until function breakpoint, optimized file" +gdb_test_multiple "" $test { -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" { - pass "run until function breakpoint, optimized file" + pass $test } -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" { - pass "run until function breakpoint, optimized file (code motion)" - } - -re "$gdb_prompt $" { - fail "run until function breakpoint, optimized file" - } - timeout { - fail "run until function breakpoint, optimized file (timeout)" + pass "$test (code motion)" } } @@ -893,19 +796,11 @@ gdb_expect { # has no exactly matching line symbol, and GDB reports the breakpoint # as if it were in the middle of a line rather than at the beginning. -set bp_location13 [gdb_get_line_number "set breakpoint 13 here" $srcfile1] set bp_location14 [gdb_get_line_number "set breakpoint 14 here" $srcfile1] gdb_test_multiple "continue" \ "run until breakpoint set at small function, optimized file" { - -re "Breakpoint $decimal, marker4 \\(d=(d@entry=)?177601976\\) at .*$srcfile1:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" { - pass "run until breakpoint set at small function, optimized file" - } - -re "Breakpoint $decimal, $hex in marker4 \\(d=(d@entry=)?177601976\\) at .*$srcfile1:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" { - pass "run until breakpoint set at small function, optimized file" - } -re "Breakpoint $decimal, marker4 \\(d=(d@entry=)?177601976\\) at .*$srcfile1:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*" { - # marker4() is defined at line 46 when compiled with -DPROTOTYPES pass "run until breakpoint set at small function, optimized file (line bp_location14)" } -re "Breakpoint $decimal, factorial \\(.*\\) .*\{\r\n$gdb_prompt" { @@ -939,22 +834,53 @@ gdb_test "rbreak main" \ # Run to a breakpoint. Fail if we see "Junk at end of arguments". gdb_run_cmd -gdb_expect { + +set test "rbreak junk" +gdb_test_multiple "" $test { -re "Junk at end of arguments" { - fail "rbreak junk" + fail $test } -re ".*Breakpoint \[0-9\]+,.*$gdb_prompt $" { - pass "rbreak junk" - } - timeout { - fail "rbreak junk (timeout)" + pass $test } } +# +# Test break via convenience variable with file name +# + +with_test_prefix "set line:file breakpoint via convenience variable" { + set line [gdb_get_line_number "set breakpoint 1 here"] + gdb_test_no_output "set \$l = $line" + + set line_actual "-1" + set test "break ${srcfile}:\$l" + gdb_test_multiple "$test" $test { + -re "Breakpoint $decimal at $hex: file .*break\\.c, line ($decimal)\\.\r\n$gdb_prompt $" { + # Save the actual line number on which the breakpoint was + # actually set. On some systems (Eg: Ubuntu 16.04 with GCC + # version 5.4.0), that line gets completely inlined, including + # the call to printf, and so we end up inserting the breakpoint + # on one of the following lines instead. + set line_actual $expect_out(1,string) + pass $test + } + } -# Reset the default arguments for VxWorks -if [istarget "*-*-vxworks*"] { - set timeout 10 - verbose "Timeout is now $timeout seconds" 2 - gdb_test_no_output "set args main" + gdb_test_no_output "set \$foo=81.5" \ + "set convenience variable \$foo to 81.5" + gdb_test "break $srcfile:\$foo" \ + "Convenience variables used in line specs must have integer values.*" \ + "non-integer convenience variable disallowed" } + +# +# Test that commands can be cleared without error. +# + +gdb_test "commands\nprint 232323\nend" ">end" "set some breakpoint commands" +gdb_test "commands\nend" ">end" "clear breakpoint commands" +# We verify that the commands were cleared by ensuring that the last +# breakpoint's location ends the output -- if there were commands, +# they would have been printed after the location. +gdb_test "info break" "$srcfile:$line_actual" "verify that they were cleared"