[U-Boot] GCC 5.2 issue on imx28

Jörg Krause joerg.krause at embedded.rocks
Wed Aug 5 21:17:03 CEST 2015


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/


More information about the U-Boot mailing list