From patchwork Thu Mar 31 08:09:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 11572 Received: (qmail 27964 invoked by alias); 31 Mar 2016 08:10:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 27876 invoked by uid 89); 31 Mar 2016 08:10:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=2016-03-31, 20160331 X-HELO: mail-pf0-f181.google.com Received: from mail-pf0-f181.google.com (HELO mail-pf0-f181.google.com) (209.85.192.181) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 31 Mar 2016 08:10:05 +0000 Received: by mail-pf0-f181.google.com with SMTP id e128so42683528pfe.3 for ; Thu, 31 Mar 2016 01:10:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=VBJ7SZHkZzZW3cybJHSMvrIItBJfOJjd8FtW9Vcg/Do=; b=atrc61frLJlYrYRzrjARLTLMy9AgS/Ix7EWmUCHUrUC56rPLNbH1ZBbOGo1KgEjrzE ZeQlzfmg1c4MOuForeuAvQ1BbE1lVPPuJl8hZ10S/jz202NiUFoHcXUWH+o7eCRjVazs 762ZV/DTp4qRK1FAXXjUOGZHIPslCon5ijGFgbkwi1iQkHBE8G82wUYiBg+Q+QWQOwp4 RTddttmjPTI+A0PTwlPnb3LP5iG4Jl4VQCyXI+UDXmbE8kr6zw5DmTCiW1hKr1DSzD9w J+vqfl/CI8FitR5QVOIae/fJ4+G9UHOH0OwYZWQyy1kqrSzVhfRnxpDfFvPesYHu0u7r YbKg== X-Gm-Message-State: AD7BkJJU2pyLD4B4taG79u/xMr2DrJm3Wn/LfVSyh+fCcDdRjm336Cb06lntsGwYg9gA7A== X-Received: by 10.98.43.7 with SMTP id r7mr15221033pfr.24.1459411803578; Thu, 31 Mar 2016 01:10:03 -0700 (PDT) Received: from E107787-LIN.cambridge.arm.com (power-aix.osuosl.org. [140.211.15.154]) by smtp.gmail.com with ESMTPSA id se8sm11222100pac.44.2016.03.31.01.10.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 31 Mar 2016 01:10:02 -0700 (PDT) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH] Fix gdb.reverse/finish-reverse-bkpt.exp Date: Thu, 31 Mar 2016 09:09:59 +0100 Message-Id: <1459411799-17064-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes I see the following fail on aarch64-linux break void_func Breakpoint 2 at 0x4007a0: file gdb/testsuite/gdb.reverse/finish-reverse.c, line 44. (gdb) PASS: gdb.reverse/finish-reverse-bkpt.exp: set breakpoint on void_func continue Continuing. Breakpoint 2, void_func () at gdb/testsuite/gdb.reverse/finish-reverse.c:44^M 44 void_test = 1; /* VOID FUNC */^M (gdb) PASS: gdb.reverse/finish-reverse-bkpt.exp: continue to breakpoint: void_func break *void_func^M Note: breakpoint 2 also set at pc 0x4007a0.^M Breakpoint 3 at 0x4007a0: file gdb/testsuite/gdb.reverse/finish-reverse.c, line 44. (gdb) PASS: gdb.reverse/finish-reverse-bkpt.exp: set breakpoint at void_func's entry reverse-finish^M Run back to call of #0 void_func () at gdb/testsuite/gdb.reverse/finish-reverse.c:44 main (argc=1, argv=0x7ffffffb78) at gdb/testsuite/gdb.reverse/finish-reverse.c:98 98 void_func (); /* call to void_func */^M (gdb) FAIL: gdb.reverse/finish-reverse-bkpt.exp: reverse-finish from void_func trips breakpoint at entry The test assumes that brekapoints on "void_func" and "*void_func" are set on different places because of function prologue. However, on aarch64-linux, there is no prologue in void_func, so two breakpoints are set at the same place (0x4007a0). (gdb) disassemble void_func Dump of assembler code for function void_func: 0x00000000004007a0 <+0>: adrp x0, 0x410000 0x00000000004007a4 <+4>: add x0, x0, #0xc14 0x00000000004007a8 <+8>: mov w1, #0x1 0x00000000004007ac <+12>: str w1, [x0] 0x00000000004007b0 <+16>: ret The fix to this problem is to single step forward before setting breakpoint on *void_func. gdb/testsuite: 2016-03-31 Yao Qi * gdb.reverse/finish-reverse-bkpt.exp: Use temporary breakpoint. Execute "si" command. --- gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp b/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp index ccc332d..1dff8e1 100644 --- a/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp +++ b/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp @@ -40,11 +40,16 @@ if [supports_process_record] { } set breakloc [gdb_get_line_number "VOID FUNC" "$srcfile"] -gdb_test "break void_func" \ - "Breakpoint $decimal at .*$srcfile, line $breakloc\." \ +gdb_test "tbreak void_func" \ + "Temporary breakpoint $decimal at .*$srcfile, line $breakloc\." \ "set breakpoint on void_func" gdb_continue_to_breakpoint "void_func" ".*$srcfile:$breakloc.*" +# We stop at the brekapoint on void_func, but breakpoint on +# *void_func will be set at the same place if function void_func doesn't +# have prologue. One step forward to avoid this. +gdb_test "si" + gdb_test "break \*void_func" \ "Breakpoint $decimal at .*" \ "set breakpoint at void_func's entry"