From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31680 invoked by alias); 13 Oct 2002 23:20:37 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 31673 invoked from network); 13 Oct 2002 23:20:36 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by sources.redhat.com with SMTP; 13 Oct 2002 23:20:36 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 180sy1-0000Jx-00; Sun, 13 Oct 2002 19:20:17 -0500 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 180s2E-0005MC-00; Sun, 13 Oct 2002 19:20:34 -0400 Date: Sun, 13 Oct 2002 16:20:00 -0000 From: Daniel Jacobowitz To: gdb@sources.redhat.com, cagney@redhat.com Subject: Re: MIPS targets broken by dummy frame/regcache changes Message-ID: <20021013232033.GA20433@nevyn.them.org> Mail-Followup-To: gdb@sources.redhat.com, cagney@redhat.com References: <20021010205112.GA26436@nevyn.them.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021010205112.GA26436@nevyn.them.org> User-Agent: Mutt/1.5.1i X-SW-Source: 2002-10/txt/msg00113.txt.bz2 On Thu, Oct 10, 2002 at 04:51:12PM -0400, Daniel Jacobowitz wrote: > I get this backtrace on MIPS/Linux: > #0 error (string=0x7591c4 "Unknowable register number %d.") > at /opt/src/gdb/src-gdblinks/gdb/utils.c:628 > #1 0x004f7fc8 in register_addr (regno=72, blockend=0) > at /opt/src/gdb/src-gdblinks/gdb/mips-linux-tdep.c:254 > #2 0x00575658 in store_register (regno=72) at /opt/src/gdb/src-gdblinks/gdb/infptrace.c:440 > #3 0x005757e0 in store_inferior_registers (regno=72) at /opt/src/gdb/src-gdblinks/gdb/infptrace.c:470 > #4 0x004666f4 in legacy_write_register_gen (regnum=72, myaddr=0x1067cff8) > at /opt/src/gdb/src-gdblinks/gdb/regcache.c:838 > #5 0x00466cdc in write_register_gen (regnum=0, buf=0x0) > at /opt/src/gdb/src-gdblinks/gdb/regcache.c:903 > #6 0x00466f4c in write_register_bytes (myregstart=0, myaddr=0x1067ced8 "", inlen=0) > at /opt/src/gdb/src-gdblinks/gdb/regcache.c:950 > #7 0x004646e8 in regcache_cpy (dst=0x1006afc0, src=0x1022c5f8) > at /opt/src/gdb/src-gdblinks/gdb/regcache.c:350 > > The problem is that you're copying the whole regcache blindly. But there's > holes in it that we can't store. I'm sure you remember register 72 - it > used to be the frame pointer; now it's a hole in the register cache. We get > to it and try to write it, even though it doesn't exist. > > I get the same thing for the next couple registers, up to 89. For now I've > turned it down to a warning in my local tree... To follow up to myself, here's the hack I'm using to quiet this: Index: regcache.c =================================================================== RCS file: /cvs/src/src/gdb/regcache.c,v retrieving revision 1.58 diff -u -p -r1.58 regcache.c --- regcache.c 25 Aug 2002 23:44:30 -0000 1.58 +++ regcache.c 13 Oct 2002 23:09:27 -0000 @@ -947,7 +947,10 @@ write_register_bytes (int myregstart, ch /* Is this register completely within the range the user is writing? */ else if (myregstart <= regstart && regend <= myregend) - write_register_gen (regnum, myaddr + (regstart - myregstart)); + { + if (REGISTER_NAME (regnum)[0] != 0) + write_register_gen (regnum, myaddr + (regstart - myregstart)); + } /* The register partially overlaps the range being written. */ else Andrew, does this look reasonable? If so we should do it for read also. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer