diff options
author | Nick Clifton <nickc@redhat.com> | 2013-07-18 12:00:26 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-07-18 12:00:26 +0000 |
commit | 39f21624991525f1f937a796cf008654a8596240 (patch) | |
tree | 9409748b4d54e12a37de07ad1a855b0a0bbaf8b5 /bfd/elf32-arm.c | |
parent | 8c997c2767dbcb0522cc4f586a4f172cf7f08fcf (diff) | |
download | gdb-39f21624991525f1f937a796cf008654a8596240.zip gdb-39f21624991525f1f937a796cf008654a8596240.tar.gz gdb-39f21624991525f1f937a796cf008654a8596240.tar.bz2 |
* elf32-arm.c (arm_type_of_stub): Don't use ST_BRANCH_TO_ARM for
thumb only targets.
(elf32_arm_final_link_relocate): Likewise.
* ld-arm/thumb-b-lks-sym.d: Updated to be more flexible.
* ld-arm/thumb-bl-lks-sym.d: Likewise.
Diffstat (limited to 'bfd/elf32-arm.c')
-rw-r--r-- | bfd/elf32-arm.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 427ac6d..8f88839 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -3609,6 +3609,12 @@ arm_type_of_stub (struct bfd_link_info *info, r_type = ELF32_R_TYPE (rel->r_info); + /* ST_BRANCH_TO_ARM is nonsense to thumb-only targets when we + are considering a function call relocation. */ + if (thumb_only && (r_type == R_ARM_THM_CALL || r_type == R_ARM_THM_JUMP24) + && branch_type == ST_BRANCH_TO_ARM) + branch_type = ST_BRANCH_TO_THUMB; + /* For TLS call relocs, it is the caller's responsibility to provide the address of the appropriate trampoline. */ if (r_type != R_ARM_TLS_CALL @@ -8123,6 +8129,14 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, else addend = signed_addend = rel->r_addend; + /* ST_BRANCH_TO_ARM is nonsense to thumb-only targets when we + are resolving a function call relocation. */ + if (using_thumb_only (globals) + && (r_type == R_ARM_THM_CALL + || r_type == R_ARM_THM_JUMP24) + && branch_type == ST_BRANCH_TO_ARM) + branch_type = ST_BRANCH_TO_THUMB; + /* Record the symbol information that should be used in dynamic relocations. */ dynreloc_st_type = st_type; |