From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3024 invoked by alias); 23 Apr 2004 04:45:47 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 3005 invoked from network); 23 Apr 2004 04:45:45 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 23 Apr 2004 04:45:45 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i3N4jhKG016893 for ; Fri, 23 Apr 2004 00:45:43 -0400 Received: from zenia.home.redhat.com (porkchop.devel.redhat.com [172.16.58.2]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i3N4jfp32359; Fri, 23 Apr 2004 00:45:41 -0400 To: gdb-patches@sources.redhat.com Subject: RFA: Don't assume PPC regs are numbered contiguously From: Jim Blandy Date: Fri, 23 Apr 2004 04:45:00 -0000 Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2004-04/txt/msg00564.txt.bz2 This is a step towards tolerating PPC variants lacking floating-point registers. Tested with no regressions on powerpc-unknown-linux-gnu (Fedora Core 2). 2004-04-20 Jim Blandy * ppc-linux-nat.c (fetch_ppc_registers, store_ppc_registers): Don't assume that the gprs, fprs, and UISA sprs are contiguous, start at register number zero, and end with fpscr. Instead, use the numbers from the tdep structure, FP0_REGNUM, and FPLAST_REGNUM. Index: gdb/ppc-linux-nat.c =================================================================== RCS file: /cvs/src/src/gdb/ppc-linux-nat.c,v retrieving revision 1.29 diff -c -r1.29 ppc-linux-nat.c *** gdb/ppc-linux-nat.c 15 Mar 2004 21:35:25 -0000 1.29 --- gdb/ppc-linux-nat.c 21 Apr 2004 15:58:41 -0000 *************** *** 310,319 **** int i; struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! for (i = 0; i <= tdep->ppc_fpscr_regnum; i++) fetch_register (tid, i); if (tdep->ppc_mq_regnum != -1) fetch_register (tid, tdep->ppc_mq_regnum); if (have_ptrace_getvrregs) if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1) fetch_altivec_registers (tid); --- 310,335 ---- int i; struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! for (i = tdep->ppc_gp0_regnum; i <= tdep->ppc_gplast_regnum; i++) fetch_register (tid, i); + if (tdep->ppc_fpscr_regnum != -1) + for (i = FP0_REGNUM; i < FPLAST_REGNUM; i++) + fetch_register (tid, i); + fetch_register (tid, PC_REGNUM); + if (tdep->ppc_ps_regnum != -1) + fetch_register (tid, tdep->ppc_ps_regnum); + if (tdep->ppc_cr_regnum != -1) + fetch_register (tid, tdep->ppc_cr_regnum); + if (tdep->ppc_lr_regnum != -1) + fetch_register (tid, tdep->ppc_lr_regnum); + if (tdep->ppc_ctr_regnum != -1) + fetch_register (tid, tdep->ppc_ctr_regnum); + if (tdep->ppc_xer_regnum != -1) + fetch_register (tid, tdep->ppc_xer_regnum); if (tdep->ppc_mq_regnum != -1) fetch_register (tid, tdep->ppc_mq_regnum); + if (tdep->ppc_fpscr_regnum != -1) + fetch_register (tid, tdep->ppc_fpscr_regnum); if (have_ptrace_getvrregs) if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1) fetch_altivec_registers (tid); *************** *** 479,488 **** int i; struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! for (i = 0; i <= tdep->ppc_fpscr_regnum; i++) store_register (tid, i); if (tdep->ppc_mq_regnum != -1) store_register (tid, tdep->ppc_mq_regnum); if (have_ptrace_getvrregs) if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1) store_altivec_registers (tid); --- 495,520 ---- int i; struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); ! for (i = tdep->ppc_gp0_regnum; i <= tdep->ppc_gplast_regnum; i++) store_register (tid, i); + if (tdep->ppc_fpscr_regnum != -1) + for (i = FP0_REGNUM; i < FPLAST_REGNUM; i++) + store_register (tid, i); + store_register (tid, PC_REGNUM); + if (tdep->ppc_ps_regnum != -1) + store_register (tid, tdep->ppc_ps_regnum); + if (tdep->ppc_cr_regnum != -1) + store_register (tid, tdep->ppc_cr_regnum); + if (tdep->ppc_lr_regnum != -1) + store_register (tid, tdep->ppc_lr_regnum); + if (tdep->ppc_ctr_regnum != -1) + store_register (tid, tdep->ppc_ctr_regnum); + if (tdep->ppc_xer_regnum != -1) + store_register (tid, tdep->ppc_xer_regnum); if (tdep->ppc_mq_regnum != -1) store_register (tid, tdep->ppc_mq_regnum); + if (tdep->ppc_fpscr_regnum != -1) + store_register (tid, tdep->ppc_fpscr_regnum); if (have_ptrace_getvrregs) if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1) store_altivec_registers (tid);