OSDN Git Service

gdb/testsuite/
authorjkratoch <jkratoch>
Tue, 29 Sep 2009 19:24:45 +0000 (19:24 +0000)
committerjkratoch <jkratoch>
Tue, 29 Sep 2009 19:24:45 +0000 (19:24 +0000)
* gdb.base/breakpoint-shadow.exp: Move the ia64 part into ...
* gdb.arch/ia64-breakpoint-shadow.exp: ... a new file, with new tests.
* gdb.arch/ia64-breakpoint-shadow.S: New file.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S [new file with mode: 0644]
gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp [new file with mode: 0644]
gdb/testsuite/gdb.base/breakpoint-shadow.exp

index 96f313a..7297f0c 100644 (file)
@@ -1,3 +1,9 @@
+2009-09-29  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.base/breakpoint-shadow.exp: Move the ia64 part into ...
+       * gdb.arch/ia64-breakpoint-shadow.exp: ... a new file, with new tests.
+       * gdb.arch/ia64-breakpoint-shadow.S: New file.
+
 2009-09-29  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
 
        * gdb.objc/basicclass.exp: Disable pending breakpoint query.
diff --git a/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S b/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S
new file mode 100644 (file)
index 0000000..ad88286
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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
diff --git a/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp b/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp
new file mode 100644 (file)
index 0000000..3d26c47
--- /dev/null
@@ -0,0 +1,80 @@
+# 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
+       }
+    }
+}
index a787bb6..fcc50dd 100644 (file)
@@ -48,29 +48,7 @@ gdb_test_multiple "disass main" $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 {