1 # Copyright
2018-2019 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
/>.
18 standard_ada_testfile foo
20 if {[gdb_compile_ada
"${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
24 clean_restart $
{testfile
}
26 # Some global variables used to simplify the maintenance of some of
27 # the regular expressions below.
32 set catchpoint_constraint_error_msg \
33 "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Constraint_Error =>"
35 set catchpoint_program_error_msg \
36 "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Program_Error =>"
38 set catchpoint_storage_error_msg \
39 "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Storage_Error =>"
41 ############################################
42 # Check that runtime supports catchpoint. #
43 ############################################
45 if ![runto_main
] then {
46 fail
"cannot run to main, testcase aborted"
50 set msg
"insert catchpoint on all Ada exceptions handlers"
51 gdb_test_multiple
"catch handlers" $msg {
52 -re
"Catchpoint $decimal: all Ada exceptions handlers$eol$gdb_prompt $" {
55 -re
"Your Ada runtime appears to be missing some debugging information.*$eol$gdb_prompt $" {
56 #
If the runtime was not built with enough debug information
,
57 # or
if it was stripped
, we can not test exception handlers
64 ############################################
65 #
1. Try catching all exceptions handlers. #
66 ############################################
68 #
Continue. The
program should stop at first exception handling.
71 "Continuing\.$eol$catchpoint_constraint_error_msg$eol.*" \
72 "continuing to first Constraint_Error exception handlers"
74 # Resume the
program's exception.
76 # The program will first go through a block of code which has an
77 # exception handler, but since no exception is raised, we should
78 # not stop there. Instead, we expect to stop in the handler of
79 # the next exception being raised.
82 "Continuing\.$eol$catchpoint_storage_error_msg$eol.*" \
83 "continuing and stopping in Storage_Error exception handlers"
85 gdb_test_no_output "delete 2" \
86 "delete catchpoint on all Ada exceptions handlers"
88 ##################################################
89 # 2. Try catching some named exception handlers. #
90 ##################################################
92 # Insert a catchpoint on Program_Error Ada exception handlers.
94 gdb_test "catch handlers Program_Error" \
95 "Catchpoint $decimal: `Program_Error' Ada exception handlers
" \
96 "insert catchpoint on Program_Error Ada exception handlers"
98 #
Continue, we should not stop at ABORT_SIGNAL but at Program_Error one.
100 gdb_test
"continue" \
101 "Continuing\.$eol$catchpoint_program_error_msg$eol.*" \
102 "continuing without stopping to Program_Error exception handlers"
106 "delete catchpoint on all Program_Error Ada exception handlers"
108 # Insert a catchpoint
on Storage_Error Ada exception handlers.
110 gdb_test
"catch handlers Storage_Error" \
111 "Catchpoint $decimal: `Storage_Error' Ada exception handlers" \
112 "insert catchpoint on Storage_Error Ada exception handlers"
114 #
Continue, we should stop at Storage_Error handlers.
116 gdb_test
"continue" \
117 "Continuing\.$eol$catchpoint_storage_error_msg$eol.*" \
118 "continuing without stopping to Storage_Error exception handlers"
122 "delete catchpoint on all Storage_Error Ada exception handlers"
124 ########################################################################
125 #
3. Try catching with condition and without named exception handlers. #
126 ########################################################################
128 # Insert a catchpoint
on all Ada exceptions handlers with condition.
130 gdb_test
"catch handlers if Global_Var = 2" \
131 "Catchpoint $decimal: all Ada exceptions handlers" \
132 "insert catchpoint on all Ada exception handlers with condition"
134 # Check that condition is stored and properly displayed.
136 gdb_test
"info breakpoint" "stop only if Global_Var = 2" \
137 "Check catch handlers with condition"
139 #
Continue, we should not stop at ABORT_SIGNAL but at Program_Error one.
141 gdb_test
"continue" \
142 "Continuing\.$eol$catchpoint_constraint_error_msg$eol.*" \
143 "continuing to second Constraint_Error exception handlers"
147 "delete catchpoint on all all Ada exceptions handlers with condition"
149 ################################################################
150 #
4. Try catching with condition and named exception handlers. #
151 ################################################################
153 # Insert a catchpoint
on Program_Error Ada exception handlers with
156 gdb_test
"catch handlers Program_Error if Global_Var = 4" \
157 "Catchpoint $decimal: `Program_Error' Ada exception handlers" \
158 "insert catchpoint on Program_Error Ada exception handlers with condition"
160 #
Continue, we should not stop at first Program_Error handlers but at
163 gdb_test
"continue" \
164 "Continuing\.$eol$catchpoint_program_error_msg$eol.*" \
165 "continuing to Program_Error exception handlers"
167 #
Continue, the
program should exit properly.
169 gdb_test
"continue" \
170 "Continuing\..*$inferior_exited_re.*" \
171 "continuing to program completion"