防止 ArmClang 添加对标准 C 库的调用

Prevent ArmClang to add calls to Standard C library

我正在 STM32H753 上评估 Keil Microvision IDE。

我正在对不同优化级别的 ARMCC5 和 AC6 进行编译器比较。 AC6 基于 Clang.

我的代码没有使用 memcpy,我在项目设置中取消选中 "Use MicroLIB",但是我的代码中的基本字节复制循环被替换为 AC6 的 memcpy(仅在 "high" 优化级别)。 ARMCC5 不会发生这种情况。

我尝试使用编译选项来避免这种情况,如 here 所述:-ffreestanding-disable-simplify-libcalls,在编译器和链接器级别,但它没有改变(第二次选项,我收到一条错误消息,指出不支持该选项)。

在 ARMCLANG 参考指南中,我找到了阻止 (??) 编译器使用标准库的任何函数的选项 -nostdlib -nostdlibinc

但是我仍然需要 math.h 功能。

您知道如何防止 clang 使用标准 C 库中未在代码中显式调用的函数吗?

编辑:这是一个快速而肮脏的可重现示例: https://godbolt.org/z/AX8_WV 请不要讨论这个例子的质量,我知道它是愚蠢的!!,我知道 memset 等...只是为了理解问题

gcc 知道很多关于 memcpy、memset 和类似的函数,甚至它们被称为 "the builtin functions"。如果您不想默认使用这些功能,只需使用命令行选项 -fno-builtin

https://godbolt.org/z/a42m4j