From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26892 invoked by alias); 2 May 2003 00:38:31 -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 26885 invoked from network); 2 May 2003 00:38:30 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 2 May 2003 00:38:30 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h420cU330045 for ; Thu, 1 May 2003 20:38:30 -0400 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h420cUI25210 for ; Thu, 1 May 2003 20:38:30 -0400 Received: from localhost.localdomain (vpn50-6.rdu.redhat.com [172.16.50.6]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h420cUO26620 for ; Thu, 1 May 2003 20:38:30 -0400 Received: (from kev@localhost) by localhost.localdomain (8.11.6/8.11.6) id h420cOn26691 for gdb@sources.redhat.com; Thu, 1 May 2003 17:38:24 -0700 Date: Fri, 02 May 2003 00:38:00 -0000 From: Kevin Buettner Message-Id: <1030502003824.ZM26690@localhost.localdomain> To: gdb@sources.redhat.com Subject: register_offset_hack() vs REGISTER_BYTE() MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-05/txt/msg00010.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. For this particular architecture (64-bit MIPS), there are some registers whose virtual size is 4, but which are stored in an 8-byte container. Hence the discrepancy. It's not clear to me that the values being returned by register_offset_hack() are all that useful. These are offsets which would occur if you squeezed all of the "unused" space out of the registers array. IMO, the call to register_offset_hack() should be replaced with a call to REGISTER_BYTE(). Opinions? Kevin