asmlinkage的作用

来源:http://www.cnblogs.com/blueyunchao0618/archive/2016/03/03/5240454.html
-Advertisement-
Play Games

本文轉載自:http://blog.chinaunix.net/uid-24945116-id-83893.html 學習啦! asmlinkage是個巨集,使用它是為了保持參數在stack中。因為從彙編語言到C語言代碼參數的傳遞是通過stack的,它也可能從stack中得到一些不需要的參數。Asml


本文轉載自:http://blog.chinaunix.net/uid-24945116-id-83893.html

學習啦!

 

asmlinkage是個巨集,使用它是為了保持參數在stack中。因為從彙編語言到C語言代碼參數
的傳遞是通過stack的,它也可能從stack中得到一些不需要的參數。Asmlinkage將要
解析那些參數。

看一下/arch/x86/include/asm/linkage.h裡面的定義: #define CPP_ASMLINKAGE
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
__attribute__是關鍵字,是gcc的C語言擴展,regparm(0)表示不從寄存器傳遞參數 如果是__attribute__((regparm(3))),那麼調用函數的時候參數不是通過棧傳遞,而是直接放到寄存器里,被調用函數直接從寄存器取參數。


__attribute__機制是GNU C的一大特色,它可以設置函數屬性、變數屬性和類型屬性等。可以通過它們向編譯器提供更多數據,幫助編譯器執行優化等。
__attribute__((regparm(0))):告訴gcc編譯器該函數不需要通過任何寄存器來傳遞參數,參數只是通過堆棧來傳遞。
__attribute__((regparm(3))):告訴gcc編譯器這個函數可以通過寄存器傳遞多達3個的參數,這3個寄存器依次為EAX、EDX 和 ECX。更多的參數才通過堆棧傳遞。這樣可以減少一些入棧出棧操作,因此調用比較快。

asmlinkage定義:#define asmlinkage __attribute__((regparm(0)))
表示用0個寄存器傳遞函數參數,這樣,所有的函數參數強迫從棧中提取。
這個asmlinkage大都用在系統調用中,系統調用需要在entry.s文件中用彙編語言調用,所以必須要保證它符合C語言的參數傳遞規則,才能用彙編語言正確調用它。
這也是為何使用asmlinkage的原因吧!這是我的理解。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CentOS7.0中MariaDB的簡單安裝與配置方法
  • 當資料庫出現嚴重的性能問題或者hang了的時候,伺服器端sqlplus也無法連接時,此時如果想獲取資料庫當前的狀態信息,以便事後診斷,那麼我們非常需要通過systemstate dump來知道進程在做什麼,在等待什麼,誰是資源的持有者,誰阻塞了別人。在出現上述問題時,及時收集systemstate ...
  • 一、簡介 Redis的啟動也就是main函數的執行,程式的入口在redis.c中,啟動流程: 1. 初始化預設伺服器配置,如果是sentinel模式還需進行額外的配置 2. 修改配置文件或配置選項,這其中包括處理諸如-h/--help,-v/--version,--test-memory的特殊選項,
  • 最近遇到一個很有意思的使用環境,操作人員將所有的網站應用內容投放到共用存儲裡面,並且使用微軟的SMB協議將其以CIFS的方式共用出來,使用Windows Server 2008 R2的IIS將其連接起來。在多IIS主機的情況下,實現一次部署,多點生效的效果。 不過在使用的時候遇到了一些問題,在漢語世
  • 藍牙Bluetooth技術以及廣泛的應用於各種設備,並將繼續在物聯網IoT領域擔任重要角色。下麵搜集整理了一些關於藍牙技術的小知識,以備參考。藍牙Bluetooth技術始創於1994年,其名字來源於10世紀時的一位丹麥國王Harold Bluetooth,他統一了現在的挪威、瑞典和丹麥地區,以他的名...
  • 阿裡雲 Ubuntu 14.*上搭建laravel環境 之前做項目時都是搭建在自己的伺服器上,可是自己的那個伺服器是很久以前一點點配置好的,也是各種百度,該忘記的都忘了, 所以前一段在客戶的阿裡雲Ubuntu上搭建項目時發現又出了問題, laravel框架連接mysql報錯,具體錯誤碼記不住了,大概
  • 系統來自系統媽:http://www.xitongma.com/ 系統概述 蘿蔔家園GHOST win7 64位裝機旗艦版加快“網上鄰居”共用速度;取消不需要的網路服務組件,系統支持Windows安裝,可以在Windows中一鍵安裝了,方便了不會COMS設置和GHOST的人。集成了自2015年流行的
  • 前言:apt-get在安裝大多數包時是沒有問題的,但有些時候用apt-get命令安裝包出現錯誤提示如:the following packages have unmet dependencies(下列軟體包存在未滿足的依賴關係),通常可以採取更新軟體源的方法,這樣一般可以解決大多數軟體包安裝問題,但
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...