From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14877 invoked by alias); 24 Oct 2008 00:45:10 -0000 Received: (qmail 14866 invoked by uid 22791); 24 Oct 2008 00:45:08 -0000 X-Spam-Check-By: sourceware.org Received: from smtp-outbound-2.vmware.com (HELO smtp-outbound-2.vmware.com) (65.115.85.73) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 24 Oct 2008 00:44:14 +0000 Received: from mailhost3.vmware.com (mailhost3.vmware.com [10.16.27.45]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id 1560F49007; Thu, 23 Oct 2008 17:44:13 -0700 (PDT) Received: from [10.20.92.59] (promb-2s-dhcp59.eng.vmware.com [10.20.92.59]) by mailhost3.vmware.com (Postfix) with ESMTP id 09BABC9A10; Thu, 23 Oct 2008 17:44:13 -0700 (PDT) Message-ID: <49011935.5080604@vmware.com> Date: Fri, 24 Oct 2008 00:45:00 -0000 From: Michael Snyder User-Agent: Thunderbird 1.5.0.12 (X11/20080411) MIME-Version: 1.0 To: Pedro Alves CC: "gdb-patches@sourceware.org" , teawater Subject: Re: [reverse/record] adjust_pc_after_break in reverse execution mode? References: <200810180210.16346.pedro@codesourcery.com> <49010833.4070400@vmware.com> <200810240045.52818.pedro@codesourcery.com> <200810240054.31546.pedro@codesourcery.com> In-Reply-To: <200810240054.31546.pedro@codesourcery.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-10/txt/msg00597.txt.bz2 Thank you! I'll put it on the branch for now... Does it make sense to include a forward version of this test, for normal (non-reverse/non-replay) targets? Pedro Alves wrote: >> I've done so a bit this morning, and came to a similar >> conclusion, although I noticed Hui's change to set stop_pc in >> TARGET_WAITKIND_NO_HISTORY, also also required. I was wanting >> to find time to play a little bit more, but since you're on to it... > > BTW, I noticed that, while reviewing Hui's latest patch > (which was missing setting the waitkind to TARGET_WAITKIND_STOPPED, > hence could never work :-) ). While doing so, I dejagnufied the > nop testcase into the attached. Maybe you'll find it useful. > > -- > Pedro Alves > > > ------------------------------------------------------------------------ > > 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"