From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6472 invoked by alias); 3 Mar 2005 17:34:53 -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 6018 invoked from network); 3 Mar 2005 17:34:48 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sourceware.org with SMTP; 3 Mar 2005 17:34:48 -0000 Received: from drow by nevyn.them.org with local (Exim 4.44 #1 (Debian)) id 1D6uDj-0007R9-Gu for ; Thu, 03 Mar 2005 12:34:43 -0500 Date: Thu, 03 Mar 2005 17:34:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: Re: [RFA] New GDB target iq2000 Message-ID: <20050303173443.GD18681@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com References: <20050222114141.GA18314@cygbert.vinschen.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050222114141.GA18314@cygbert.vinschen.de> User-Agent: Mutt/1.5.6+20040907i X-SW-Source: 2005-03/txt/msg00033.txt.bz2 On Tue, Feb 22, 2005 at 12:41:41PM +0100, Corinna Vinschen wrote: > Hi, > > this posting contributes the iq2000 code for GDB. > > There's just one problem with it. Older GCC code (older than two days, > actually), emits an asymmetrical register numbering in the dwarf2 debugging > output. The iq2000 uses register 31 as link register, which contains the > return address to the calling function. For some reason GCC emitted the > register number 26 in the dwarf2 information for this register. Every > other register has been used unchanged in dwarf2, so there was no > unambiguous translation from dwarf2 register numbers to real register > numbers, if the dwarf2 register was "26". This has been fixed yesterday > in GCC HEAD. > > As a result, the dwarf2 frame sniffer has a problem with code generated > by GCC's older than two days. This is no problem for the iq2000 frame > sniffer implemented in iq2000-tdep.c, but as usual, the iq2000 frame > sniffer is appended after the dwarf2 frame sniffer: > > frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer); > frame_unwind_append_sniffer (gdbarch, iq2000_frame_sniffer); > > Would that be a good reason to disable the dwarf2 frame sniffer for now? > Or shall I leave that as is? It's up to you; I think leaving it as is and writing off the problem as a broken compiler will probably be good enough for the iq2000 userbase. If it isn't, we can come back to the problem later. It looks good to me, but I have one concern. You've got find_last_line_symbol: > +/* Function: find_last_line_symbol > + > + Given an address range, first find a line symbol corresponding to > + the starting address. Then find the last line symbol within the > + range that has a line number less than or equal to the first line. > + > + For optimized code with code motion, this finds the last address > + for the lowest-numbered line within the address range. */ And you've got this too: > +static CORE_ADDR > +iq2000_skip_prologue (CORE_ADDR pc) > +{ > + CORE_ADDR func_addr = 0 , func_end = 0; > + > + if (find_pc_partial_function (pc, NULL, & func_addr, & func_end)) > + { > + struct symtab_and_line sal; > + struct iq2000_frame_cache cache; > + > + /* Found a function. */ > + sal = find_pc_line (func_addr, 0); > + if (sal.end && sal.end < func_end) > + /* Found a line number, use it as end of prologue. */ > + return sal.end; > + > + /* No useable line symbol. Use prologue parsing method. */ > + iq2000_init_frame_cache (&cache); > + return iq2000_scan_prologue (func_addr, func_end, NULL, &cache); > + } > + > + /* No function symbol -- just return the PC. */ > + return (CORE_ADDR) pc; > +} I'm trying to cut down on the proliferation of linetable-aware code in tdep files. We've already got skip_prologue_using_sal, which is similar but not quite the same. Will that work for iq2000? Failing that, should the new method be used on other targets? There's nothing iq2000 specific about it. -- Daniel Jacobowitz CodeSourcery, LLC