From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32437 invoked by alias); 2 May 2003 00:58:52 -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 32415 invoked from network); 2 May 2003 00:58:51 -0000 Received: from unknown (HELO localhost.redhat.com) (207.219.125.105) by sources.redhat.com with SMTP; 2 May 2003 00:58:51 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id CF10F2B2F; Thu, 1 May 2003 20:58:48 -0400 (EDT) Message-ID: <3EB1C2C8.5080502@redhat.com> Date: Fri, 02 May 2003 00:58:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030223 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Kevin Buettner Cc: gdb@sources.redhat.com Subject: Re: register_offset_hack() vs REGISTER_BYTE() References: <1030502003824.ZM26690@localhost.localdomain> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-05/txt/msg00011.txt.bz2 > I'm seeing the following internal error: > > .../frame.c:591: internal-error: Failed to compute the register number > corresponding to 0x296 > > This is happening because the *addrp value in the following loop (which > is in frame_register() in frame.c)... > > for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++) > { > if (*addrp == register_offset_hack (current_gdbarch, regnum)) > { > *realnump = regnum; > return; > } > } > > ...is set using a value obtained from REGISTER_BYTE(). (See > sentinel_frame_prev_register in sentinel-frame.c.) But the > value obtained from register_offset_hack() was computed by using the > register's virtual type. Er, for a legacy architecture, register_offset_hack(i) (aka current_regcache->descr->register_offset) should be REGISTER_BYTE(i). See init_legacy_regcache_descr. Sounds like the MIPS is sneeking past: /* If an old style architecture, fill in the remainder of the register cache descriptor using the register macros. */ if (!gdbarch_pseudo_register_read_p (gdbarch) && !gdbarch_pseudo_register_write_p (gdbarch) && !gdbarch_register_type_p (gdbarch)) { descr->legacy_p = 1; init_legacy_regcache_descr (gdbarch, descr); return descr; } Andrew