1# This testcase is part of GDB, the GNU debugger. 2 3# Copyright 2010-2016 Free Software Foundation, Inc. 4 5# This program is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 3 of the License, or 8# (at your option) any later version. 9# 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18# Test SIGILL generated by some special cases of breakpoints on ia64. Problem 19# was SIGILL being stored in non-current thread for later retrieval when its 20# breakpoint has been already deleted. moribund locations are not active in 21# the default all-stop mode. 22 23standard_testfile 24if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" ${binfile} executable [list debug additional_flags=-lrt]] != "" } { 25 return -1 26} 27 28clean_restart $testfile 29 30if ![runto_main] { 31 return -1 32} 33 34set test "info addr label" 35gdb_test_multiple $test $test { 36 -re "Symbol \"label\" is at 0x\[0-9a-f\]+0 in .*\r\n$gdb_prompt $" { 37 # Verify the label really starts at the start of ia64 bundle. 38 pass $test 39 40 # ia64 generates SIGILL for breakpoint at B slot of an MIB bundle. 41 gdb_test "break *label+2" {Breakpoint [0-9]+ at 0x[0-9a-f]+2:.*} 42 } 43 -re "No symbol \"label\" in current context\\.\r\n$gdb_prompt $" { 44 pass $test 45 46 # Either this target never generates non-SIGTRAP signals or they do 47 # not depend on the breakpoint address. Try any address. 48 gdb_breakpoint [gdb_get_line_number "break-here"] 49 } 50} 51 52gdb_test_no_output {set $sigill_bpnum=$bpnum} 53 54gdb_breakpoint [gdb_get_line_number "break-at-exit"] 55 56gdb_test_no_output "set debug infrun 1" 57 58# The ia64 SIGILL signal is visible only in the lin-lwp debug. 59 60gdb_test "continue" "Breakpoint \[0-9\]+,( .* in)? thread_func .*" 61 62gdb_test_no_output {delete $sigill_bpnum} 63 64set test "continue for the pending signal" 65gdb_test_multiple "continue" $test { 66 -re "Breakpoint \[0-9\]+, .*break-at-exit.*\r\n$gdb_prompt $" { 67 # Breakpoint has been skipped in the other thread. 68 pass $test 69 } 70 -re " received signal .*\r\n$gdb_prompt $" { 71 fail $test 72 } 73} 74