From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 80725 invoked by alias); 23 Feb 2016 20:28:00 -0000 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 Received: (qmail 79323 invoked by uid 89); 23 Feb 2016 20:27:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=Step, Hx-languages-length:3628, cond_bp_target X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Feb 2016 20:27:58 +0000 Received: from svr-orw-fem-05.mgc.mentorg.com ([147.34.97.43]) by relay1.mentorg.com with esmtp id 1aYJYp-0000Iy-5c from Luis_Gustavo@mentor.com ; Tue, 23 Feb 2016 12:27:55 -0800 Received: from [172.30.1.130] (147.34.91.1) by svr-orw-fem-05.mgc.mentorg.com (147.34.97.43) with Microsoft SMTP Server id 14.3.224.2; Tue, 23 Feb 2016 12:27:54 -0800 Subject: Re: [PATCH 5/8] Step over fork/vfork syscall insn in gdbserver References: <1455892594-2294-1-git-send-email-yao.qi@linaro.org> <1455892594-2294-6-git-send-email-yao.qi@linaro.org> To: Yao Qi , Reply-To: Luis Machado From: Luis Machado Message-ID: <56CCC0C8.7040404@codesourcery.com> Date: Tue, 23 Feb 2016 20:28:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1455892594-2294-6-git-send-email-yao.qi@linaro.org> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-02/txt/msg00699.txt.bz2 Just one comment nit. On 02/19/2016 12:36 PM, Yao Qi wrote: > We can also extend disp-step-syscall.exp to test GDBserver step over > breakpoint on syscall instruction. That is, we set a breakpoint > with a false condition on syscall instruction, so that GDBserver will > step over it. > > This test triggers a GDBserver internal error, which can be fixed by > this series. > > (gdb) PASS: gdb.base/disp-step-syscall.exp: fork: break cond on target: break on syscall insns > continue^M > Continuing.^M > Remote connection closed^M > (gdb) FAIL: gdb.base/disp-step-syscall.exp: fork: break cond on target: continue to fork again > > In GDBserver, there is an internal error, > > /home/yao/SourceCode/gnu/gdb/git/gdb/gdbserver/linux-low.c:1922: A problem internal to GDBserver has been detected. > unsuspend LWP 25554, suspended=-1 > > the simplified reproducer is like, > > $ ./gdb ./testsuite/outputs/gdb.base/disp-step-syscall/disp-step-fork > (gdb) b main > (gdb) c > (gdb) disassemble fork // in order to find the address of insn 'syscall' > .... > 0x00007ffff7ad6023 <+179>: syscall > (gdb) b *0x00007ffff7ad6023 if main == 0 > (gdb) c > > gdb/testsuite: > > 2016-02-19 Yao Qi > > * gdb.base/disp-step-fork.c (main): Increase loop boundary. > * gdb.base/disp-step-vfork.c (main): Likewise. > * gdb.base/disp-step-syscall.exp (disp_step_cross_syscall): Test > breakpoint condition evaluated on the target side. > --- > gdb/testsuite/gdb.base/disp-step-fork.c | 2 +- > gdb/testsuite/gdb.base/disp-step-syscall.exp | 38 ++++++++++++++++++++++++++++ > gdb/testsuite/gdb.base/disp-step-vfork.c | 2 +- > 3 files changed, 40 insertions(+), 2 deletions(-) > > diff --git a/gdb/testsuite/gdb.base/disp-step-fork.c b/gdb/testsuite/gdb.base/disp-step-fork.c > index d8d602f..6d477ea 100644 > --- a/gdb/testsuite/gdb.base/disp-step-fork.c > +++ b/gdb/testsuite/gdb.base/disp-step-fork.c > @@ -26,7 +26,7 @@ main (void) > { > int i, pid; > > - for (i = 0; i < 4; i++) > + for (i = 0; i < 6; i++) > { > pid = fork (); > if (pid == 0) /* child */ > diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp > index 9e43fbb..53ac1e1 100644 > --- a/gdb/testsuite/gdb.base/disp-step-syscall.exp > +++ b/gdb/testsuite/gdb.base/disp-step-syscall.exp > @@ -153,6 +153,44 @@ proc disp_step_cross_syscall { syscall } { > } > } > > + with_test_prefix "break cond on target" { > + set cond_bp_target 1 > + > + set test "set breakpoint condition-evaluation target" > + gdb_test_multiple $test $test { > + -re "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n$gdb_prompt $" { > + # Target doesn't support breakpoint condition > + # evaluation on its side. > + set cond_bp_target 0 > + } > + -re "^$test\r\n$gdb_prompt $" { > + } > + } > + > + if { $cond_bp_target } { > + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ > + "continue to $syscall" > + > + # Create a breakpoint with the condition which is false. > + set syscall_insn_bp 0 > + gdb_test_multiple "break \*$syscall_insn_addr if main == 0" \ > + "break on syscall insns" { > + -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { > + set syscall_insn_bp $expect_out(1,string) > + pass "break on syscall insns" > + } > + } > + > + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ > + "continue to $syscall again" > + > + # Delete breakpoint syscall insns to avoid interference to "... interference with..."?