2008-10-24 Pedro Alves * gdb.base/decr-pc-rev.c, gdb.base/decr-pc-rev.exp: New test. --- gdb/testsuite/gdb.base/decr-pc-rev.c | 26 +++++++++ gdb/testsuite/gdb.base/decr-pc-rev.exp | 86 +++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) Index: src/gdb/testsuite/gdb.base/decr-pc-rev.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/testsuite/gdb.base/decr-pc-rev.c 2008-10-23 15:21:02.000000000 +0100 @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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 . */ + +int +main () +{ + asm ("nop"); /* first insn */ + asm ("nop"); /* second insn */ + asm ("nop"); /* third insn */ + asm ("nop"); /* fourth insn */ + return 0; +} Index: src/gdb/testsuite/gdb.base/decr-pc-rev.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/testsuite/gdb.base/decr-pc-rev.exp 2008-10-23 15:21:02.000000000 +0100 @@ -0,0 +1,86 @@ +# Copyright 2008 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 . + +if $tracelevel then { + strace $tracelevel +} + +# Test PC adjustment behaviour on decr_pc_after_break archs in reverse +# and replay modes, in the presence of breakpoints at consecutive +# instruction addresses. + +set testfile "decr-pc-rev" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } { + untested consecutive.exp + return -1 +} + +if [get_compiler_info ${binfile}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if [target_info exists gdb_stub] { + gdb_step_for_stub; +} + +if ![runto_main] then { + perror "couldn't run to breakpoint" + continue +} + +# These breakpoint should be placed at consecutive instructions, such +# that the address difference between them is equal to +# decr_pc_after_break on this arquitecture. + +set bp_location1 [gdb_get_line_number "first insn"] +set bp_location2 [gdb_get_line_number "second insn"] + +# Enable recording. + +gdb_test "record" "" "enable record target" + +# Step through the breakpoints creating some history. + +gdb_test "next" ".*second insn.*" "next (1)" +gdb_test "next" ".*third insn.*" "next (2)" +gdb_test "next" ".*fourth insn.*" "next (3)" +gdb_test "next" ".*return 0.*" "next (4)" + +# Set consecutive breakpoints. + +gdb_test "break $bp_location1" \ + ".*Breakpoint .*$srcfile, line $bp_location1\\." \ + "first breakpoint line number" + +gdb_test "break $bp_location2" \ + "Breakpoint.*at.* file .*$srcfile, line $bp_location2\\." \ + "second breakpoint line number" + +# Test that reverse-continue doesn't mess with decr_pc_after_break + +gdb_test "rc" ".*second insn.*" "reverse continue to breakpoint" +gdb_test "rn" ".*first insn.*" "reverse next to begining of times" + +# Test that replay behaves as normal play. +gdb_test "next" ".*second insn.*" "next (1) in replay" +gdb_test "next" ".*third insn.*" "next (2) in replay"