From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30851 invoked by alias); 23 Dec 2004 16:28:50 -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 30810 invoked from network); 23 Dec 2004 16:28:44 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 23 Dec 2004 16:28:44 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.11) with ESMTP id iBNGSd2l004880 for ; Thu, 23 Dec 2004 11:28:44 -0500 Received: from zenia.home.redhat.com (sebastian-int.corp.redhat.com [172.16.52.221]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id iBNGSbr23839; Thu, 23 Dec 2004 11:28:38 -0500 To: Daniel Jacobowitz Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: Recognize 'x' in response to 'p' packet References: <20041217193240.GA19185@nevyn.them.org> <20041217224540.GA1084@nevyn.them.org> From: Jim Blandy Date: Thu, 23 Dec 2004 16:43:00 -0000 In-Reply-To: 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-12/txt/msg00427.txt.bz2 Jim Blandy writes: > Daniel Jacobowitz writes: > > My real question, though, is what you needed this for - and whether > > marking the register unavailable fixes it. > > The Red Hat Debug Agent generates replies to 'p' packets that contain > 'x's. GDB generally seems to work, but 'info thread' fares poorly. > Simply parsing the response at all should fix the problem; I'll make > sure that marking the register as unavailable doesn't cause any new > problems. > > Thanks for the review! Okay, here's the revised patch, against the properly re-indented sources. Tested against RDA. 2004-12-17 Jim Blandy * remote.c (fetch_register_using_p): Recognize a register value starting with 'x' as indicating an unfetchable register. Index: gdb/remote.c =================================================================== RCS file: /cvs/src/src/gdb/remote.c,v retrieving revision 1.156 diff -c -p -r1.156 remote.c *** gdb/remote.c 21 Dec 2004 21:24:56 -0000 1.156 --- gdb/remote.c 23 Dec 2004 15:43:46 -0000 *************** fetch_register_using_p (int regnum) *** 3192,3216 **** p += hexnumstr (p, regnum); *p++ = '\0'; remote_send (buf, rs->remote_packet_size); ! if (buf[0] != 0 && buf[0] != 'E') { ! p = buf; ! i = 0; ! while (p[0] != 0) ! { ! if (p[1] == 0) ! { ! error ("fetch_register_using_p: early buf termination"); ! return 0; ! } ! regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]); ! p += 2; ! } ! regcache_raw_supply (current_regcache, regnum, regp); return 1; } ! return 0; } static void --- 3192,3227 ---- p += hexnumstr (p, regnum); *p++ = '\0'; remote_send (buf, rs->remote_packet_size); ! ! /* If the stub didn't recognize the packet, or if we got an error, ! tell our caller. */ ! if (buf[0] == '\0' || buf[0] == 'E') ! return 0; ! ! /* If this register is unfetchable, tell the regcache. */ ! if (buf[0] == 'x') { ! regcache_raw_supply (current_regcache, regnum, NULL); ! set_register_cached (regnum, -1); return 1; } ! /* Otherwise, parse and supply the value. */ ! p = buf; ! i = 0; ! while (p[0] != 0) ! { ! if (p[1] == 0) ! { ! error("fetch_register_using_p: early buf termination"); ! return 0; ! } ! ! regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]); ! p += 2; ! } ! regcache_raw_supply (current_regcache, regnum, regp); ! return 1; } static void