/* TI C6X disassembler.
- Copyright 2010-2013 Free Software Foundation, Inc.
+ Copyright (C) 2010-2017 Free Software Foundation, Inc.
Contributed by Joseph Myers <joseph@codesourcery.com>
Bernd Schmidt <bernds@codesourcery.com>
fp_offset = addr & 0x1f;
fp_addr = addr - fp_offset;
+ /* Read in a block of instructions. Since there might be a
+ symbol in the middle of this block, disable stop_vma. */
+ info->stop_vma = 0;
status = info->read_memory_func (fp_addr, fp, 32, info);
if (status)
{
prev_header_based
= tic6x_check_fetch_packet_header (fp_prev, &prev_header, info);
- if (prev_header_based && prev_header.word_compact[6])
- p_bit = prev_header.p_bits[13];
+ if (prev_header_based)
+ {
+ if (prev_header.word_compact[6])
+ p_bit = prev_header.p_bits[13];
+ else
+ {
+ unsigned int prev_opcode = tic6x_extract_32 (fp_prev + 24,
+ info);
+ p_bit = (prev_opcode & 0x1) ? TRUE : FALSE;
+ }
+ }
else
{
unsigned int prev_opcode = tic6x_extract_32 (fp_prev + 28,
case tic6x_coding_mem_offset_minus_one_noscale:
case tic6x_coding_mem_offset_minus_one:
fld_val += 1;
+ /* Fall through. */
case tic6x_coding_mem_offset_noscale:
case tic6x_coding_mem_offset:
mem_offset = fld_val;