From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5495 invoked by alias); 18 Aug 2013 19:08:02 -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 5486 invoked by uid 89); 18 Aug 2013 19:08:02 -0000 X-Spam-SWARE-Status: No, score=-7.7 required=5.0 tests=AWL,BAYES_00,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Sun, 18 Aug 2013 19:08:02 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r7IJ80uk001447 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 18 Aug 2013 15:08:00 -0400 Received: from host2.jankratochvil.net (ovpn-116-37.ams2.redhat.com [10.36.116.37]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r7IJ7rD3010025 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sun, 18 Aug 2013 15:07:57 -0400 Date: Sun, 18 Aug 2013 19:08:00 -0000 From: Jan Kratochvil To: Markus Metzger Cc: gdb-patches@sourceware.org Subject: Re: [patch v4 14/24] record-btrace: provide xfer_partial target method Message-ID: <20130818190753.GK24153@host2.jankratochvil.net> References: <1372842874-28951-1-git-send-email-markus.t.metzger@intel.com> <1372842874-28951-15-git-send-email-markus.t.metzger@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1372842874-28951-15-git-send-email-markus.t.metzger@intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes X-SW-Source: 2013-08/txt/msg00467.txt.bz2 On Wed, 03 Jul 2013 11:14:24 +0200, Markus Metzger wrote: > Provide the xfer_partial target method for the btrace record target. > > Only allow memory accesses to readonly memory while we're replaying. > > 2013-07-03 Markus Metzger > > * record-btrace.c (record_btrace_xfer_partial): New. > (init_record_btrace_ops): Initialize xfer_partial. > > > --- > gdb/record-btrace.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 58 insertions(+), 0 deletions(-) > > diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c > index cb1f3bb..831a367 100644 > --- a/gdb/record-btrace.c > +++ b/gdb/record-btrace.c > @@ -754,6 +754,63 @@ record_btrace_is_replaying (void) > return 0; > } > > +/* The to_xfer_partial method of target record-btrace. */ > + > +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; > + > + /* Normalize the request so len is positive. */ > + if (len < 0) > + { > + offset += len; > + len = - len; > + } I do not see LEN could be < 0, do you? Use just: gdb_assetr (len >= 0); (It even should never be LEN == 0 but that may not be guaranteed.) > + > + /* Filter out requests that don't make sense during replay. */ > + if (record_btrace_is_replaying ()) > + { > + switch (object) > + { > + case TARGET_OBJECT_MEMORY: > + case TARGET_OBJECT_RAW_MEMORY: > + case TARGET_OBJECT_STACK_MEMORY: > + { > + /* We allow reading readonly memory. */ > + struct target_section *section; > + > + section = target_section_by_addr (ops, offset); > + if (section != NULL) > + { > + /* Check if the section we found is readonly. */ > + if ((bfd_get_section_flags (section->bfd, > + section->the_bfd_section) > + & SEC_READONLY) != 0) > + { > + /* Truncate the request to fit into this section. */ > + len = min (len, section->endaddr - offset); > + break; > + } > + } > + > + return -1; > + } > + } > + } > + > + /* Forward the request. */ > + for (t = ops->beneath; t != NULL; t = t->beneath) > + if (t->to_xfer_partial != NULL) > + return t->to_xfer_partial (t, object, annex, readbuf, writebuf, > + offset, len); > + > + return -1; > +} > + > /* The to_fetch_registers method of target record-btrace. */ > > static void > @@ -936,6 +993,7 @@ init_record_btrace_ops (void) > ops->to_call_history_from = record_btrace_call_history_from; > ops->to_call_history_range = record_btrace_call_history_range; > ops->to_record_is_replaying = record_btrace_is_replaying; > + ops->to_xfer_partial = record_btrace_xfer_partial; > ops->to_fetch_registers = record_btrace_fetch_registers; > ops->to_store_registers = record_btrace_store_registers; > ops->to_prepare_to_store = record_btrace_prepare_to_store; > -- > 1.7.1