This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v9 21/29] record-btrace: provide xfer_partial target method


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 = <unavailable>

Just like when debugging traceframes.  For now, it'll do.

-- 
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]