This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch, ARM]Enable veneer routine for R_ARM_THM_JUMP19


Hi there,

According to AAPCS-ELF specification R_ARM_THM_JUMP19 should also be
veneered if the target is outside the addressable span of the branch
instruction or where interworking happened.

So the attached patch implements the veneer routine for R_ARM_THM_JUMP19,
and two new macros THM2_MAX_FWD_COND_BRANCH_OFFSET and
THM2_MAX_BWD_COND_BRANCH_OFFSET are introduced. Also updated the conditional
branch for both cases mentioned above.

Tested with Binutils regression test, no new regressions. No regression on
gcc trunk with target cortex m4

Ok for the trunk?

bfd/ChangeLog:
2014-08-4  Tony Wang <tony.wang@arm.com>

     * elf32-arm.c (elf32_arm_final_link_relocate): Implement the veneer
routine for 
R_ARM_THM_JUMP19.
     (arm_type_of_stub): Add conditional clause for R_ARM_THM_JUMP19
     (elf32_arm_size_stub): Ditto.

ld/testsuite/ChangeLog:
2014-08-4  Tony Wang <tony.wang@arm.com>

     * ld-arm/jump-reloc-veneers-cond.s: New test.
     * ld-arm/farcall-cond-thumb-arm.s: Ditto.
     * ld-arm/jump-reloc-veneers-cond-short.d: Expected output for target
without 
a veneer generation.
     * ld-arm/jump-reloc-veneers-cond-long.d: Expected output for target
with a 
veneer generation.
     * ld-arm/farcall-cond-thumb-arm.d: Expected output for inter working
veneer 
generation.
     * ld-arm/arm-elf.exp: Add tests for conditional branch veneer.

Attachment: relocation_jump19.diff
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]