gas/
* config/tc-arm.c (do_t_blx): Always use BFD_RELOC_THUMB_PCREL_BLX. (md_pcrel_from_section): Align address for BLX. (tc_gen_reloc): Change BFD_RELOC_THUMB_PCREL_BLX relocations to BFD_RELOC_THUMB_PCREL_BRANCH23 for EABI v4+.
This commit is contained in:
parent
49dff77b6e
commit
00adf2d469
@ -1,3 +1,10 @@
|
|||||||
|
2009-05-01 Julian Brown <julian@codesourcery.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (do_t_blx): Always use BFD_RELOC_THUMB_PCREL_BLX.
|
||||||
|
(md_pcrel_from_section): Align address for BLX.
|
||||||
|
(tc_gen_reloc): Change BFD_RELOC_THUMB_PCREL_BLX relocations to
|
||||||
|
BFD_RELOC_THUMB_PCREL_BRANCH23 for EABI v4+.
|
||||||
|
|
||||||
2009-04-29 DJ Delorie <dj@redhat.com>
|
2009-04-29 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
* config/tc-mep.c (md_begin): Check coprocessor type.
|
* config/tc-mep.c (md_begin): Check coprocessor type.
|
||||||
|
@ -9002,12 +9002,7 @@ do_t_blx (void)
|
|||||||
{
|
{
|
||||||
/* No register. This must be BLX(1). */
|
/* No register. This must be BLX(1). */
|
||||||
inst.instruction = 0xf000e800;
|
inst.instruction = 0xf000e800;
|
||||||
#ifdef OBJ_ELF
|
inst.reloc.type = BFD_RELOC_THUMB_PCREL_BLX;
|
||||||
if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4)
|
|
||||||
inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH23;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
inst.reloc.type = BFD_RELOC_THUMB_PCREL_BLX;
|
|
||||||
inst.reloc.pc_rel = 1;
|
inst.reloc.pc_rel = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -18213,9 +18208,13 @@ md_pcrel_from_section (fixS * fixP, segT seg)
|
|||||||
case BFD_RELOC_THUMB_PCREL_BRANCH20:
|
case BFD_RELOC_THUMB_PCREL_BRANCH20:
|
||||||
case BFD_RELOC_THUMB_PCREL_BRANCH23:
|
case BFD_RELOC_THUMB_PCREL_BRANCH23:
|
||||||
case BFD_RELOC_THUMB_PCREL_BRANCH25:
|
case BFD_RELOC_THUMB_PCREL_BRANCH25:
|
||||||
case BFD_RELOC_THUMB_PCREL_BLX:
|
|
||||||
return base + 4;
|
return base + 4;
|
||||||
|
|
||||||
|
/* BLX is like branches above, but forces the low two bits of PC to
|
||||||
|
zero. */
|
||||||
|
case BFD_RELOC_THUMB_PCREL_BLX:
|
||||||
|
return (base + 4) & ~3;
|
||||||
|
|
||||||
/* ARM mode branches are offset by +8. However, the Windows CE
|
/* ARM mode branches are offset by +8. However, the Windows CE
|
||||||
loader expects the relocation not to take this into account. */
|
loader expects the relocation not to take this into account. */
|
||||||
case BFD_RELOC_ARM_PCREL_BRANCH:
|
case BFD_RELOC_ARM_PCREL_BRANCH:
|
||||||
@ -19737,7 +19736,6 @@ tc_gen_reloc (asection *section, fixS *fixp)
|
|||||||
case BFD_RELOC_THUMB_PCREL_BRANCH20:
|
case BFD_RELOC_THUMB_PCREL_BRANCH20:
|
||||||
case BFD_RELOC_THUMB_PCREL_BRANCH23:
|
case BFD_RELOC_THUMB_PCREL_BRANCH23:
|
||||||
case BFD_RELOC_THUMB_PCREL_BRANCH25:
|
case BFD_RELOC_THUMB_PCREL_BRANCH25:
|
||||||
case BFD_RELOC_THUMB_PCREL_BLX:
|
|
||||||
case BFD_RELOC_VTABLE_ENTRY:
|
case BFD_RELOC_VTABLE_ENTRY:
|
||||||
case BFD_RELOC_VTABLE_INHERIT:
|
case BFD_RELOC_VTABLE_INHERIT:
|
||||||
#ifdef TE_PE
|
#ifdef TE_PE
|
||||||
@ -19746,6 +19744,15 @@ tc_gen_reloc (asection *section, fixS *fixp)
|
|||||||
code = fixp->fx_r_type;
|
code = fixp->fx_r_type;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BFD_RELOC_THUMB_PCREL_BLX:
|
||||||
|
#ifdef OBJ_ELF
|
||||||
|
if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4)
|
||||||
|
code = BFD_RELOC_THUMB_PCREL_BRANCH23;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
code = BFD_RELOC_THUMB_PCREL_BLX;
|
||||||
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_ARM_LITERAL:
|
case BFD_RELOC_ARM_LITERAL:
|
||||||
case BFD_RELOC_ARM_HWLITERAL:
|
case BFD_RELOC_ARM_HWLITERAL:
|
||||||
/* If this is called then the a literal has
|
/* If this is called then the a literal has
|
||||||
|
Loading…
Reference in New Issue
Block a user