GDB: trad-frame: Store length of value_bytes in trad_frame_saved_reg
[binutils-gdb.git] / gdb / testsuite / gdb.ada / excep_handle.exp
blob2a99457ddcd2ba392a71f196eddeaa947b0882d8
1 # Copyright 2018-2024 Free Software Foundation, Inc.
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 load_lib "ada.exp"
18 require allow_ada_tests gnat_runtime_has_debug_info
20 standard_ada_testfile foo
22 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
23 return -1
26 clean_restart ${testfile}
28 # Some global variables used to simplify the maintenance of some of
29 # the regular expressions below.
30 set eol "\r\n"
31 set sp "\[ \t\]*"
33 set when "when"
34 set catchpoint_constraint_error_msg \
35 "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Constraint_Error =>"
37 set catchpoint_program_error_msg \
38 "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Program_Error =>"
40 set catchpoint_storage_error_msg \
41 "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Storage_Error =>"
43 if {![runto_main]} {
44 return 0
47 ############################################
48 # 1. Try catching all exceptions handlers. #
49 ############################################
51 gdb_test "catch handlers" \
52 "Catchpoint $decimal: all Ada exceptions handlers" \
53 "insert catchpoint on all Ada exceptions handlers"
55 # Continue. The program should stop at first exception handling.
57 gdb_test "continue" \
58 "Continuing\\.$eol$eol$catchpoint_constraint_error_msg" \
59 "continuing to first Constraint_Error exception handlers"
61 # Resume the program's exception.
63 # The program will first go through a block of code which has an
64 # exception handler, but since no exception is raised, we should
65 # not stop there. Instead, we expect to stop in the handler of
66 # the next exception being raised.
68 gdb_test "continue" \
69 "Continuing\\.$eol$eol$catchpoint_storage_error_msg" \
70 "continuing and stopping in Storage_Error exception handlers"
72 gdb_test_no_output "delete 2" \
73 "delete catchpoint on all Ada exceptions handlers"
75 ##################################################
76 # 2. Try catching some named exception handlers. #
77 ##################################################
79 # Insert a catchpoint on Program_Error Ada exception handlers.
81 gdb_test "catch handlers Program_Error" \
82 "Catchpoint $decimal: `Program_Error' Ada exception handlers" \
83 "insert catchpoint on Program_Error Ada exception handlers"
85 # Continue, we should not stop at ABORT_SIGNAL but at Program_Error one.
87 gdb_test "continue" \
88 "Continuing\\.$eol$eol$catchpoint_program_error_msg" \
89 "continuing without stopping to Program_Error exception handlers"
91 gdb_test_no_output \
92 "delete 3" \
93 "delete catchpoint on all Program_Error Ada exception handlers"
95 # Insert a catchpoint on Storage_Error Ada exception handlers.
97 gdb_test "catch handlers Storage_Error" \
98 "Catchpoint $decimal: `Storage_Error' Ada exception handlers" \
99 "insert catchpoint on Storage_Error Ada exception handlers"
101 # Continue, we should stop at Storage_Error handlers.
103 gdb_test "continue" \
104 "Continuing\\.$eol$eol$catchpoint_storage_error_msg" \
105 "continuing without stopping to Storage_Error exception handlers"
107 gdb_test_no_output \
108 "delete 4" \
109 "delete catchpoint on all Storage_Error Ada exception handlers"
111 ########################################################################
112 # 3. Try catching with condition and without named exception handlers. #
113 ########################################################################
115 # Insert a catchpoint on all Ada exceptions handlers with condition.
117 gdb_test "catch handlers if Global_Var = 2" \
118 "Catchpoint $decimal: all Ada exceptions handlers" \
119 "insert catchpoint on all Ada exception handlers with condition"
121 # Check that condition is stored and properly displayed.
123 gdb_test "info breakpoint" "stop only if Global_Var = 2" \
124 "Check catch handlers with condition"
126 # Continue, we should not stop at ABORT_SIGNAL but at Program_Error one.
128 gdb_test "continue" \
129 "Continuing\\.$eol$eol$catchpoint_constraint_error_msg" \
130 "continuing to second Constraint_Error exception handlers"
132 gdb_test_no_output \
133 "delete 5" \
134 "delete catchpoint on all all Ada exceptions handlers with condition"
136 ################################################################
137 # 4. Try catching with condition and named exception handlers. #
138 ################################################################
140 # Insert a catchpoint on Program_Error Ada exception handlers with
141 # condition.
143 gdb_test "catch handlers Program_Error if Global_Var = 4" \
144 "Catchpoint $decimal: `Program_Error' Ada exception handlers" \
145 "insert catchpoint on Program_Error Ada exception handlers with condition"
147 # Continue, we should not stop at first Program_Error handlers but at
148 # the second one.
150 gdb_test "continue" \
151 "Continuing\\.$eol$eol$catchpoint_program_error_msg" \
152 "continuing to Program_Error exception handlers"
154 # Continue, the program should exit properly.
156 gdb_test "continue" \
157 "Continuing\\..*$inferior_exited_re.*" \
158 "continuing to program completion"