From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10727 invoked by alias); 6 Feb 2002 03:11:18 -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 10663 invoked from network); 6 Feb 2002 03:11:13 -0000 Received: from unknown (HELO localhost.redhat.com) (216.138.202.10) by sources.redhat.com with SMTP; 6 Feb 2002 03:11:13 -0000 Received: from cygnus.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 499733E5A; Tue, 5 Feb 2002 22:11:11 -0500 (EST) Message-ID: <3C609ECE.7020300@cygnus.com> Date: Tue, 05 Feb 2002 19:11:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:0.9.7) Gecko/20020103 X-Accept-Language: en-us MIME-Version: 1.0 To: Michael Snyder Cc: cagney@redhat.com, gdb-patches@sources.redhat.com Subject: Re: [RFA] regcache pseudo-reg tweak References: <200202060226.g162QY120181@reddwarf.cygnus.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2002-02/txt/msg00150.txt.bz2 > 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). Andrew