* v850-dis.c (print_insn_v850): Properly handle disassembling

a two byte insn at the end of a memory region when the memory
        region's size is only two byte aligned.
This commit is contained in:
Jeff Law 1996-08-31 21:21:27 +00:00
parent a5f2a4e50e
commit e05cae190b
2 changed files with 21 additions and 2 deletions

View File

@ -1,6 +1,10 @@
start-sanitize-v850
Sat Aug 31 01:27:26 1996 Jeffrey A Law (law@cygnus.com)
* v850-dis.c (print_insn_v850): Properly handle disassembling
a two byte insn at the end of a memory region when the memory
region's size is only two byte aligned.
* v850-dis.c (v850_cc_names): Fix stupid thinkos.
* v850-dis.c (v850_reg_names): Define.

View File

@ -47,15 +47,30 @@ print_insn_v850 (memaddr, info)
bfd_byte buffer[4];
unsigned long insn;
status = (*info->read_memory_func) (memaddr, buffer, 4, info);
/* First figure out how big the opcode is. */
status = (*info->read_memory_func) (memaddr, buffer, 2, info);
if (status != 0)
{
(*info->memory_error_func) (status, memaddr, info);
return -1;
}
insn = bfd_getl32 (buffer);
insn = bfd_getl16 (buffer);
/* If this is a 4 byte insn, read 4 bytes of stuff. */
if ((insn & 0x0600) == 0x0600)
{
status = (*info->read_memory_func) (memaddr, buffer, 2, info);
if (status != 0)
{
(*info->memory_error_func) (status, memaddr, info);
return -1;
}
insn = bfd_getl32 (buffer);
}
disassemble (insn, info);
/* Make sure we tell our caller how many bytes we consumed. */
if ((insn & 0x0600) == 0x0600)
return 4;
else