123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- # Copyright 2011-2022 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/>.
- load_lib "ada.exp"
- if { [skip_ada_tests] } { return -1 }
- standard_ada_testfile foo
- if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
- return -1
- }
- # A global variable used to simplify the maintenance of some of
- # the regular expressions below.
- set eol "\[\r\n\]+"
- # Before going any further, verify that we can insert exception
- # handlers catchpoints... That way, we won't have to do this while
- # doing the actual GDB/MI testing.
- clean_restart ${testfile}
- if ![runto_main] then {
- return 0
- }
- set msg "insert catchpoint on all Ada exceptions handlers"
- gdb_test_multiple "catch handlers" $msg {
- -re "Catchpoint $decimal: all Ada exceptions handlers$eol$gdb_prompt $" {
- pass $msg
- }
- -re "Your Ada runtime appears to be missing some debugging information.*\[\r\n\]+$gdb_prompt $" {
- # If the runtime was not built with enough debug information,
- # or if it was stripped, we can not test exception
- # catchpoints.
- unsupported $msg
- return -1
- }
- }
- # Now, we can start the GDB/MI testing itself...
- load_lib mi-support.exp
- set MIFLAGS "-i=mi"
- mi_clean_restart $binfile
- #############################################
- # 1. Try catching all exceptions handlers. #
- #############################################
- with_test_prefix "scenario 1" {
- if {[mi_runto_main] < 0} {
- return 0
- }
- }
- mi_gdb_test "-catch-handlers" \
- "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"all Ada exceptions handlers\",.*}" \
- "catch all exceptions handlers"
- # Continue to exception handler.
- proc continue_to_exception_handler { test line } {
- global decimal
- mi_send_resuming_command "exec-continue" "$test"
- # Now MI stream output.
- mi_expect_stop \
- "breakpoint-hit\",disp=\"keep\",bkptno=\"$decimal\",exception-name=\"exception\"?" \
- "foo" "" ".*" "$line" \
- ".*" \
- $test
- }
- # We don't have the exception name info when stopping at the exception handlers
- # catchpoints so we use source line to check if the inferior stops at the
- # right location.
- set bp_ce_location [gdb_get_line_number "BREAK1" ${testdir}/foo.adb]
- continue_to_exception_handler \
- "continue until CE handling caught by all-exceptions handlers catchpoint" \
- "$bp_ce_location"
- set bp_pe_location [gdb_get_line_number "BREAK2" ${testdir}/foo.adb]
- continue_to_exception_handler \
- "continue until PE handling caught by all-exceptions handlers catchpoint" \
- "$bp_pe_location"
- ##########################################################
- # 2. Try catching only some of the exceptions handlers. #
- ##########################################################
- # Here is the scenario:
- # - Restart the debugger from scratch, runto_main
- # - We'll catch only "Constraint_Error handlers"
- # - continue, we should stop at the Constraint_Error exception handler
- # - continue, we should not stop at the Program_Error exception handler
- # but exit instead.
- with_test_prefix "scenario 2" {
- mi_delete_breakpoints
- if {[mi_runto_main] < 0} {
- return 0
- }
- }
- mi_gdb_test "-catch-handlers -e Constraint_Error" \
- "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"`Constraint_Error' Ada exception handlers\",.*}" \
- "catch Constraint_Error"
- mi_execute_to "exec-continue" \
- "breakpoint-hit\",disp=\"keep\",bkptno=\"$decimal\",exception-name=\"exception\"?" \
- "foo" "" ".*" "$bp_ce_location" \
- ".*" \
- "continue to exception catchpoint hit"
- # Exit the inferior.
- mi_send_resuming_command "exec-continue" "continuing to inferior exit"
- mi_expect_stop "exited-normally" "" "" "" "" "" "exit normally"
- mi_gdb_exit
- return 0
|