mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
gas/
* config/tc-arm.c (md_apply_fix): Turn CZB instructions that attempt to jump to the next instruction into NOPs.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2007-03-23 Mark Shinwell <shinwell@codesourcery.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (md_apply_fix): Turn CZB instructions that
|
||||||
|
attempt to jump to the next instruction into NOPs.
|
||||||
|
|
||||||
2007-03-23 Alan Modra <amodra@bigpond.net.au>
|
2007-03-23 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* config/tc-spu.c: Don't include opcode/spu.h.
|
* config/tc-spu.c: Don't include opcode/spu.h.
|
||||||
|
@ -18101,16 +18101,32 @@ md_apply_fix (fixS * fixP,
|
|||||||
|
|
||||||
case BFD_RELOC_THUMB_PCREL_BRANCH7: /* CBZ */
|
case BFD_RELOC_THUMB_PCREL_BRANCH7: /* CBZ */
|
||||||
/* CBZ can only branch forward. */
|
/* CBZ can only branch forward. */
|
||||||
if (value & ~0x7e)
|
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
|
||||||
_("branch out of range"));
|
|
||||||
|
|
||||||
if (fixP->fx_done || !seg->use_rela_p)
|
/* Attempts to use CBZ to branch to the next instruction
|
||||||
|
(which, strictly speaking, are prohibited) will be turned into
|
||||||
|
no-ops.
|
||||||
|
|
||||||
|
FIXME: It may be better to remove the instruction completely and
|
||||||
|
perform relaxation. */
|
||||||
|
if (value == -2)
|
||||||
{
|
{
|
||||||
newval = md_chars_to_number (buf, THUMB_SIZE);
|
newval = md_chars_to_number (buf, THUMB_SIZE);
|
||||||
newval |= ((value & 0x3e) << 2) | ((value & 0x40) << 3);
|
newval = 0xbf00; /* NOP encoding T1 */
|
||||||
md_number_to_chars (buf, newval, THUMB_SIZE);
|
md_number_to_chars (buf, newval, THUMB_SIZE);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (value & ~0x7e)
|
||||||
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
|
_("branch out of range"));
|
||||||
|
|
||||||
|
if (fixP->fx_done || !seg->use_rela_p)
|
||||||
|
{
|
||||||
|
newval = md_chars_to_number (buf, THUMB_SIZE);
|
||||||
|
newval |= ((value & 0x3e) << 2) | ((value & 0x40) << 3);
|
||||||
|
md_number_to_chars (buf, newval, THUMB_SIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_THUMB_PCREL_BRANCH9: /* Conditional branch. */
|
case BFD_RELOC_THUMB_PCREL_BRANCH9: /* Conditional branch. */
|
||||||
|
Reference in New Issue
Block a user