From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20422 invoked by alias); 13 Jan 2014 16:47:33 -0000 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 Received: (qmail 20410 invoked by uid 89); 13 Jan 2014 16:47:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 13 Jan 2014 16:47:31 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s0DGlLuI006774 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 13 Jan 2014 11:47:22 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s0DGlHkA032335; Mon, 13 Jan 2014 11:47:18 -0500 Message-ID: <52D41894.3030206@redhat.com> Date: Mon, 13 Jan 2014 16:47:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 MIME-Version: 1.0 To: "Metzger, Markus T" CC: "jan.kratochvil@redhat.com" , "gdb-patches@sourceware.org" Subject: Re: [PATCH v9 21/29] record-btrace: provide xfer_partial target method References: <1387471499-29444-1-git-send-email-markus.t.metzger@intel.com> <1387471499-29444-22-git-send-email-markus.t.metzger@intel.com> <52B34555.8040200@redhat.com> <52B4688E.2090603@redhat.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-SW-Source: 2014-01/txt/msg00320.txt.bz2 On 01/13/2014 12:36 PM, Metzger, Markus T wrote: >> -----Original Message----- >> From: Pedro Alves [mailto:palves@redhat.com] >> Sent: Friday, December 20, 2013 4:56 PM > > >> Can you show the patchlet you did, and the before/after gdb >> output though? I'd be better to see that, and have any possible >> follow up discussion discussion here now, rather than fractured >> to a potential repost of the series. > > Here's the current version of the function: > > static LONGEST > record_btrace_xfer_partial (struct target_ops *ops, enum target_object object, > const char *annex, gdb_byte *readbuf, > const gdb_byte *writebuf, ULONGEST offset, > LONGEST len) > { > struct target_ops *t; > > /* Filter out requests that don't make sense during replay. */ > if (!record_btrace_allow_memory_access && record_btrace_is_replaying ()) > { > switch (object) > { > case TARGET_OBJECT_MEMORY: > { > struct target_section *section; > > /* We do not allow writing memory in general. */ > if (writebuf != NULL) > return TARGET_XFER_E_UNAVAILABLE; > > /* We allow reading readonly memory. */ > section = target_section_by_addr (ops, offset); > if (section != NULL) > { > /* Check if the section we found is readonly. */ > if ((bfd_get_section_flags (section->the_bfd_section->owner, > section->the_bfd_section) > & SEC_READONLY) != 0) > { > /* Truncate the request to fit into this section. */ > len = min (len, section->endaddr - offset); > break; > } > } > > return TARGET_XFER_E_UNAVAILABLE; > } > } > } > > /* Forward the request. */ > for (ops = ops->beneath; ops != NULL; ops = ops->beneath) > if (ops->to_xfer_partial != NULL) > return ops->to_xfer_partial (ops, object, annex, readbuf, writebuf, > offset, len); > > return TARGET_XFER_E_UNAVAILABLE; > } > > > And here's the new GDB output: > > (gdb) print glob > Memory at address 0x601030 unavailable. > > This used to be: > > (gdb) print glob > This record target does not record memory. Alright, thanks. Once Yao is done with changing the target_xfer_partial interface to return a read length in an out parameter in addition to TARGET_XFER_E_UNAVAILABLE we'll be able to make that graceful instead of an error, like: (gdb) print glob $1 = Just like when debugging traceframes. For now, it'll do. -- Pedro Alves