From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32075 invoked by alias); 19 Feb 2004 23:10:08 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 31866 invoked from network); 19 Feb 2004 23:09:59 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 19 Feb 2004 23:09:59 -0000 Received: from int-mx2.corp.redhat.com (nat-pool-rdu-dmz.redhat.com [172.16.52.200] (may be forged)) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id i1JN9ub16897 for ; Thu, 19 Feb 2004 18:09:56 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i1JN9tM26535; Thu, 19 Feb 2004 18:09:55 -0500 Received: from 192.168.1.129 (vpn50-71.rdu.redhat.com [172.16.50.71]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id i1JN9rX06530; Thu, 19 Feb 2004 15:09:53 -0800 From: Fred Fish Reply-To: fnf@redhat.com To: Elena Zannoni , fnf@redhat.com Subject: Re: [RFA] Handle sh-elf-gcc scheduling code into a prologue when no debug info present Date: Thu, 19 Feb 2004 23:10:00 -0000 User-Agent: KMail/1.5.4 Cc: gdb-patches@sources.redhat.com, fnf@redhat.com References: <200402121505.37560.fnf@ninemoons.com> <16432.58615.340874.880645@localhost.redhat.com> <200402161114.57944.fnf@ninemoons.com> In-Reply-To: <200402161114.57944.fnf@ninemoons.com> MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200402191609.21026.fnf@ninemoons.com> Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-SW-Source: 2004-02/txt/msg00546.txt.bz2 On Monday 16 February 2004 11:14, Fred Fish wrote: > I'll post an updated patch when I have a test ready to go with it, and > then check them in. Committed. Here is the pair of patches, one to the testsuite and one to the main gdb directory. -Fred ############################################################################ 2004-02-19 Fred Fish New testcase for PR breakpoint/1558. * gdb.arch/gdb1558.exp: New file. * gdb.arch/gdb1558.c: New file. Index: testsuite/gdb.arch/gdb1558.c =================================================================== RCS file: testsuite/gdb.arch/gdb1558.c diff -N testsuite/gdb.arch/gdb1558.c *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/gdb.arch/gdb1558.c 19 Feb 2004 22:49:44 -0000 *************** *** 0 **** --- 1,36 ---- + /* Copyright 2004 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Please email any bugs, comments, and/or additions to this file to: + bug-gdb@gnu.org + + This file is part of the gdb testsuite. */ + + sub1 () + { + printf ("In sub1\n"); + } + + sub2 () + { + printf ("In sub2\n"); + } + + main () + { + sub1 (); + sub2 (); + } Index: testsuite/gdb.arch/gdb1558.exp =================================================================== RCS file: testsuite/gdb.arch/gdb1558.exp diff -N testsuite/gdb.arch/gdb1558.exp *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/gdb.arch/gdb1558.exp 19 Feb 2004 22:49:44 -0000 *************** *** 0 **** --- 1,72 ---- + # Copyright 2004 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 2 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, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + # Please email any bugs, comments, and/or additions to this file to: + # bug-gdb@gnu.org + + # This file is part of the gdb testsuite. + + # Tests for PR:1558. Hits breakpoint at main after function called + # from main. + + if $tracelevel { + strace $tracelevel + } + + set prms_id 0 + set bug_id 0 + + if ![istarget "sh-*-*"] then { + verbose "Skipping SH breakpoint test." + return + } + + set testfile "gdb1558" + set srcfile ${testfile}.c + set binfile ${objdir}/${subdir}/${testfile} + # Note we have to compile WITH optimization and WITHOUT debugging information to expose the bug. + if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {"additional_flags=-O2"}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." + } + + gdb_exit + gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} + + gdb_test "b main" "Breakpoint 1.*" "set breakpoint at main" + gdb_test "b sub1" "Breakpoint 2.*" "set breakpoint at sub1" + gdb_test "b sub2" "Breakpoint 3.*" "set breakpoint at sub2" + + # We can't use "runto_main" because that is exactly the problem + # we are trying to detect, stopping somewhere before main. + + gdb_run_cmd + + gdb_expect 30 { + -re "Breakpoint 1.*main .*$gdb_prompt $" { + pass "Hits breakpoint at main after function called from main" + } + -re "Breakpoint 2.*sub1 .*$gdb_prompt $" { + kfail "gdb/1558" "Hits breakpoint at main after function called from main" + } + -re "$gdb_prompt $" { + fail "Hits breakpoint at main after function called from main" + } + timeout { + fail "Hits breakpoint at main after function called from main (timeout)" + } + } ############################################################################ 2004-02-19 Fred Fish Fix for PR breakpoint/1558. * sh-tdep.c (IS_JSR): New macro. (sh_analyze_prologue): Use IS_JSR to terminate prologue scan. Index: sh-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/sh-tdep.c,v retrieving revision 1.163 diff -c -p -r1.163 sh-tdep.c *** sh-tdep.c 17 Feb 2004 16:04:19 -0000 1.163 --- sh-tdep.c 19 Feb 2004 22:49:39 -0000 *************** sh_breakpoint_from_pc (CORE_ADDR *pcptr, *** 311,316 **** --- 311,319 ---- #define GET_SOURCE_REG(x) (((x) >> 4) & 0xf) #define GET_TARGET_REG(x) (((x) >> 8) & 0xf) + /* JSR @Rm 0100mmmm00001011 */ + #define IS_JSR(x) (((x) & 0xf0ff) == 0x400b) + /* STS.L PR,@-r15 0100111100100010 r15-4-->r15, PR-->(r15) */ #define IS_STS(x) ((x) == 0x4f22) *************** sh_analyze_prologue (CORE_ADDR pc, CORE_ *** 508,513 **** --- 511,530 ---- else break; } + break; + } + else if (IS_JSR (inst)) + { + /* We have found a jsr that has been scheduled into the prologue. + If we continue the scan and return a pc someplace after this, + then setting a breakpoint on this function will cause it to + appear to be called after the function it is calling via the + jsr, which will be very confusing. Most likely the next + instruction is going to be IS_MOV_SP_FP in the delay slot. If + so, note that before returning the current pc. */ + inst = read_memory_integer (pc + 2, 2); + if (IS_MOV_SP_FP (inst)) + cache->uses_fp = 1; break; } #if 0 /* This used to just stop when it found an instruction that ############################################################################