X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.base%2Fskip.exp;h=d6994d5fdc80f339c95ef4bcd3107c630ed2c1b8;hb=5024637fac653914d471808288dc3221bc7ec089;hp=e340565a0c21b0dc0d68c585ea36c6a66532a086;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/testsuite/gdb.base/skip.exp b/gdb/testsuite/gdb.base/skip.exp index e340565a0c..d6994d5fdc 100644 --- a/gdb/testsuite/gdb.base/skip.exp +++ b/gdb/testsuite/gdb.base/skip.exp @@ -1,4 +1,4 @@ -# Copyright 2011-2013 Free Software Foundation, Inc. +# Copyright 2011-2019 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 @@ -14,167 +14,327 @@ # along with this program. If not, see . # This file was written by Justin Lebar. (justin.lebar@gmail.com) +# And further hacked on by Doug Evans. (dje@google.com) -if { [prepare_for_testing skip.exp "skip" \ - {skip.c skip1.c } \ - {debug nowarnings}] } { +load_lib completion-support.exp + +standard_testfile + +if { [prepare_for_testing "failed to prepare" "skip" \ + {skip.c skip1.c } \ + {debug nowarnings}] } { return -1 } set srcfile skip.c set srcfile1 skip1.c -# # Right after we start gdb, there's no default file or function to skip. -# + gdb_test "skip file" "No default file now." "skip file (no default file)" gdb_test "skip function" "No default function now." gdb_test "skip" "No default function now." "skip (no default function)" -if ![runto_main] { fail "skip tests suppressed" } +# Test elided args. + +gdb_test "skip -fi" "Missing value for -fi option." +gdb_test "skip -file" "Missing value for -file option." +gdb_test "skip -fu" "Missing value for -fu option." +gdb_test "skip -function" "Missing value for -function option." +gdb_test "skip -rfu" "Missing value for -rfu option." +gdb_test "skip -rfunction" "Missing value for -rfunction option." + +# Test other invalid option combinations. + +gdb_test "skip -x" "Invalid skip option: -x" +gdb_test "skip -rfu foo.* xyzzy" "Invalid argument: xyzzy" + +if ![runto_main] { + fail "can't run to main" + return +} -# # Test |info skip| with an empty skiplist. -# + gdb_test "info skip" "Not skipping any files or functions\." "info skip empty" -# # Create a skiplist entry for the current file and function. -# + gdb_test "skip file" "File .*$srcfile will be skipped when stepping\." "skip file ($srcfile)" gdb_test "skip" "Function main will be skipped when stepping\." "skip (main)" -# # Create a skiplist entry for a specified file and function. -# + gdb_test "skip file skip1.c" "File .*$srcfile1 will be skipped when stepping\." gdb_test "skip function baz" "Function baz will be skipped when stepping\." -# # Test bad skiplist entry modification commands -# + gdb_test "skip enable 999" "No skiplist entries found with number 999." gdb_test "skip disable 999" "No skiplist entries found with number 999." gdb_test "skip delete 999" "No skiplist entries found with number 999." -gdb_test "skip enable a" "Args must be numbers or '\\$' variables." -gdb_test "skip disable a" "Args must be numbers or '\\$' variables." -gdb_test "skip delete a" "Args must be numbers or '\\$' variables." +gdb_test "skip enable a" "Arguments must be numbers or '\\$' variables." +gdb_test "skip disable a" "Arguments must be numbers or '\\$' variables." +gdb_test "skip delete a" "Arguments must be numbers or '\\$' variables." -# # Ask for info on a skiplist entry which doesn't exist. -# + gdb_test "info skip 999" "No skiplist entries found with number 999." -# # Does |info skip| look right? -# + gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -1\\s+file\\s+y\\s+.*$srcfile\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+y\\s+baz\\s*" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +1\\s+y\\s+n\\s+.*$srcfile\\s+n\\s+\\s* +2\\s+y\\s+n\\s+\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+\\s* +4\\s+y\\s+n\\s+\\s+n\\s+baz\\s*" -# # Right now, we have an outstanding skiplist entry on both source # files, so when we step into the first line in main(), we should step # right over it and go to the second line of main(). -# -if ![runto_main] { fail "skip tests suppressed" } +if ![runto_main] { + fail "can't run to main" + return +} + gdb_test "step" ".*" "step in the main" gdb_test "bt" "\\s*\\#0\\s+main.*" "step after all ignored" -# # Now remove skip.c from the skiplist. Our first step should take us -# into foo(), and our second step should take us to the next line in -# main(). -# -gdb_test "skip delete 1" -# Check that entry 1 is missing from |info skip| -gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+y\\s+baz\\s*" \ - "info skip (delete 1)" +# into foo(), and our second step should take us to the next line in main(). -if ![runto_main] { fail "skip tests suppressed" } -gdb_test "step" "foo \\(\\) at.*" "step after deleting 1 (1)" -gdb_test "step" ".*" "step after deleting 1 (2)" ; # Return from foo() -gdb_test "step" "main \\(\\) at.*" "step after deleting 1 (3)" +with_test_prefix "step after deleting 1" { + gdb_test "skip delete 1" + # Check that entry 1 is missing from |info skip| + gdb_test "info skip" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+\\s* +4\\s+y\\s+n\\s+\\s+n\\s+baz\\s*" \ + "info skip (delete 1)" + + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test "step" "foo \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2" ; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 3" +} -# # Now disable the skiplist entry for skip1.c. We should now # step into foo(), then into bar(), but not into baz(). -# -gdb_test "skip disable 3" -# Is entry 3 disabled in |info skip|? -gdb_test "info skip 3" ".*\\n3\\s+file\\s+n.*" \ - "info skip shows entry as disabled" - -if ![runto_main] { fail "skip tests suppressed" } -gdb_test "step" "bar \\(\\) at.*" "step after disabling 3 (1)" -gdb_test "step" ".*" "step after disabling 3 (2)"; # Return from foo() -gdb_test "step" "foo \\(\\) at.*" "step after disabling 3 (3)" -gdb_test "step" ".*" "step after disabling 3 (4)"; # Return from bar() -gdb_test "step" "main \\(\\) at.*" "step after disabling 3 (5)" -# +with_test_prefix "step after disabling 3" { + gdb_test "skip disable 3" + # Is entry 3 disabled in |info skip|? + gdb_test "info skip 3" \ + "3\\s+n\\s+n\\s+$srcfile1\\s+n\\s+\\s*" \ + "info skip shows entry as disabled" + + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test "step" "bar \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2"; # Return from bar() + # With gcc 9.2.0 we jump once back to main before entering foo here. + # If that happens try to step a second time. + gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at .*" "step" + gdb_test "step" ".*" "step 4"; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 5" +} + # Enable skiplist entry 3 and make sure we step over it like before. -# -gdb_test "skip enable 3" -# Is entry 3 enabled in |info skip|? -gdb_test "info skip 3" ".*\\n3\\s+file\\s+y.*" \ - "info skip shows entry as enabled" -if ![runto_main] { fail "skip tests suppressed" } -gdb_test "step" "foo \\(\\) at.*" "step after enable 3 (1)" -gdb_test "step" ".*" "step after enable 3 (2)"; # Return from foo() -gdb_test "step" "main \\(\\) at.*" "step after enable 3 (3)" - -gdb_test "skip disable" -gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+n\\s+main\\s* -3\\s+file\\s+n\\s+$srcfile1\\s* -4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after disabling all" -gdb_test "skip enable" -gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+y\\s+baz\\s*" \ - "info skip after enabling all" +with_test_prefix "step after enable 3" { + gdb_test "skip enable 3" + # Is entry 3 enabled in |info skip|? + gdb_test "info skip 3" \ + "3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+\\s*" \ + "info skip shows entry as enabled" -gdb_test "skip disable 4 2-3" -gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+n\\s+main\\s* -3\\s+file\\s+n\\s+$srcfile1\\s* -4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after disabling 4 2-3" + if ![runto_main] { + fail "can't run to main" + return + } -gdb_test "skip enable 2-3" -gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after enabling 2-3" - -gdb_test "info skip 2-3" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s*" \ - "info skip 2-3" - -gdb_test "skip delete 2 3" -gdb_test "info skip" \ - "4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after deleting 2 3" + gdb_test "step" "foo \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2"; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 3" +} + +# Admin tests (disable,enable,delete). + +with_test_prefix "admin" { + gdb_test "skip disable" + gdb_test "info skip" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+n\\s+n\\s+\\s+n\\s+main\\s* +3\\s+n\\s+n\\s+$srcfile1\\s+n\\s+\\s* +4\\s+n\\s+n\\s+\\s+n\\s+baz\\s*" \ + "info skip after disabling all" + + gdb_test "skip enable" + gdb_test "info skip" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+\\s* +4\\s+y\\s+n\\s+\\s+n\\s+baz\\s*" \ + "info skip after enabling all" + + gdb_test "skip disable 4 2-3" + gdb_test "info skip" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+n\\s+n\\s+\\s+n\\s+main\\s* +3\\s+n\\s+n\\s+$srcfile1\\s+n\\s+\\s* +4\\s+n\\s+n\\s+\\s+n\\s+baz\\s*" \ + "info skip after disabling 4 2-3" + + gdb_test "skip enable 2-3" + gdb_test "info skip" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+\\s* +4\\s+n\\s+n\\s+\\s+n\\s+baz\\s*" \ + "info skip after enabling 2-3" + + gdb_test "info skip 2-3" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+\\s*" + + gdb_test "skip delete 2 3" + gdb_test "info skip" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +4\\s+n\\s+n\\s+\\s+n\\s+baz\\s*" \ + "info skip after deleting 2 3" + + gdb_test "skip delete" + gdb_test "info skip" "Not skipping any files or functions\." \ + "info skip after deleting all" +} + +# Now test skip -fi, etc. + +# Create a skiplist entry for a specified file and function. +gdb_test "skip -fi skip1.c" "File .*$srcfile1 will be skipped when stepping\." +gdb_test "skip -gfi sk*1.c" "File\\(s\\) sk\\*1.c will be skipped when stepping\." +gdb_test "skip -fu baz" "Function baz will be skipped when stepping\." +gdb_test "skip -rfu ^b.z$" "Function\\(s\\) \\^b\\.z\\$ will be skipped when stepping." + +with_test_prefix "step using -fi" { + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test_no_output "skip disable" + gdb_test_no_output "skip enable 5" + gdb_test "step" "foo \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2"; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 3" +} + +with_test_prefix "step using -gfi" { + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test_no_output "skip disable" + gdb_test_no_output "skip enable 6" + gdb_test "step" "foo \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2"; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 3" +} + +with_test_prefix "step using -fu for baz" { + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test_no_output "skip disable" + gdb_test_no_output "skip enable 7" + gdb_test "step" "bar \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2"; # Return from bar() + # With gcc 9.2.0 we jump once back to main before entering foo here. + # If that happens try to step a second time. + gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at.*" "step" + gdb_test "step" ".*" "step 4"; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 5" +} + +with_test_prefix "step using -rfu for baz" { + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test_no_output "skip disable" + gdb_test_no_output "skip enable 8" + gdb_test "step" "bar \\(\\) at.*" "step 1" + gdb_test "step" ".*" "step 2"; # Return from bar() + # With gcc 9.2.0 we jump once back to main before entering foo here. + # If that happens try to step a second time. + gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at.*" "step" + gdb_test "step" ".*" "step 4"; # Return from foo() + gdb_test "step" "main \\(\\) at.*" "step 5" +} + +# Test -fi + -fu. + +with_test_prefix "step using -fi + -fu" { + gdb_test_no_output "skip delete" + + if ![runto test_skip_file_and_function no-message] { + fail "can't run to test_skip_file_and_function" + return + } + + gdb_test "skip -fi skip1.c -fu test_skip" \ + "Function test_skip in file skip1.c will be skipped when stepping\." + # Verify we can step into skip.c:test_skip but not skip1.c:test_skip. + gdb_test "step" "test_skip \\(\\) at.*" "step 1" + gdb_test "step" "test_skip_file_and_function \\(\\) at.*" "step 2"; # Return from test_skip() + gdb_test "step" "skip1_test_skip_file_and_function \\(\\) at.*" "step 3" + gdb_test "step" ".*" "step 4"; # Skip over test_skip() + gdb_test "step" "test_skip_file_and_function \\(\\) at.*" "step 5"; # Return from skip1_test_skip_file_and_function() +} + +with_test_prefix "skip delete completion" { + global binfile + clean_restart "${binfile}" + if ![runto_main] { + fail "can't run to main" + return + } + + # Create a bunch of skips, don't care what they are. + for {set i 0} {$i < 12} {incr i} { + gdb_test "skip" ".*" "add skip $i" + } + + set all_numbers { "1" "10" "11" "12" "2" "3" "4" "5" "6" "7" "8" "9" } + + # Test completing single numbers. + test_gdb_complete_multiple "skip delete " "" "" $all_numbers + test_gdb_complete_multiple "skip delete " "1" "" { "1" "10" "11" "12" } + test_gdb_complete_multiple "skip delete 2 " "" "" $all_numbers + test_gdb_complete_unique "skip delete 11" "skip delete 11" + + # Test completing ranges. + test_gdb_complete_multiple "skip delete 2-" "" "" $all_numbers + test_gdb_complete_unique "skip delete 2-5" "skip delete 2-5" + + # Test cases with no completion. + test_gdb_complete_none "skip delete 123" + test_gdb_complete_none "skip delete a1" + test_gdb_complete_none "skip delete 2-33" +} -gdb_test "skip delete" -gdb_test "info skip" "Not skipping any files or functions\." \ - "info skip after deleting all"