diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/func-ptrs.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/func-ptrs.exp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/func-ptrs.exp b/gdb/testsuite/gdb.base/func-ptrs.exp new file mode 100644 index 0000000..c26eb9d --- /dev/null +++ b/gdb/testsuite/gdb.base/func-ptrs.exp @@ -0,0 +1,95 @@ +# Copyright 2014 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/>. + +set testname func-ptrs +set srcfile ${testname}.c +if { [prepare_for_testing ${testname}.exp ${testname} ${srcfile}] } { + return -1 +} + +if { ![runto_main] } { + untested ${testname}.exp + return -1 +} + + +# First set our breakpoints. + +set fp_breakpoint_re \ + "Breakpoint $decimal at $hex: file .*${srcfile}, line $decimal\\." +gdb_test "break sentinel if calc == decr" \ + "${fp_breakpoint_re}" \ + "breakpoint at sentinel" +gdb_test "break incr" \ + "${fp_breakpoint_re}" \ + "breakpoint at incr" +gdb_test "break decr" \ + "${fp_breakpoint_re}" \ + "breakpoint at decr" + + +# Check if we run through to the breakpoint in incr. + +gdb_test "continue" \ + "Breakpoint $decimal, incr \\(i=-1\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*" \ + "continue to incr, first time" + + +# Go back up, make sure the return value is 0. + +gdb_test "finish" \ + "Run till exit from #0 +incr \\(i=-1\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+($hex in )?main \\(\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*Value returned is \\$$decimal = 0" \ + "go back to main from incr, first time" + + +# Redirect calc and see if we run to the breakpoint in decr instead. + +gdb_test_no_output "set calc = decr" "set calc to decr" +gdb_test "continue" \ + "Breakpoint $decimal, decr \\(i=0\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*" \ + "continue to decr" + + +# Go back up, check if we stop in sentinel instead. + +gdb_test "finish" \ + "Run till exit from #0 +decr \\(i=0\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+Breakpoint $decimal, sentinel \\(\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*" \ + "stop in sentinel" + + +# Go back all the way up to main, make sure the return value is -1. + +gdb_test_no_output "up-silently" "move up to decr" +gdb_test "finish" \ + "Run till exit from #1 +($hex in )?decr \\(i=0\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+($hex in )?main \\(\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*Value returned is \\$$decimal = -1" \ + "go back to main from decr" + + +# Reset calc and see if we run to the breakpoint in incr again. + +gdb_test_no_output "set calc = incr" "set calc to incr" +gdb_test "continue" \ + "Breakpoint $decimal, incr \\(i=-1\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*" \ + "continue to incr, second time" + + +# Go back up again, make sure the return value is 0. + +gdb_test "finish" \ + "Run till exit from #0 +incr \\(i=-1\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+($hex in )?main \\(\\)\[ \r\n\]+at .*${srcfile}:$decimal\[\r\n\]+.*Value returned is \\$$decimal = 0" \ + "go back to main from incr, second time" + + +# All done! |