From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3501 invoked by alias); 29 Sep 2009 18:55:53 -0000 Received: (qmail 3492 invoked by uid 22791); 29 Sep 2009 18:55:52 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 29 Sep 2009 18:55:47 +0000 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n8TItOWj005938; Tue, 29 Sep 2009 14:55:24 -0400 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n8TItKmv010763 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 29 Sep 2009 14:55:23 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.3/8.14.3) with ESMTP id n8TItKde000675; Tue, 29 Sep 2009 20:55:20 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.3/8.14.3/Submit) id n8TItIvP000674; Tue, 29 Sep 2009 20:55:18 +0200 Date: Tue, 29 Sep 2009 18:55:00 -0000 From: Jan Kratochvil To: Joel Brobecker Cc: gdb-patches@sourceware.org Subject: Re: [RFA/commit] ia64: incorrect breakpoint save/restore with L-type instruction at slot 1 Message-ID: <20090929185518.GA598@host0.dyn.jankratochvil.net> References: <20090925204835.GF5077@adacore.com> <20090926215709.GA26221@host0.dyn.jankratochvil.net> <20090929001641.GH9003@adacore.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090929001641.GH9003@adacore.com> User-Agent: Mutt/1.5.20 (2009-08-17) 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/msg00930.txt.bz2 On Tue, 29 Sep 2009 02:16:41 +0200, Joel Brobecker wrote: > So I checked it in both HEAD and branch (I want to add some comments > as discussed on IRC). Yes, I agree, thanks for all the work. > However, even if the logical way of storing the new value for our long > is to use an L+X instruction on ia64, I am wondering if we wouldn't be > better off building our executable from assembly instead of from source, Yes, I agree the file gdb.base/breakpoint-shadow.exp now became the same as its former ia64-less revision 1.1. > If we go for the gdb.arch approach, we can then remove the who section > specific to ia64 from breakpoint-shadow.exp. Done. OK to check-in? Even on branch? Thanks, Jan gdb/testsuite/ 2009-09-29 Jan Kratochvil * gdb.base/breakpoint-shadow.exp: Move the ia64 part into ... * gdb.arch/ia64-breakpoint-shadow.exp, ... a new file, with new tests. * gdb.arch/ia64-breakpoint-shadow.S: New file. --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S 29 Sep 2009 18:50:29 -0000 @@ -0,0 +1,44 @@ +/* Copyright 2009 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. + It tests displaced stepping over various insns that require special + handling. */ + + .text + .align 16 + .global main + .proc main +main: + mov r2=r12 + mov r14=1 + ;; +bundle: + /* Store value 1 into `long' variable on stack. */ + st8.rel [r2]=r14 + /* This long constant requires L-X slot in this bundle. */ + movl r14=0x7fffffff + ;; + /* Store value 0x7fffffff into `long' variable on stack. */ + st8.rel [r2]=r14 + mov r14=r0 + ;; + mov r8=r14 + mov r12=r2 + br.ret.sptk.many b0 + + .endp main + + .section .note.GNU-stack,"",@progbits --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp 29 Sep 2009 18:50:29 -0000 @@ -0,0 +1,80 @@ +# Copyright 2009 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 ![istarget "ia64-*-*"] { + verbose "Skipping ia64-breakpoint-shadow test." + return +} + +set testfile ia64-breakpoint-shadow +set srcfile ${testfile}.S +set binfile ${objdir}/${subdir}/${testfile} +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# We need to start the inferior to place the breakpoints in the memory at all. +if ![runto_main] { + untested start + return -1 +} + +# The default "auto" mode removes all the breakpoints when we stop (and not +# running the nonstop mode). We would not be able to test the shadow. +gdb_test "set breakpoint always-inserted on" +gdb_test "show breakpoint always-inserted" "Always inserted breakpoint mode is on." + +set match "\nDump of assembler code for function main:\r\n(.*)End of assembler dump.\r\n$gdb_prompt $" + +set test "disassembly without breakpoints" +gdb_test_multiple "disass main" $test { + -re $match { + set orig $expect_out(1,string) + pass $test + } +} + +set test "slot 0 breakpoint placed" +gdb_test_multiple "b bundle" $test { + -re "Breakpoint \[0-9\] at (0x\[0-9a-f\]*0):.*$gdb_prompt $" { + pass $test + set bpt2address $expect_out(1,string) + } +} + +if ![info exists bpt2address] { + return -1 +} + +gdb_test "b *($bpt2address + 1)" "Breakpoint \[0-9\] at .*" "slot 1 breakpoint placed" +gdb_test "b *($bpt2address + 2)" "Can't insert breakpoint for non-existing slot X" "slot 2 (slot X) breakpoint refusal" + +set test "disassembly with breakpoints" +gdb_test_multiple "disass main" $test { + -re $match { + set got $expect_out(1,string) + if [string equal -nocase $orig $got] { + pass $test + } else { + fail $test + } + } +} --- gdb/testsuite/gdb.base/breakpoint-shadow.exp 10 Sep 2009 22:26:51 -0000 1.4 +++ gdb/testsuite/gdb.base/breakpoint-shadow.exp 29 Sep 2009 18:50:29 -0000 @@ -48,29 +48,7 @@ gdb_test_multiple "disass main" $test { } gdb_test "b [gdb_get_line_number "break-first"]" "Breakpoint \[0-9\] at .*" "First breakpoint placed" -set test "Second breakpoint placed" -gdb_test_multiple "b [gdb_get_line_number "break-second"]" $test { - -re "Breakpoint \[0-9\] at (0x\[0-9a-f\]*):.*$gdb_prompt $" { - pass $test - set bpt2address $expect_out(1,string) - } -} - -if [istarget "ia64-*-*"] then { - # Unoptimized code should not use the 3rd slot for the first instruction of - # a source line. This is important for our test, because we want both - # breakpoints ("Second breakpoint" and the following one) to be in the same - # bundle. - - set test "Second breakpoint address is valid on ia64" - if [string match "*\[01\]" $bpt2address] { - pass $test - - gdb_test "b *($bpt2address + 1)" "Breakpoint \[0-9\] at .*" "Third breakpoint on ia64 in the Second breakpoint's bundle" - } else { - unresolved $test - } -} +gdb_test "b [gdb_get_line_number "break-second"]" "Breakpoint \[0-9\] at .*" "Second breakpoint placed" set test "disassembly with breakpoints" gdb_test_multiple "disass main" $test {