Thumb interworking on untyped symbols
Tue May 31 16:42:00 GMT 2011
The ARM EABI requires that linkers support interworking for function
(STT_FUNC) symbols, either via veneers or by bl/blx conversion. We already do
However for untyped symbols we blindly assume that these are ARM code. At the
time this was implemented it probably made sense - the EABI didn't exist and
most of the world was ARM mode anyway. With the advent of Thumb-2 and ARMv7-
M, likely as not this is wrong.
The EABI only requires interworking be performed for function symbols. For
other symbols the behavior is less clear, the EABI stating that "interworking
for untyped symbols must be encoded directly in the object file". By my
reading that means we should assume the user wrote bl/blx as appropriate and
leave well alone.
The attached patch implements this by effectively disabling veneer generation
for symbols that do not have funciton type.
Tested on arm-none-eabi
Applied to CVS head
2011-05-31 Paul Brook <firstname.lastname@example.org>
* elf32-arm.c (elf32_arm_final_link_relocate): Only do bl conversion
for known functions.
(elf32_arm_swap_symbol_in): Only set ST_BRANCH_TO_ARM for function
* arm.h (arm_st_branch_type): Add ST_BRANCH_UNKNOWN.
* ld-arm/cortex-a8-far.d: Adjust expected output.
* ld-arm/arm-call1.s: Give function symbol correct type.
* ld-arm/arm-call2.s: Ditto.
* ld-arm/farcall-group4.s: Ditto.
* ld-arm/arm-elf.exp (cortex-a8-far): Define far symbols with correct
type via assembly file.
* ld-arm/cortex-a8-far-3.s: New file.
* ld-arm/abs-call-1.s: Add Thumb tests
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 4973 bytes
Desc: not available
More information about the Binutils