# This testcase is part of GDB, the GNU debugger.

# Copyright 2010, 2011 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Test SIGILL generated by some special cases of breakpoints on ia64.  Problem
# was SIGILL being stored in non-current thread for later retrieval when its
# breakpoint has been already deleted.  moribund locations are not active in
# the default all-stop mode.

set testfile "ia64-sigill"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" ${binfile} executable [list debug additional_flags=-lrt]] != "" } {
    return -1
}

clean_restart $testfile

if ![runto_main] {
    return -1
}

set test "info addr label"
gdb_test_multiple $test $test {
    -re "Symbol \"label\" is at 0x\[0-9a-f\]+0 in .*\r\n$gdb_prompt $" {
	# Verify the label really starts at the start of ia64 bundle.
	pass $test

	# ia64 generates SIGILL for breakpoint at B slot of an MIB bundle.
	gdb_test "break *label+2" {Breakpoint [0-9]+ at 0x[0-9a-f]+2:.*}
    }
    -re "No symbol \"label\" in current context\\.\r\n$gdb_prompt $" {
	pass $test

	# Either this target never generates non-SIGTRAP signals or they do
	# not depend on the breakpoint address.  Try any address.
	gdb_breakpoint [gdb_get_line_number "break-here"]
    }
}

gdb_test_no_output {set $sigill_bpnum=$bpnum}

gdb_breakpoint [gdb_get_line_number "break-at-exit"]

gdb_test_no_output "set debug infrun 1"

# The ia64 SIGILL signal is visible only in the lin-lwp debug.

gdb_test "continue" "Breakpoint \[0-9\]+,( .* in)? thread_func .*"

gdb_test_no_output {delete $sigill_bpnum}

set test "continue for the pending signal"
gdb_test_multiple "continue" $test {
    -re "Breakpoint \[0-9\]+, .*break-at-exit.*\r\n$gdb_prompt $" {
	# Breakpoint has been skipped in the other thread.
	pass $test
    }
    -re "Program received signal .*\r\n$gdb_prompt $" {
	fail $test
    }
}
