Make the dcache (code/stack cache) handle line reading errors better

The dcache (code/stack cache) is supposed to be transparent, but it's
actually not in one case.  dcache tries to read chunks (cache lines)
at a time off of the target.  This may end up trying to read
unaccessible or unavailable memory.  Currently the caller gets an xfer
error in this case.  But if the specific bits of memory the caller
actually wanted are available and accessible, then the caller should
get the memory it wanted, not an error.

gdb/
2014-05-21  Pedro Alves  <palves@redhat.com>

	* dcache.c (dcache_read_memory_partial): If reading the cache line
	fails, fallback to reading just the memory the caller wanted.

gdb/testsuite/
2014-05-21  Pedro Alves  <palves@redhat.com>

	* gdb.base/dcache-line-read-error.c: New.
	* gdb.base/dcache-line-read-error.exp: New.
This commit is contained in:
Pedro Alves 2014-05-21 13:58:16 +01:00
parent a6e3e144a3
commit 0256a6ac4b
5 changed files with 190 additions and 2 deletions

View file

@ -497,8 +497,11 @@ dcache_read_memory_partial (struct target_ops *ops, DCACHE *dcache,
if (i == 0)
{
/* FIXME: We lose the real error status. */
return TARGET_XFER_E_IO;
/* Even though reading the whole line failed, we may be able to
read a piece starting where the caller wanted. */
return ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL,
myaddr, NULL, memaddr, len,
xfered_len);
}
else
{