From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 43175 invoked by alias); 14 Jan 2020 04:25:27 -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 43167 invoked by uid 89); 14 Jan 2020 04:25:26 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-17.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 14 Jan 2020 04:25:24 +0000 Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id C63601E05A; Mon, 13 Jan 2020 23:25:22 -0500 (EST) Subject: Re: [PATCH 2/2][AArch64] Test handling of additional brk instruction patterns To: Luis Machado , gdb-patches@sourceware.org Cc: alan.hayward@arm.com, tankut.baris.aktemur@intel.com References: <20200113172524.7201-1-luis.machado@linaro.org> <20200113172524.7201-3-luis.machado@linaro.org> From: Simon Marchi Message-ID: Date: Tue, 14 Jan 2020 05:03:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <20200113172524.7201-3-luis.machado@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2020-01/txt/msg00364.txt.bz2 On 2020-01-13 12:25 p.m., Luis Machado wrote: > This test exercises the previous patch's code and makes sure GDB can > properly get a SIGTRAP from various brk instruction patterns. > > GDB needs to be able to see the program exiting normally. If GDB doesn't > support the additional brk instructions, we will see timeouts. > > We bail out with the first timeout since we won't be able to step through > the program breakpoint anyway, so it is no use carrying on. > > gdb/testsuite/ChangeLog: > > 2020-01-13 Luis Machado > > * gdb.arch/aarch64-brk-patterns.c: New source file. > * gdb.arch/aarch64-brk-patterns.exp: New test. > --- > gdb/testsuite/gdb.arch/aarch64-brk-patterns.c | 30 +++++++++ > .../gdb.arch/aarch64-brk-patterns.exp | 67 +++++++++++++++++++ > 2 files changed, 97 insertions(+) > create mode 100644 gdb/testsuite/gdb.arch/aarch64-brk-patterns.c > create mode 100644 gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp > > diff --git a/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c b/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c > new file mode 100644 > index 0000000000..ccf9a35a94 > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c > @@ -0,0 +1,30 @@ > +/* This file is part of GDB, the GNU debugger. > + > + Copyright 2020 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(void) > +{ > + /* Dummy instruction just so GDB doesn't stop at the first breakpoint > + instruction. */ > + __asm __volatile ("nop\n\t"); > + > + /* Multiple BRK instruction patterns. */ > + __asm __volatile ("brk %0\n\t" ::"n"(0x0)); > + __asm __volatile ("brk %0\n\t" ::"n"(0x900 + 0xf)); > + __asm __volatile ("brk %0\n\t" ::"n"(0xf000)); > + > + return 0; > +} > diff --git a/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp b/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp > new file mode 100644 > index 0000000000..3532a0df95 > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp > @@ -0,0 +1,67 @@ > +# Copyright 2020 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 . > +# > +# This file is part of the gdb testsuite. > + > +# Test if GDB stops at various BRK instruction patterns inserted into > +# the code. > + > +if {![is_aarch64_target]} { > + verbose "Skipping ${gdb_test_file_name}." > + return > +} > + > +standard_testfile > +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { > + return -1 > +} > + > +if ![runto_main] { > + untested "could not run to main" > + return -1 > +} > + > +set keep_going 1 > +set count 0 > +set old_timeout $timeout > +set timeout 10 > + > +while { $keep_going } { > + > + set test "brk instruction $count causes SIGTRAP" > + > + # Continue to next program breakpoint instruction. > + gdb_test_multiple "continue" $test { > + -re "Program received signal SIGTRAP, Trace/breakpoint trap.*$gdb_prompt $" { > + pass $test > + > + # Insert a breakpoint at the program breakpoint instruction so GDB > + # can step over it. > + gdb_test "break" \ > + "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \ > + "insert breakpoint at brk instruction $count" > + } > + -re "exited normally.*$gdb_prompt $" { > + set keep_going 0 > + } > + timeout { > + fail $test > + set keep_going 0 > + } > + } > + set count [expr "$count + 1"] > +} > + > +set timeout $old_timeout > -- > 2.17.1 > I don't see anything wrong with the test, but I was wondering if we should assert that $count is the right value in the end, to make sure that we did hit the expected number of breakpoints. Simon