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


> -----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.


Regards,
Markus.
Intel GmbH
Dornacher Strasse 1
85622 Feldkirchen/Muenchen, Deutschland
Sitz der Gesellschaft: Feldkirchen bei Muenchen
Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk
Registergericht: Muenchen HRB 47456
Ust.-IdNr./VAT Registration No.: DE129385895
Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052


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