From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30122 invoked by alias); 15 Sep 2008 02:08:26 -0000 Received: (qmail 29877 invoked by uid 22791); 15 Sep 2008 02:08:25 -0000 X-Spam-Check-By: sourceware.org Received: from hiauly1.hia.nrc.ca (HELO hiauly1.hia.nrc.ca) (132.246.100.193) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 15 Sep 2008 02:07:50 +0000 Received: by hiauly1.hia.nrc.ca (Postfix, from userid 1000) id 8FB0B4DCB; Sun, 14 Sep 2008 22:07:46 -0400 (EDT) Subject: Re: [PATCH] Fix dwarf register column to gdb register mapping To: dave@hiauly1.hia.nrc.ca (John David Anglin) Date: Mon, 15 Sep 2008 02:08:00 -0000 From: "John David Anglin" Cc: randolph@tausq.org, gdb-patches@sourceware.org In-Reply-To: from "John David Anglin" at Sep 14, 2008 03:34:58 pm X-Mailer: ELM [version 2.4 PL25] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-Id: <20080915020747.8FB0B4DCB@hiauly1.hia.nrc.ca> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-09/txt/msg00328.txt.bz2 > > When I enabled the dwarf debugging support in gdb before i caused > > various errors and warnings about incorrect cfi. Do you still see that > > with this enabled? Is it compiler dependent? Because of those warnings > > and errors I had disabled the dwarf stuff on hppa before. > > Investigating some more, I see there's a problem with the floating > point registers. A break on wack_double demonstrates the problem > on both hppa64-hpux and hppa-linux: The following change fixes the problem. The confusion was between "dbx" register numbers and "dwarf" register columns. The hppa64 implementation was essentially correct except for a botched if statement. I tried to make it clear in the change that the mapping is for dbx registers. As far as I can tell, the dwarf debugging support is now enabled by default and the ifdef'd out code no longer works to disable it. So, the mapping had to be fixed. Committed as follows. Dave -- J. David Anglin dave.anglin@nrc-cnrc.gc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6602) 2008-09-14 John David Anglin * hppa-linux-tdep.c (hppa_dwarf_reg_to_regnum): Remove surrounding "#if 0" "#endif". Fix mapping of DWARF DBX registers to GDB registers. Correct arguments and improve comments. (hppa_linux_init_abi): Call set_gdbarch_dwarf2_reg_to_regnum. Delete disabled code. * hppa-tdep.c (hppa64_dwarf_reg_to_regnum): Fix check for floating point DBX register, change error to warning, and improve comments. Index: hppa-linux-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/hppa-linux-tdep.c,v retrieving revision 1.32 diff -u -3 -p -r1.32 hppa-linux-tdep.c --- hppa-linux-tdep.c 14 Sep 2008 14:08:42 -0000 1.32 +++ hppa-linux-tdep.c 15 Sep 2008 01:33:28 -0000 @@ -34,24 +34,21 @@ #include "elf/common.h" -#if 0 -/* Convert DWARF register number REG to the appropriate register - number used by GDB. */ +/* Map DWARF DBX register numbers to GDB register numbers. */ static int -hppa_dwarf_reg_to_regnum (int reg) +hppa_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg) { - /* registers 0 - 31 are the same in both sets */ - if (reg < 32) + /* The general registers and the sar are the same in both sets. */ + if (reg <= 32) return reg; - /* dwarf regs 32 to 85 are fpregs 4 - 31 */ - if (reg >= 32 && reg <= 85) - return HPPA_FP4_REGNUM + (reg - 32); + /* fr4-fr31 (left and right halves) are mapped from 72. */ + if (reg >= 72 && reg <= 72 + 28 * 2) + return HPPA_FP4_REGNUM + (reg - 72); - warning (_("Unmapped DWARF Register #%d encountered."), reg); + warning (_("Unmapped DWARF DBX Register #%d encountered."), reg); return -1; } -#endif static void hppa_linux_target_write_pc (struct regcache *regcache, CORE_ADDR v) @@ -545,12 +545,7 @@ hppa_linux_init_abi (struct gdbarch_info set_gdbarch_regset_from_core_section (gdbarch, hppa_linux_regset_from_core_section); -#if 0 - /* Dwarf-2 unwinding support. Not yet working. */ set_gdbarch_dwarf2_reg_to_regnum (gdbarch, hppa_dwarf_reg_to_regnum); - frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer); - frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer); -#endif /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, Index: hppa-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/hppa-tdep.c,v retrieving revision 1.260 diff -u -3 -p -r1.260 hppa-tdep.c --- hppa-tdep.c 11 Sep 2008 14:23:15 -0000 1.260 +++ hppa-tdep.c 15 Sep 2008 01:33:29 -0000 @@ -658,18 +658,19 @@ hppa64_register_name (struct gdbarch *gd return names[i]; } +/* Map dwarf DBX register numbers to GDB register numbers. */ static int hppa64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg) { - /* r0-r31 and sar map one-to-one. */ + /* The general registers and the sar are the same in both sets. */ if (reg <= 32) return reg; /* fr4-fr31 are mapped from 72 in steps of 2. */ - if (reg >= 72 || reg < 72 + 28 * 2) + if (reg >= 72 && reg < 72 + 28 * 2 && !(reg & 1)) return HPPA64_FP4_REGNUM + (reg - 72) / 2; - error ("Invalid DWARF register num %d.", reg); + warning (_("Unmapped DWARF DBX Register #%d encountered."), reg); return -1; }