[PATCH u-boot v4 06/36] string: make memcpy(), memset(), memcmp() and memmove() visible for LTO
Simon Glass
sjg at chromium.org
Thu May 20 19:51:53 CEST 2021
On Thu, 20 May 2021 at 05:25, 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.
>
> This then results in the following linking error:
> .../lz4.c:93: undefined reference to `memcpy'
> .../uuid.c:206: more undefined references to `memcpy' follow
>
> GCC's documentation says this about -nodefaultlibs option:
> The compiler may generate calls to "memcmp", "memset", "memcpy" and
> "memmove". These entries are usually resolved by entries in libc.
> These entry points should be supplied through some other mechanism
> when this option is specified.
>
> Make these functions visible by using the __used macro to avoid this
> error.
>
> Signed-off-by: Marek Behún <marek.behun at nic.cz>
> ---
> lib/string.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
Reviewed-by: Simon Glass <sjg at chromium.org>
More information about the U-Boot
mailing list