Gcc 内联一个简单的汇编函数
我(试图)遵循,但我一定是做错了什么:函数没有内联(它仍然在反汇编中被调用)。以下是我所做的: get_regs.h:Gcc 内联一个简单的汇编函数,gcc,assembly,x86,inline-assembly,inlining,Gcc,Assembly,X86,Inline Assembly,Inlining,我(试图)遵循,但我一定是做错了什么:函数没有内联(它仍然在反汇编中被调用)。以下是我所做的: get_regs.h: inline unsigned long\uu get\u esp(void){ \uuu asm\uuuu(“movl%esp,%eax”); } 程序c: … #包括“get_regs.h” … extern unsigned long\u get\u esp(void) … tmp=\uu get\u esp() 编译为(出于各种原因的其他选项): gcc-g-fno堆栈
inline unsigned long\uu get\u esp(void){
\uuu asm\uuuu(“movl%esp,%eax”);
}
程序c:…
#包括“get_regs.h”
…
extern unsigned long\u get\u esp(void)代码>
…
tmp=\uu get\u esp()代码>
编译为(出于各种原因的其他选项):
gcc-g-fno堆栈保护器-mpreferered stack boundary=2 program.c
这遵循第二条建议,将定义包含在头文件中
我意识到我可以使用扩展汇编并将结果从%eax
复制到tmp
,但我想了解如何进行内联。我找到了一些关于SO的线索,但似乎没有一个能覆盖我的案子
系统:
-Ubuntu 12.04
-通用条款4.6.3.
-x86 32位您需要启用编译器优化(即使是最基本的级别),以便可能进行内联
顺便说一下,除非您对函数的非内联副本有任何特殊需要,否则您可以删除extern重新声明,只使用头文件中包含的内联声明