Update copyright year range in all GDB files
[external/binutils.git] / gdb / testsuite / gdb.base / sigall.exp
1 #   Copyright 1995-2018 Free Software Foundation, Inc.
2
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.
7 #
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.
12 #
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/>.
15
16 if [target_info exists gdb,nosignals] {
17     verbose "Skipping sigall.exp because of nosignals."
18     continue
19 }
20
21 standard_testfile
22
23 if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
24     return -1
25 }
26
27 proc test_one_sig {nextsig} {
28     global sig_supported
29     global gdb_prompt
30     global thissig
31
32     set this_sig_supported $sig_supported
33     gdb_test "handle SIG$thissig stop print" \
34         "SIG$thissig\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*"
35     gdb_test "b handle_$thissig" "Breakpoint \[0-9\]+ .*"
36     gdb_test "b gen_$nextsig" "Breakpoint \[0-9\]+ .*"
37
38     set need_another_continue 1
39     set missed_handler 0
40     if $this_sig_supported then {
41         set esig $thissig
42
43         if { $thissig == "IO" } {
44             setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
45         }
46         # On Linux SPARC64 systems SIGLOST==SIGPWR and gdb identifies
47         # the raised signal as PWR.
48         if { $thissig == "LOST" && [ istarget "sparc64-*-linux*" ] } then {
49             set esig "PWR"
50         }
51
52         gdb_test "continue" \
53             "Continuing.*Program received signal SIG$esig.*" \
54                 "get signal $esig"
55     }
56
57     if $need_another_continue then {
58         if { $thissig == "URG" } {
59             setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
60         }
61         # Either Lynx or GDB screws up on SIGPRIO
62         if { $thissig == "PRIO" } {
63             setup_xfail "*-*-*lynx*"
64         }
65         gdb_test_multiple "continue" "send signal $thissig" {
66             -re "Breakpoint.*handle_$thissig.*$gdb_prompt $" {
67                 pass "send signal $thissig"
68             }
69             -re "Breakpoint.*gen_$nextsig.*kill.*$gdb_prompt $" {
70                 fail "missed breakpoint at handle_$thissig"
71                 set missed_handler 1
72             }
73         }
74     }
75
76     if { $missed_handler == "0" } then {
77         gdb_test_multiple "signal 0" "advance to $nextsig" {
78             -re "Breakpoint.*gen_$nextsig.*\r\n\[0-9\]+\[ \t\]+kill \\(.*\r\n$gdb_prompt $" {
79                 pass "advance to $nextsig"
80                 set sig_supported 1
81             }
82             -re "Breakpoint.*gen_$nextsig.*\r\n\[0-9\]+\[ \t\]+handle_.*\r\n$gdb_prompt $" {
83                 pass "advance to $nextsig"
84                 set sig_supported 0
85             }
86         }
87     }
88     set thissig $nextsig
89 }
90
91 # The list of signals that the program generates, in the order they
92 # are generated.
93 set signals {
94     ABRT
95     HUP
96     QUIT
97     ILL
98     EMT
99     FPE
100     BUS
101     SEGV
102     SYS
103     PIPE
104     ALRM
105     URG
106     TSTP
107     CONT
108     CHLD
109     TTIN
110     TTOU
111     IO
112     XCPU
113     XFSZ
114     VTALRM
115     PROF
116     WINCH
117     LOST
118     USR1
119     USR2
120     PWR
121     POLL
122     WIND
123     PHONE
124     WAITING
125     LWP
126     DANGER
127     GRANT
128     RETRACT
129     MSG
130     SOUND
131     SAK
132     PRIO
133     33
134     34
135     35
136     36
137     37
138     38
139     39
140     40
141     41
142     42
143     43
144     44
145     45
146     46
147     47
148     48
149     49
150     50
151     51
152     52
153     53
154     54
155     55
156     56
157     57
158     58
159     59
160     60
161     61
162     62
163     63
164     TERM
165 }
166
167 # Make the first signal SIGABRT because it is always supported.
168 set sig_supported 1
169 set thissig "ABRT"
170
171 runto gen_ABRT
172
173 foreach sig [lrange $signals 1 end] {
174     test_one_sig $sig
175 }
176
177 # The last signal (SIGTERM) gets handled slightly differently because
178 # we are not setting up for another test.
179 gdb_test "handle SIGTERM stop print" \
180     "SIGTERM\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*"
181 gdb_test "b handle_TERM" "Breakpoint \[0-9\]+ .*"
182 gdb_test "continue" \
183     "Continuing.*Program received signal SIGTERM.*" \
184     "get signal TERM"
185 gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM"
186 gdb_continue_to_end "continue to sigall exit"
187
188 return 0