"undefined reference to memcpy" 在 u-boot-spl 构建期间。如何使用架构辅助的 memcpy?

"undefined reference to memcpy" during u-boot-spl build. How can I use the archtecture assisted memcpy?

当我为我们的开发板构建 u-boot-spl 时,我看到了这些 link 错误。 (u-boot 版本 v2021.10,提交 50c84208ad,Tom Rini,2021 年 10 月 4 日)

u-boot/common/spl/spl.c:669: undefined reference to `memcpy'
u-boot/common/spl/spl.c:684: undefined reference to `mem_malloc_init'
...

但是arch/arm/Kconfig说(我的板子是ARM64)

config USE_ARCH_MEMCPY
    bool "Use an assembly optimized implementation of memcpy"
    default y if !ARM64
    depends on !ARM64 || (ARM64 && (GCC_VERSION >= 90400))
    help
      Enable the generation of an optimized version of memcpy.
      Such an implementation may be faster under some conditions
      but may increase the binary size.

所以如果ARM64和GCC版本高于9.04,USE_ARCH_MEMCPY应该打开
在我的例子中,我可以检查 include/config/auto.conf 这两个条件是否为真。

CONFIG_ARM64=y
CONFIG_GCC_VERSION=100201

但是USE_ARCH_MEMCPY没有出现在include/cofig/auto.conf中(这正常吗?)。
反正我觉得这个CONFIG_USE_ARCH_MEMCPY应该是y。为什么它给我这个 memcpy 未定义的错误?

我签入了lib/Makefile,我看到了

obj-y += string.o

这是无条件的,这个 string.c 包含 memcpy 函数。不过这个函数当然是被#ifndef包围的__HAVE_ARCH_MEMCPY,反正不是我想要的

有没有我应该打开的选项来使用这个硬件辅助的 memcpy?
添加:我尝试添加 CONFIG_LTO 但它没有用。

我搜索了 Kconfig 文件,发现有 CONFIG_USE_ARCH_MEMCPY、CONFIG_SPL_USE_ARCH_MEMCPY、CONFIG_USE_ARCH_MEMSET、CONFIG_SPL_USE_ARCH_MEMSET 等。所以我选择了这些配置用于我的木板。这些错误消失了(设置了 CONFIG_LTO-link 时间优化,因此不使用 stdlib)。对于 strncmp、timer_init、puts、hang、mem_malloc_init 等,我还有一些 'undefined' 错误。我不确定我是否可以使用类似的方法修复这些错误,或者这种方法是否正确, 可取的方法。如果我更喜欢软件程序,我应该怎么做?
等待更好的答案。
添加(2021.11.29): 来自 u-boot 电子邮件列表的 Ovidiu Panait 告诉我可以通过将 CONFIG_SPL_LIBGENERIC_SUPPORT 和 CONFIG_SPL_LIBCOMMON_SUPPORT 设置为 'y' 来消除一些 'undefined symbol' 错误。设置后,我发现那些 memcpy、memset link 错误也没有设置 USE_ARCH_xxx 或 USE_SPL_ARCH_xxx 配置。