[Patch, ARM]Enable veneer routine for R_ARM_THM_JUMP19

Tony Wang tony.wang@arm.com
Mon Aug 4 04:40:00 GMT 2014


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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: relocation_jump19.diff
Type: application/octet-stream
Size: 11086 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20140804/e15b17e9/attachment.obj>


More information about the Binutils mailing list