1# Copyright 1995-2020 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 16if [target_info exists gdb,nosignals] { 17 verbose "Skipping sigall.exp because of nosignals." 18 continue 19} 20 21standard_testfile 22 23if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { 24 return -1 25} 26 27proc 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. 93set 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. 168set sig_supported 1 169set thissig "ABRT" 170 171runto gen_ABRT 172 173foreach 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. 179gdb_test "handle SIGTERM stop print" \ 180 "SIGTERM\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*" 181gdb_test "b handle_TERM" "Breakpoint \[0-9\]+ .*" 182gdb_test "continue" \ 183 "Continuing.*Program received signal SIGTERM.*" \ 184 "get signal TERM" 185gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM" 186gdb_continue_to_end "continue to sigall exit" 187 188return 0 189