From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17828 invoked by alias); 6 Feb 2002 03:17: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 17690 invoked from network); 6 Feb 2002 03:17:39 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sources.redhat.com with SMTP; 6 Feb 2002 03:17:39 -0000 Received: from redhat.com (reddwarf.sfbay.redhat.com [205.180.231.12]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id TAA03354; Tue, 5 Feb 2002 19:17:35 -0800 (PST) Message-ID: <3C609EA2.8010DE01@redhat.com> Date: Tue, 05 Feb 2002 19:17:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Mailer: Mozilla 4.76 [en] (X11; U; Linux 2.4.2-2smp i686) X-Accept-Language: en MIME-Version: 1.0 To: Andrew Cagney CC: cagney@redhat.com, gdb-patches@sources.redhat.com Subject: Re: [RFA] regcache pseudo-reg tweak References: <200202060226.g162QY120181@reddwarf.cygnus.com> <3C609ECE.7020300@cygnus.com> Content-Type: multipart/mixed; boundary="------------AE90FF565959C618E0A3EC0E" X-SW-Source: 2002-02/txt/msg00151.txt.bz2 This is a multi-part message in MIME format. --------------AE90FF565959C618E0A3EC0E Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-length: 1932 Andrew Cagney wrote: > > > I think you left out an "else" when you made this change in december. > > We must not call target_[fetch/store]_register with a pseudo-register, > > or they will choke. By definition, a pseudo-register is one that > > cannot be fetched from the target. > > Oops, kind of. > > > Index: regcache.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/regcache.c,v > > retrieving revision 1.31 > > diff -c -3 -p -r1.31 regcache.c > > *** regcache.c 2002/01/29 20:24:27 1.31 > > --- regcache.c 2002/02/06 02:30:46 > > *************** fetch_register (int regnum) > > *** 125,131 **** > > if (FETCH_PSEUDO_REGISTER_P () > > && pseudo_register (regnum)) > > FETCH_PSEUDO_REGISTER (regnum); > > ! target_fetch_registers (regnum); > > } > > > > /* Write register REGNUM cached value to the target. */ > > --- 125,132 ---- > > if (FETCH_PSEUDO_REGISTER_P () > > && pseudo_register (regnum)) > > FETCH_PSEUDO_REGISTER (regnum); > > ! else if (real_register (regnum)) > > ! target_fetch_registers (regnum); > > } > > > > /* Write register REGNUM cached value to the target. */ > > There should be an else but not else if (real_register ()) .... > > A target can handle registers two ways - using pseudo-registers or using > register_{read,write}(). If a target uses the latter then it will > likely end up fetching registers in the pseudo-register range from the > target. > > A simple example of this might be a modified x86 where not only the user > registers but also the system registers (MSRs?) are accessable. The > MSR's wouldn't be returned via the G packet but instead fetched > individually. Unfortunatly, NUM_REGS determines which registers are > included in a G packet (and many other obscure things). Good. Replaced with a simple "else" and checked in as attached below. --------------AE90FF565959C618E0A3EC0E Content-Type: text/plain; charset=us-ascii; name="pseudo.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="pseudo.patch" Content-length: 1526 2002-02-05 Michael Snyder * regcache.c (fetch_register): Call target_fetch_register only if we don't call FETCH_PSEUDO_REGISTER. (store_register): Call target_store_register only if we don't call STORE_PSEUDO_REGISTER. Index: regcache.c =================================================================== RCS file: /cvs/src/src/gdb/regcache.c,v retrieving revision 1.31 diff -c -3 -p -r1.31 regcache.c *** regcache.c 2002/01/29 20:24:27 1.31 --- regcache.c 2002/02/06 02:30:46 *************** fetch_register (int regnum) *** 125,131 **** if (FETCH_PSEUDO_REGISTER_P () && pseudo_register (regnum)) FETCH_PSEUDO_REGISTER (regnum); ! target_fetch_registers (regnum); } /* Write register REGNUM cached value to the target. */ --- 125,132 ---- if (FETCH_PSEUDO_REGISTER_P () && pseudo_register (regnum)) FETCH_PSEUDO_REGISTER (regnum); ! else ! target_fetch_registers (regnum); } /* Write register REGNUM cached value to the target. */ *************** store_register (int regnum) *** 140,146 **** if (STORE_PSEUDO_REGISTER_P () && pseudo_register (regnum)) STORE_PSEUDO_REGISTER (regnum); ! target_store_registers (regnum); } /* Low level examining and depositing of registers. --- 141,148 ---- if (STORE_PSEUDO_REGISTER_P () && pseudo_register (regnum)) STORE_PSEUDO_REGISTER (regnum); ! else ! target_store_registers (regnum); } /* Low level examining and depositing of registers. --------------AE90FF565959C618E0A3EC0E--