From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31084 invoked by alias); 3 Aug 2007 17:06:55 -0000 Received: (qmail 31075 invoked by uid 22791); 3 Aug 2007 17:06:52 -0000 X-Spam-Check-By: sourceware.org Received: from gandalf.tausq.org (HELO arwen.tausq.org) (64.81.244.94) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 03 Aug 2007 17:06:48 +0000 Received: by arwen.tausq.org (Postfix, from userid 1000) id 80B7343879; Fri, 3 Aug 2007 10:06:46 -0700 (PDT) Date: Fri, 03 Aug 2007 17:06:00 -0000 From: Randolph Chung To: gdb-patches@sources.redhat.com Cc: parisc-linux@lists.parisc-linux.org Subject: [hppa patch] Fix register definitions for hppa Message-ID: <20070803170646.GB32611@tausq.org> Reply-To: Randolph Chung Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-GPG: for GPG key, see http://www.tausq.org/gpg.txt User-Agent: Mutt/1.5.6+20040722i 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: 2007-08/txt/msg00064.txt.bz2 Should be self-explanatory. We came across this while debugging TLS-enabled thread debugging on hppa-linux. GDB was not reading cr27 (hppa's thread register), so thread-debugging failed quite miserably :( If there are no comments, I shall commit in a couple of days. thanks, randolph 2007-08-03 Randolph Chung * hppa-tdep.c (hppa32_cannot_fetch_register) (hppa64_cannot_fetch_register): New functions. (hppa_gdbarch_init): Set cannot_fetch_register appropriately. * hppa-tdep.h (hppa_regnum): Add HPPA_CR26_REGNUM. Index: hppa-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/hppa-tdep.c,v retrieving revision 1.234 diff -u -p -r1.234 hppa-tdep.c --- hppa-tdep.c 15 Jun 2007 22:44:55 -0000 1.234 +++ hppa-tdep.c 13 Jul 2007 16:26:29 -0000 @@ -2676,6 +2676,16 @@ hppa32_cannot_store_register (int regnum } static int +hppa32_cannot_fetch_register (int regnum) +{ + /* cr26 and cr27 are readable (but not writable) from userspace. */ + if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM) + return 0; + else + return hppa32_cannot_store_register (regnum); +} + +static int hppa64_cannot_store_register (int regnum) { return (regnum == 0 @@ -2684,6 +2694,16 @@ hppa64_cannot_store_register (int regnum || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM)); } +static int +hppa64_cannot_fetch_register (int regnum) +{ + /* cr26 and cr27 are readable (but not writable) from userspace. */ + if (regnum == HPPA_CR26_REGNUM || regnum == HPPA_CR27_REGNUM) + return 0; + else + return hppa64_cannot_store_register (regnum); +} + static CORE_ADDR hppa_smash_text_address (CORE_ADDR addr) { @@ -3076,7 +3096,7 @@ hppa_gdbarch_init (struct gdbarch_info i set_gdbarch_cannot_store_register (gdbarch, hppa32_cannot_store_register); set_gdbarch_cannot_fetch_register (gdbarch, - hppa32_cannot_store_register); + hppa32_cannot_fetch_register); break; case 8: set_gdbarch_num_regs (gdbarch, hppa64_num_regs); @@ -3087,7 +3107,7 @@ hppa_gdbarch_init (struct gdbarch_info i set_gdbarch_cannot_store_register (gdbarch, hppa64_cannot_store_register); set_gdbarch_cannot_fetch_register (gdbarch, - hppa64_cannot_store_register); + hppa64_cannot_fetch_register); break; default: internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"), Index: hppa-tdep.h =================================================================== RCS file: /cvs/src/src/gdb/hppa-tdep.h,v retrieving revision 1.30 diff -u -p -r1.30 hppa-tdep.h --- hppa-tdep.h 15 Jun 2007 22:44:55 -0000 1.30 +++ hppa-tdep.h 13 Jul 2007 16:26:29 -0000 @@ -59,6 +59,7 @@ enum hppa_regnum HPPA_PID3_REGNUM = 56, /* Protection ID */ HPPA_CCR_REGNUM = 54, /* Coprocessor Configuration Register */ HPPA_TR0_REGNUM = 57, /* Temporary Registers (cr24 -> cr31) */ + HPPA_CR26_REGNUM = 59, HPPA_CR27_REGNUM = 60, /* Base register for thread-local storage, cr27 */ HPPA_FP0_REGNUM = 64, /* First floating-point. */ HPPA_FP4_REGNUM = 72,