mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
139 lines
4.3 KiB
Plaintext
139 lines
4.3 KiB
Plaintext
# 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
|