确保寄存器在函数入口处被压入堆栈

Ensure that register is pushed to the stack at function entry

通常,C 函数由 clang 翻译为 ARM 架构,这样 LR 寄存器被压入堆栈。但是,如果函数本身不包含任何函数调用,则 LR 不会被压入,即编译器假定 LR 不会被修改。

有没有办法让clang/llc无论是否调用函数,总是在函数开头压入LR?

从上面的评论中复制。

尝试在函数体的开头添加 asm volatile ( "" : : : "lr" );。这告诉 LLVM lr 被破坏了。如果 LLVM 发现寄存器在函数中的任何地方被破坏,它必须在函数的开头保存该寄存器。

(有点神秘的内联 asm 语法记录在此处:https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html