确保在函数入口处将寄存器推送到堆栈

时间:2015-10-08 12:55:48

标签: compilation clang llvm llvm-clang

通常,C语言的功能由clang转换为ARM体系结构,以便LR寄存器被压入堆栈。但是,如果函数本身不包含任何函数调用,则不推送LR,即编译器假定LR不会被修改。

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

1 个答案:

答案 0 :(得分:0)

复制上述评论。

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

(这里记录了一些神秘的内联asm语法:https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html