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

# Copyright 2010-2012 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
    }
}
