通常,C语言的功能由clang转换为ARM体系结构,以便LR寄存器被压入堆栈。但是,如果函数本身不包含任何函数调用,则不推送LR,即编译器假定LR不会被修改。
有没有办法让clang / llc总是在函数的开头推LR,无论它是否调用函数?
答案 0 :(得分:0)
复制上述评论。
尝试在函数体的开头粘贴asm volatile ( "" : : : "lr" );
。这告诉LLVM lr
遭到破坏。如果LLVM发现寄存器在函数的任何地方被破坏,它必须在函数的开头保存该寄存器。
(这里记录了一些神秘的内联asm语法:https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html)