disas: cris: Fix 0 buffer length case

Cris has the complication of variable length instructions and has
a check in place to clamp memory reads in case the disas request
doesn't have enough bytes for the instruction being disas'd. This
breaks down in the case where disassembling for the monitor where
the buffer length is defaulted to 0.

The buffer length should never be zero for a regular target_disas,
so we can safely assume the 0 case is for the monitor in which case
consider the buffer length to be the max for cris instructions.

Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
Peter Crosthwaite 2015-06-23 20:57:37 -07:00 committed by Andreas Färber
parent efc6674be8
commit 51d373cf5f

View File

@ -2575,9 +2575,9 @@ print_insn_cris_generic (bfd_vma memaddr,
If we can't get any data, or we do not get enough data, we print If we can't get any data, or we do not get enough data, we print
the error message. */ the error message. */
nbytes = info->buffer_length; nbytes = info->buffer_length ? info->buffer_length
if (nbytes > MAX_BYTES_PER_CRIS_INSN) : MAX_BYTES_PER_CRIS_INSN;
nbytes = MAX_BYTES_PER_CRIS_INSN; nbytes = MIN(nbytes, MAX_BYTES_PER_CRIS_INSN);
status = (*info->read_memory_func) (memaddr, buffer, nbytes, info); status = (*info->read_memory_func) (memaddr, buffer, nbytes, info);
/* If we did not get all we asked for, then clear the rest. /* If we did not get all we asked for, then clear the rest.