[PATCH u-boot 12/39] string: make memcpy() and memset() visible to fix LTO linking errors

Bin Meng bmeng.cn at gmail.com
Mon Mar 8 08:56:01 CET 2021


Hi Marek,

On Sun, Mar 7, 2021 at 12:26 PM Marek Behún <marek.behun at nic.cz> wrote:
>
> It seems that sometimes (happening on ARM64, for example with
> turris_mox_defconfig) GCC, when linking with LTO, changes the symbol
> names of some functions, for example lib/string.c's memcpy() function to
> memcpy.isra.0.
>
> This is a problem however when GCC for a code such as this:
>         struct some_struct *info = get_some_struct();
>         struct some struct tmpinfo;
>         tmpinfo = *info;
> emits a call to memcpy() by builtin behaviour, to copy *info to tmpinfo.
> memset() can be generated sometimes as well.
>
> This then results in the following linking error:
>   .../lz4.c:93: undefined reference to `memcpy'
>   .../uuid.c:206: more undefined references to `memcpy' follow
>
> Make memcpy() and memset() visible by using the __used macro to avoid
> this error.

This sounds like a GCC bug of using -fno-builtin and -flto. Could you
file a bugzilla to GCC people to get some comments?

>
> Signed-off-by: Marek Behún <marek.behun at nic.cz>
> ---
>  lib/string.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>

Regards,
Bin


More information about the U-Boot mailing list