zoukankan      html  css  js  c++  java
  • linux---asmlinkage

    看一下/usr/include/asm/linkage.h里面的定义:
    #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
    __attribute__是关键字,是gcc的C语言扩展,regparm(0)表示不从寄存器传递参数

    如果是__attribute__((regparm(3))),那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数

    还有一种是:

    #define fastcall __attribute__((regparm(3))) 
    #define asmlinkage __attribute__((regparm(0))) 
    函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。 
    gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一种是通过寄存器缺省时采用寄存器,假如你要在你的汇编过程中调用c语言函数,并且想通过堆栈传递参数,你定义的c函数时要在函数前加上宏asmlinkage

    Coding
  • 相关阅读:
    IDEA效率快捷键
    常用文件/文件夹操作
    git log状态下退出方法
    ImageList 构造函数
    ImageList 控件
    【转】图像分割代码合集
    【转】图像分割论文及代码资源汇总
    SLIC 算法
    c/c++内存分配详解
    c++内存分配
  • 原文地址:https://www.cnblogs.com/ccie-leon-43093/p/5944558.html
Copyright © 2011-2022 走看看