[PATCH 1/1] arm: cpu: armv7m: add required .type name, %function directive

Johannes Krottmayer johannes at krotti42.com
Wed May 7 21:07:03 CEST 2025


Hi Tom!

Okay, STT_FUNC is an alternative spelling for %function, didn't
know that before. So my question is deprecated.

Sorry, for wasting your time.

BTW, I will add the required macros and also try to add the VFP
support. But I think it's better in two different patches. First
patch with the ENTRY/ENDPROC macros and later with the VFP patch.

On 5/7/25 20:17, Johannes Krottmayer wrote:
> Hi Tom!
> 
> Thanks for the quick response!
> 
> On 5/7/25 18:55, Tom Rini wrote:
>> On Wed, May 07, 2025 at 06:07:54AM +0000, Johannes Krottmayer wrote:
>>
>>> Since GNU binutils version 2.44, assembly functions must include
>>> the assembler directive .type name, %function. If not a call to
>>> these functions fails with the error message 'Unknown destination
>>> type (ARM/Thumb)' and the error message 'dangerous relocation:
>>> unsupported relocation' at linking.
>>>
>>> Signed-off-by: Johannes Krottmayer <johannes at krotti42.com>
>>> Cc: Tom Rini <trini at konsulko.com>
>>> ---
>>>    arch/arm/cpu/armv7m/start.S | 1 +
>>>    1 file changed, 1 insertion(+)
>>>
>>> diff --git a/arch/arm/cpu/armv7m/start.S b/arch/arm/cpu/armv7m/start.S
>>> index 0c07f2140c7..c20f01a0aed 100644
>>> --- a/arch/arm/cpu/armv7m/start.S
>>> +++ b/arch/arm/cpu/armv7m/start.S
>>> @@ -12,5 +12,6 @@ reset:
>>>    	W(b)	_main
>>>
>>>    .globl	c_runtime_cpu_setup
>>> +.type c_runtime_cpu_setup, %function
>>>    c_runtime_cpu_setup:
>>>    	mov	pc, lr
>>
>> Thanks for making the patch. There's an argument that this should use
>> the ENTRY / ENDPROC macros from <linux/linkage.h> but that also shows
>> that we're missing commit 5d4cae5fe2ea ("[ARM] VFP: fix section mismatch
>> error") from the kernel. And so I'm fine with making a TODO to clean
>> this up later if you don't want to embark on something a bit more
>> complicated here.
>>
> 
> No problem for me to creating my simple patch. It's also not a problem
> for me to use the required macros (ENTRY, ENDPROC). Use some similar
> macros on my own projects too.
> 
> I have searched for your mentioned commit from Linux, and it's okay
> when I try to add this too in further patches. For the correct
> initialization from the floating point unit I must look more
> precisely into the U-Boot and Linux source code.
> 
> But I have a question according the ENPROC macro:
> 
> include/linux/linkage.h (from U-Boot):
> #ifndef ENDPROC
> #define ENDPROC(name) \
> 	.type name STT_FUNC ASM_NL \
> 	END(name)
> #endif
> 
> Especially the macro/define STT_FUNC. I have thought STT_FUNC is
> %function, but haven't found these in the current U-Boot master
> branch.
> 
> Simple search with grep on the shell:
> "
> jk at workstation:~/Projects/U-Boot/src> grep -R STT_FUNC
> include/linux/linkage.h:        .type name STT_FUNC ASM_NL \
> include/elf.h:#define STT_FUNC  2               /* function */
> jk at workstation:~/Projects/U-Boot/src>
> "
> 
> Also tried a much more comfortable search with the elixir.bootlin
> identifier search. As you can see STT_FUNC is defined only in the
> ELF header. 'include/linux/linkage.h' doesn't include the ELF
> header. And I don't know if the value 2 for STT_FUNC is an alternative
> usage from the .type directive. 'include/linux/linkage.h' includes
> 'asm/linkage.h'. I'm still a newbie with the U-Boot build process
> and I think on build the machine dependent header will included
> (arch/arm/include/linkage.h). Correct me if I'm wrong please.
> Also there will be elf.h not included.
> 
> Maybe the STT_FUNC will defined in build process, but shouldn't
> I find this in a specific Makefile with a simple search with grep?
> 
> By the I could change STT_FUNC to %function, but I didn't know
> (not tried yet) if this has other bad effects.
> 
> Thanks in advance!
> 
> Kind regards,
> 
> Johannes
> 
> 
> 
> 




More information about the U-Boot mailing list