--- /dev/null
+/* Copyright 2009 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/>.
+
+ This file is part of the gdb testsuite.
+ It tests displaced stepping over various insns that require special
+ handling. */
+
+ .text
+ .align 16
+ .global main
+ .proc main
+main:
+ mov r2=r12
+ mov r14=1
+ ;;
+bundle:
+ /* Store value 1 into `long' variable on stack. */
+ st8.rel [r2]=r14
+ /* This long constant requires L-X slot in this bundle. */
+ movl r14=0x7fffffff
+ ;;
+ /* Store value 0x7fffffff into `long' variable on stack. */
+ st8.rel [r2]=r14
+ mov r14=r0
+ ;;
+ mov r8=r14
+ mov r12=r2
+ br.ret.sptk.many b0
+
+ .endp main
+
+ .section .note.GNU-stack,"",@progbits
--- /dev/null
+# Copyright 2009 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/>.
+
+if ![istarget "ia64-*-*"] {
+ verbose "Skipping ia64-breakpoint-shadow test."
+ return
+}
+
+set testfile ia64-breakpoint-shadow
+set srcfile ${testfile}.S
+set binfile ${objdir}/${subdir}/${testfile}
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+ untested "Couldn't compile test program"
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+# We need to start the inferior to place the breakpoints in the memory at all.
+if ![runto_main] {
+ untested start
+ return -1
+}
+
+# The default "auto" mode removes all the breakpoints when we stop (and not
+# running the nonstop mode). We would not be able to test the shadow.
+gdb_test "set breakpoint always-inserted on"
+gdb_test "show breakpoint always-inserted" "Always inserted breakpoint mode is on."
+
+set match "\nDump of assembler code for function main:\r\n(.*)End of assembler dump.\r\n$gdb_prompt $"
+
+set test "disassembly without breakpoints"
+gdb_test_multiple "disass main" $test {
+ -re $match {
+ set orig $expect_out(1,string)
+ pass $test
+ }
+}
+
+set test "slot 0 breakpoint placed"
+gdb_test_multiple "b bundle" $test {
+ -re "Breakpoint \[0-9\] at (0x\[0-9a-f\]*0):.*$gdb_prompt $" {
+ pass $test
+ set bpt2address $expect_out(1,string)
+ }
+}
+
+if ![info exists bpt2address] {
+ return -1
+}
+
+gdb_test "b *($bpt2address + 1)" "Breakpoint \[0-9\] at .*" "slot 1 breakpoint placed"
+gdb_test "b *($bpt2address + 2)" "Can't insert breakpoint for non-existing slot X" "slot 2 (slot X) breakpoint refusal"
+
+set test "disassembly with breakpoints"
+gdb_test_multiple "disass main" $test {
+ -re $match {
+ set got $expect_out(1,string)
+ if [string equal -nocase $orig $got] {
+ pass $test
+ } else {
+ fail $test
+ }
+ }
+}
}
gdb_test "b [gdb_get_line_number "break-first"]" "Breakpoint \[0-9\] at .*" "First breakpoint placed"
-set test "Second breakpoint placed"
-gdb_test_multiple "b [gdb_get_line_number "break-second"]" $test {
- -re "Breakpoint \[0-9\] at (0x\[0-9a-f\]*):.*$gdb_prompt $" {
- pass $test
- set bpt2address $expect_out(1,string)
- }
-}
-
-if [istarget "ia64-*-*"] then {
- # Unoptimized code should not use the 3rd slot for the first instruction of
- # a source line. This is important for our test, because we want both
- # breakpoints ("Second breakpoint" and the following one) to be in the same
- # bundle.
-
- set test "Second breakpoint address is valid on ia64"
- if [string match "*\[01\]" $bpt2address] {
- pass $test
-
- gdb_test "b *($bpt2address + 1)" "Breakpoint \[0-9\] at .*" "Third breakpoint on ia64 in the Second breakpoint's bundle"
- } else {
- unresolved $test
- }
-}
+gdb_test "b [gdb_get_line_number "break-second"]" "Breakpoint \[0-9\] at .*" "Second breakpoint placed"
set test "disassembly with breakpoints"
gdb_test_multiple "disass main" $test {