1 # Copyright
2004-2023 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
/>.
17 # The
program siginfo.c creates a backtrace containing a
signal
18 # handler registered using sigaction
's sa_sigaction / SA_SIGINFO.
19 # Some OS's
(e.g.
, GNU
/Linux
) use different
signal trampolines
for
20 # sa_sigaction and sa_handler.
22 # This test first confirms that GDB can backtrace through the
23 # alternative sa_sigaction
signal handler
, and second that GDB can
24 # nexti
/stepi out of such a handler.
26 require
{!target_info
exists gdb
,nosignals
}
31 if {[prepare_for_testing
"failed to prepare" $testfile $srcfile debug]} {
35 gdb_test
"display/i \$pc"
42 # Pass all the alarms straight through
(but verbosely
)
43 # gdb_test
"handle SIGALRM print pass nostop"
44 # gdb_test
"handle SIGVTALRM print pass nostop"
45 # gdb_test
"handle SIGPROF print pass nostop"
47 # Run to the
signal handler
, validate the backtrace.
48 gdb_test
"break handler"
49 gdb_test
"continue" ".* handler .*" "continue to stepi handler"
50 gdb_test_sequence
"bt" "backtrace for nexti" {
51 "\[\r\n\]+.0 \[^\r\n\]* handler "
52 "\[\r\n\]+.1 .signal handler called."
53 "\[\r\n\]+.2 \[^\r\n\]* main "
56 # Check that GDB can step the inferior
back to main
57 set test
"step out of handler"
58 gdb_test_multiple
"step" "${test}" {
59 -re
"Could not insert single-step breakpoint.*$gdb_prompt $" {
60 setup_kfail gdb
/8841 sparc
*-*-openbsd
*
61 fail
"$test (could not insert single-step breakpoint)"
63 -re
"Cannot insert breakpoint.*Cannot access memory.*$gdb_prompt $" {
64 setup_kfail gdb
/8841 "nios2*-*-linux*"
65 fail
"$test (could not insert single-step breakpoint)"
67 -re
"done = 1;.*${gdb_prompt} $" {
71 -re
"\} .. handler .*${gdb_prompt} $" {
75 -re
"$inferior_exited_re normally.*${gdb_prompt} $" {
76 kfail gdb
/1613 "$test (program exited)"
78 -re
"(while ..done|return 0).*${gdb_prompt} $" {
79 # After stepping out of a function
/r
signal-handler
, GDB will
80 # advance the inferior until it is at the first instruction of
81 # a code
-line.
While typically things
return to the middle of
82 # the
"while..." (and hence GDB advances the inferior to the
83 #
"return..." line) it is also possible for the return to land
84 #
on the first instruction of
"while...". Accept both cases.