我想定义一个将从 entry_32.S 调用的函数。它将在真正的系统调用处理函数被调用之前被调用。

为了避免函数调用和参数传递的开销,是否可以将my_foo声明为

   fastcall inline int my_foo (int n); 
 
    /*in entry_32.S*/ 
    pushl %eax 
    CFI_ADJUST_CFA_OFFSET 4 
    SAVE_ALL 
    .... 
/* My code begins*/ 
    call my_foo 
    cmpl $0, %eax 
    jne syscall_wrong 
    movl PT_ORIG_EAX(%esp), %eax 
/* My code ends */ 
    call *sys_call_table(,%eax,4) 

请您参考如下方法:

编译器可以在 C 代码中内联函数(无论它们是否具有 inline 关键字)但汇编器并不那么聪明。您在汇编中编写的内容正是将要汇编的内容,根本没有优化(如内联)。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!