mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
2008-06-03 Christophe Lyon <christophe.lyon@st.com>
bfd/ * elf32-arm.c (arm_stub_is_thumb): Define. (elf32_arm_final_link_relocate): Handle near mode switching stubs. ld/testsuite/ * ld-arm/farcall-thumb-thumb-m.d: Fix branch type. * ld-arm/farcall-thumb-arm.d: Likewise.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2008-06-09 Christophe Lyon <christophe.lyon@st.com>
|
||||||
|
|
||||||
|
* elf32-arm.c (arm_stub_is_thumb): Define.
|
||||||
|
(elf32_arm_final_link_relocate): Handle near mode switching stubs.
|
||||||
|
|
||||||
2008-06-07 Alan Modra <amodra@bigpond.net.au>
|
2008-06-07 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* elf32-spu.c (spu_elf_auto_overlay): Add valid area below sp
|
* elf32-spu.c (spu_elf_auto_overlay): Add valid area below sp
|
||||||
|
@ -2713,6 +2713,23 @@ using_thumb2 (struct elf32_arm_link_hash_table *globals)
|
|||||||
return arch == TAG_CPU_ARCH_V6T2 || arch >= TAG_CPU_ARCH_V7;
|
return arch == TAG_CPU_ARCH_V6T2 || arch >= TAG_CPU_ARCH_V7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
arm_stub_is_thumb (enum elf32_arm_stub_type stub_type)
|
||||||
|
{
|
||||||
|
switch (stub_type)
|
||||||
|
{
|
||||||
|
case arm_thumb_thumb_stub_long_branch:
|
||||||
|
case arm_thumb_arm_v4t_stub_long_branch:
|
||||||
|
return TRUE;
|
||||||
|
case arm_stub_none:
|
||||||
|
BFD_FAIL ();
|
||||||
|
return FALSE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Determine the type of stub needed, if any, for a call. */
|
/* Determine the type of stub needed, if any, for a call. */
|
||||||
|
|
||||||
static enum elf32_arm_stub_type
|
static enum elf32_arm_stub_type
|
||||||
@ -6426,7 +6443,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
|||||||
||
|
||
|
||||||
(thumb2
|
(thumb2
|
||||||
&& (branch_offset > THM2_MAX_FWD_BRANCH_OFFSET
|
&& (branch_offset > THM2_MAX_FWD_BRANCH_OFFSET
|
||||||
|| (branch_offset < THM2_MAX_BWD_BRANCH_OFFSET))))
|
|| (branch_offset < THM2_MAX_BWD_BRANCH_OFFSET)))
|
||||||
|
|| ((sym_flags != STT_ARM_TFUNC) && !globals->use_blx))
|
||||||
{
|
{
|
||||||
/* The target is out of reach or we are changing modes, so
|
/* The target is out of reach or we are changing modes, so
|
||||||
redirect the branch to the local stub for this
|
redirect the branch to the local stub for this
|
||||||
@ -6439,8 +6457,14 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
|||||||
+ stub_entry->stub_sec->output_offset
|
+ stub_entry->stub_sec->output_offset
|
||||||
+ stub_entry->stub_sec->output_section->vma);
|
+ stub_entry->stub_sec->output_section->vma);
|
||||||
|
|
||||||
/* This call becomes a call to Arm for sure. Force BLX. */
|
/* If this call becomes a call to Arm, force BLX. */
|
||||||
lower_insn = (lower_insn & ~0x1000) | 0x0800;
|
if (globals->use_blx)
|
||||||
|
{
|
||||||
|
if ((stub_entry
|
||||||
|
&& !arm_stub_is_thumb (stub_entry->stub_type))
|
||||||
|
|| (sym_flags != STT_ARM_TFUNC))
|
||||||
|
lower_insn = (lower_insn & ~0x1000) | 0x0800;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2008-06-09 Christophe Lyon <christophe.lyon@st.com>
|
||||||
|
|
||||||
|
* ld-arm/farcall-thumb-thumb-m.d: Fix branch type.
|
||||||
|
* ld-arm/farcall-thumb-arm.d: Likewise.
|
||||||
|
|
||||||
2008-05-31 Nick Clifton <nickc@redhat.com>
|
2008-05-31 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR ld/6430
|
PR ld/6430
|
||||||
|
@ -12,7 +12,7 @@ Disassembly of section .text:
|
|||||||
...
|
...
|
||||||
|
|
||||||
00001018 <_start>:
|
00001018 <_start>:
|
||||||
1018: f7ff eff2 blx 1000 <_start-0x18>
|
1018: f7ff fff2 bl 1000 <_start-0x18>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
@ -12,7 +12,7 @@ Disassembly of section .text:
|
|||||||
100c: 02001015 .word 0x02001015
|
100c: 02001015 .word 0x02001015
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: f7ff eff6 blx 1000 <_start-0x10>
|
1010: f7ff fff6 bl 1000 <_start-0x10>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
Reference in New Issue
Block a user