Thumb interworking on untyped symbols

Paul Brook
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  <>

	* 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...
Name: patch
Type: text/x-patch
Size: 4973 bytes
Desc: not available
URL: <>

More information about the Binutils mailing list