From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29358 invoked by alias); 3 Sep 2009 18:44:09 -0000 Received: (qmail 29350 invoked by uid 22791); 3 Sep 2009 18:44:08 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from vtab.com (HELO oden.vtab.com) (62.20.90.195) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 03 Sep 2009 18:44:01 +0000 Received: from oden.vtab.com (oden.vtab.com [127.0.0.1]) by oden.vtab.com (Postfix) with ESMTP id 8D92626EF39; Thu, 3 Sep 2009 20:43:57 +0200 (CEST) Received: from polhem (unknown [62.20.90.206]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by oden.vtab.com (Postfix) with ESMTP id 431F926EE98; Thu, 3 Sep 2009 20:43:57 +0200 (CEST) From: "Jakob Engblom" To: "'Vladimir Prus'" , References: <00d001ca265a$ddd0c800$99725800$@com> In-Reply-To: Subject: RE: GDB MI Reverse Commands added [3 of 3] Date: Thu, 03 Sep 2009 18:44:00 -0000 Message-ID: <018401ca2cc6$7c2581a0$747084e0$@com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0185_01CA2CD7.3FAE51A0" 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: 2009-09/txt/msg00087.txt.bz2 This is a multi-part message in MIME format. ------=_NextPart_000_0185_01CA2CD7.3FAE51A0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-length: 1159 > The file should be called mi-reverse.exp, I think, because mi2- files are > supposed to test > that whatever was once announced as MI2 is not broken. And this is new > development. Likewise, Done. > set MIFLAGS "-i=mi2" > > should be: > > set MIFLAGS "-i=mi" Done. > Also, I would appreciate if this: > > # Test exec-reverse-next > # FIXME: Why does it take 2 next commands to get back to the > # previous line? > > were somehow addressed. I am not familiar with details of reverse behaviour, so I > did not even try to check that the tested commands and locations, etc, are right. Since this is tested on top of process record, I think I am not the best person to answer... but in general, what tends to happen in reverse in my experience is this: We have lines of code (or instructions) A B And we stop with a breakpoint in line B. We are then at the end of B, or in the middle of B, in the execution. Then, doing reverse one step/instruction/line will move you to the start of B. And another step/instruction/line moves you to before A was executed. Does that make sense for process record? /jakob ------=_NextPart_000_0185_01CA2CD7.3FAE51A0 Content-Type: application/octet-stream; name="mi-reverse.exp" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="mi-reverse.exp" Content-length: 6675 # Copyright 2009=0A= # Free Software Foundation, Inc.=0A= =0A= # This program is free software; you can redistribute it and/or modify=0A= # it under the terms of the GNU General Public License as published by=0A= # the Free Software Foundation; either version 3 of the License, or=0A= # (at your option) any later version.=0A= #=0A= # This program is distributed in the hope that it will be useful,=0A= # but WITHOUT ANY WARRANTY; without even the implied warranty of=0A= # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the=0A= # GNU General Public License for more details.=0A= #=0A= # You should have received a copy of the GNU General Public License=0A= # along with this program. If not, see .=0A= =0A= # Test Machine interface (MI) operations=0A= # Verify that, using the MI, we can run a simple program in both forward=0A= # and reverse directions with the following execution commands:=0A= # - exec-continue=0A= # - exec-finish=0A= # - exec-next=0A= # - exec-step=0A= # - exec-next-instruction=0A= # - exec-step-instruction=0A= =0A= # The goal is not to test gdb functionality, which is done by other tests,= =0A= # but to verify the correct output response to MI operations.=0A= #=0A= =0A= if ![target_info exists gdb,can_reverse] {=0A= return=0A= }=0A= =0A= load_lib mi-support.exp=0A= set MIFLAGS "-i=3Dmi"=0A= =0A= gdb_exit=0A= if [mi_gdb_start] {=0A= continue=0A= }=0A= =0A= set testfile "basics"=0A= set srcfile ${testfile}.c=0A= set binfile ${objdir}/${subdir}/mi2-reverse=0A= if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable= {debug additional_flags=3D-DFAKEARGV}] !=3D "" } {=0A= untested mi2-reverse.exp=0A= return -1=0A= }=0A= =0A= mi_run_to_main=0A= =0A= if [target_info exists gdb,use_precord] {=0A= # Activate process record/replay=0A= if [mi_gdb_test "-interpreter-exec console record" \=0A= {\^done} "Turn on process record"] {=0A= warning "Fail to activate process record/replay, tests in this group will = not be performed.\n";=0A= return -1=0A= }=0A= }=0A= =0A= # Locate line numbers in basics.c.=0A= set line_callee4_head [gdb_get_line_number "callee4 ("]=0A= set line_callee4_body [expr $line_callee4_head + 2]=0A= set line_callee3_head [gdb_get_line_number "callee3 ("]=0A= set line_callee3_body [expr $line_callee3_head + 2]=0A= set line_callee3_close [expr $line_callee3_head + 3]=0A= set line_callee2_head [gdb_get_line_number "callee2 ("]=0A= set line_callee2_body [expr $line_callee2_head + 2]=0A= set line_callee2_close [expr $line_callee2_head + 3]=0A= set line_callee1_head [gdb_get_line_number "callee1 ("]=0A= set line_callee1_body [expr $line_callee1_head + 2]=0A= set line_callee1_close [expr $line_callee1_head + 3]=0A= set line_callme_head [gdb_get_line_number "callme"]=0A= set line_callme_body [expr $line_callme_head + 2]=0A= set line_main_head [gdb_get_line_number "main ("]=0A= set line_main_body [expr $line_main_head + 2]=0A= set line_main_hello [gdb_get_line_number "Hello, World!"]=0A= set line_main_callme_1 [gdb_get_line_number "callme (1"]=0A= =0A= # Forward execute to the callme() function, so that we can=0A= # execute backward from there.=0A= mi_continue_to callme=0A= mi_delete_breakpoints=0A= =0A= proc test_controlled_execution_reverse {} {=0A= global mi_gdb_prompt=0A= global srcfile=0A= global hex=0A= =0A= global line_callee4_head line_callee4_body=0A= global line_callee3_head line_callee3_body line_callee3_close=0A= global line_callee2_head line_callee2_body line_callee2_close=0A= global line_callee1_head line_callee1_body line_callee1_close=0A= global line_main_head line_main_body=0A= global line_main_hello line_main_callme_1=0A= =0A= # Test exec-reverse-finish=0A= =0A= mi_execute_to "exec-finish --reverse" \=0A= "end-stepping-range" "main" "" \=0A= "basics.c" $line_main_callme_1 "" \=0A= "reverse finish from callme"=0A= =0A= # Test exec-reverse-next=0A= # It takes two steps to get back to the previous line,=0A= # as the first step moves us to the start of the current line,=0A= # and the one after that moves back to the previous line.=0A= =0A= mi_execute_to "exec-next --reverse 2" \=0A= "end-stepping-range" "main" "" \=0A= "basics.c" $line_main_hello "" \=0A= "reverse next to get over the call to do_nothing"=0A= =0A= # Test exec-reverse-step=0A= =0A= mi_execute_to "exec-step --reverse" \=0A= "end-stepping-range" "callee1" \=0A= "\{name=3D\"intarg\",value=3D\"2\"\},\{name=3D\"strarg\",value=3D\"$hex \\= \\\"A string argument\.\\\\\"\"\},\{name=3D\"fltarg\",value=3D\"3.5\"\}" \= =0A= "basics.c" $line_callee1_close "" \=0A= "reverse step to callee1"=0A= =0A= mi_execute_to "exec-step --reverse" \=0A= "end-stepping-range" "callee2" \=0A= "\{name=3D\"intarg\",value=3D\"2\"\},\{name=3D\"strarg\",value=3D\"$hex \\= \\\"A string argument\.\\\\\"\"\}" \=0A= "basics.c" $line_callee2_close "" \=0A= "reverse step to callee2"=0A= =0A= mi_execute_to "exec-step --reverse" \=0A= "end-stepping-range" "callee3" \=0A= "\{name=3D\"strarg\",value=3D\"$hex \\\\\"A string argument\.\\\\\"\"\}" \= =0A= "basics.c" $line_callee3_close "" \=0A= "reverse step to callee3"=0A= =0A= mi_execute_to "exec-step --reverse" \=0A= "end-stepping-range" "callee4" "" \=0A= "basics.c" "\[0-9\]+" "" \=0A= "reverse step to callee4"=0A= =0A= # Test exec-reverse-[step|next]-instruction=0A= =0A= mi_execute_to "exec-step-instruction --reverse" \=0A= "end-stepping-range" "callee4" "" \=0A= "basics.c" "\[0-9\]+" "" \=0A= "reverse-step-instruction at callee4"=0A= =0A= mi_execute_to "exec-next-instruction --reverse" \=0A= "end-stepping-range" "callee4" "" \=0A= "basics.c" "\[0-9\]+" "" \=0A= "reverse-next-instruction at callee4"=0A= =0A= # Test exec-reverse-continue=0A= =0A= mi_create_breakpoint "-t basics.c:$line_callee3_head" \=0A= 3 del callee3 ".*basics.c" $line_callee3_head $hex \=0A= "insert temp breakpoint at basics.c:$line_callee3_head"=0A= =0A= mi_execute_to "exec-continue --reverse" \=0A= "breakpoint-hit" "callee3" \=0A= "\{name=3D\"strarg\",value=3D\"$hex \\\\\"A string argument\.\\\\\"\"\}" \= =0A= "basics.c" "\[0-9\]+" \=0A= { "" "disp=3D\"del\""} \=0A= "reverse-continue at callee3"=0A= =0A= mi_execute_to "exec-continue --reverse" \=0A= "" "main" "" \=0A= "basics.c" $line_main_body "" \=0A= "reverse-continue at main"=0A= }=0A= =0A= test_controlled_execution_reverse=0A= =0A= mi_gdb_exit=0A= return 0=0A= ------=_NextPart_000_0185_01CA2CD7.3FAE51A0--