我试图定义一个没有前奏/后续的函数,即“着陆地址”,以便可以调用由编译器正确管理的内部函数(对于调用者清除环境非常有用)。
我发现我可以使用内联汇编创建一个全局标签,但是我在调用同一文件中的另一个函数时遇到了问题。当我按照这里列出的代码进行编译时,我收到一个警告:
“WARNING: "handle_vmexit" [/Code/hyper/kernel/hyper.ko] undefined!”
当我去掉static修饰符时,就没有问题了。
所以我的问题是,为什么内联汇编无法与静态的handle_vmexit链接,以及如何使其调用静态的handle_vmexit。
这是相关代码:
我发现我可以使用内联汇编创建一个全局标签,但是我在调用同一文件中的另一个函数时遇到了问题。当我按照这里列出的代码进行编译时,我收到一个警告:
“WARNING: "handle_vmexit" [/Code/hyper/kernel/hyper.ko] undefined!”
当我去掉static修饰符时,就没有问题了。
所以我的问题是,为什么内联汇编无法与静态的handle_vmexit链接,以及如何使其调用静态的handle_vmexit。
这是相关代码:
static void handle_vmexit(void){
...
}
__asm__(".handle_vmexit: \n\t"
"call handle_vmexit"
);
__attribute__((used))
。另外,将其地址作为输入传递给内联汇编也应该能够起到作用。 - Jester.handle_vmexit
设置为handle_vmexit
的别名,而不是使用额外的调用来实现。或者你需要这个返回地址在堆栈上吗? - Peter Cordes__attribute__((used))
,并且可以将内联汇编移动到单独的、更易于维护的汇编源文件中。 - Ross Ridge