[U-Boot] GCC 5.2 issue on imx28

Måns Rullgård mans at mansr.com
Wed Aug 5 21:23:14 CEST 2015


Jörg Krause <joerg.krause at embedded.rocks> writes:

> Dear Måns Rullgård, Otavio Salvador,
>
> On Di, 2015-07-28 at 14:39 +0100, Måns Rullgård wrote:
>> Otavio Salvador <otavio.salvador at ossystems.com.br> writes:
>
> [snip]
>
>> There are two errors reports:
>> 
>> 1. An undefined reference to the symbol "lowlevel_init"
>> 2. A complaint about the ".rel.plt" section not being handled by the
>>    linker script.
>> 
>> The second error is probably caused by the first.  A quick grep turns 
>> up
>> this snippet in arch/arm/cpu/arm926ejs/mxs/mxs.c:
>> 
>> /* Lowlevel init isn't used on i.MX28, so just have a dummy here */
>> inline void lowlevel_init(void) {}
>> 
>> The semantics for non-static functions declared inline have changed 
>> in
>> gcc5, causing the above (empty) function not to be emitted as an
>> external symbol.
>> 
>> Since that function is only referenced from start.S, it should not be
>> declared inline at all.  This patch should thus fix your problem:
>> 
>> diff --git a/arch/arm/cpu/arm926ejs/mxs/mxs.c 
>> b/arch/arm/cpu/arm926ejs/mxs/mxs.c
>> index ef130ae..b1d8721 100644
>> --- a/arch/arm/cpu/arm926ejs/mxs/mxs.c
>> +++ b/arch/arm/cpu/arm926ejs/mxs/mxs.c
>> @@ -24,7 +24,7 @@
>>  DECLARE_GLOBAL_DATA_PTR;
>>  
>>  /* Lowlevel init isn't used on i.MX28, so just have a dummy here */
>> -inline void lowlevel_init(void) {}
>> +void lowlevel_init(void) {}
>>  
>>  void reset_cpu(ulong ignored) __attribute__((noreturn));
>>  
>
> I stumbled over the same problem. Unfortunatly, I did not find this
> patch before (only the error report from Otavia) and submitted a
> similar patch [1] which keeps the inline keyword.
>
> Best regards
> Jörg Krause
>
> [1] "arm: mxs: make inline function compatible for GCC 5"
> https://patchwork.ozlabs.org/patch/504043/

Since the function is only referenced from outside the C file, any use
of inline makes little sense to me.  While your patch achieves the
result of creating a linkable instance of the function, it is more
complicated than it needs to be.

-- 
Måns Rullgård
mans at mansr.com


More information about the U-Boot mailing list