disas: Let disas::read_memory() handler return EIO on error

Both cpu_memory_rw_debug() and address_space_read() return
an error on failed transaction. Check the returned value,
and return EIO in case of error.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Philippe Mathieu-Daudé 2020-05-18 17:53:04 +02:00 committed by Paolo Bonzini
parent ddfc8b96ee
commit 6766ba506e

11
disas.c
View File

@ -39,9 +39,11 @@ target_read_memory (bfd_vma memaddr,
struct disassemble_info *info)
{
CPUDebug *s = container_of(info, CPUDebug, info);
int r;
cpu_memory_rw_debug(s->cpu, memaddr, myaddr, length, 0);
return 0;
r = cpu_memory_rw_debug(s->cpu, memaddr, myaddr, length, 0);
return r ? EIO : 0;
}
/* Print an error message. We can assume that this is in response to
@ -718,10 +720,11 @@ physical_read_memory(bfd_vma memaddr, bfd_byte *myaddr, int length,
struct disassemble_info *info)
{
CPUDebug *s = container_of(info, CPUDebug, info);
MemTxResult res;
address_space_read(s->cpu->as, memaddr, MEMTXATTRS_UNSPECIFIED,
res = address_space_read(s->cpu->as, memaddr, MEMTXATTRS_UNSPECIFIED,
myaddr, length);
return 0;
return res == MEMTX_OK ? 0 : EIO;
}
/* Disassembler for the monitor. */