RISC-V Linux 使用者 ABI

/proc/cpuinfo 中的 ISA 字串排序

ISA 字串中 ISA 副檔名稱的規範順序在非特權規範的第 27 章中定義。 該規範使用了含糊的措辭,例如在排序時應該,因此,出於我們的目的,以下規則適用

  1. 單字母副檔名首先出現,按規範順序排列。 規範順序是 “IMAFDQLCBKJTPVH”。

  2. 所有多字母副檔名將用下劃線與其他副檔名分隔開。

  3. 其他標準副檔名(以“Z”開頭)將在單字母副檔名之後,任何更高特權的副檔名之前排序。

  4. 對於其他標準副檔名, “Z”後面的第一個字母通常表示最密切相關的字母副檔名類別。 如果命名了多個“Z”副檔名,則它們將首先按類別排序,按上述規範順序排序,然後在類別內按字母順序排序。

  5. 標準主管級別擴充套件(以 “S” 開頭)將在標準非特權擴充套件之後列出。 如果列出了多個主管級別擴充套件,則它們將按字母順序排列。

  6. 標準機器級別擴充套件(以“Zxm”開頭)將在任何較低特權的標準擴充套件之後列出。 如果列出了多個機器級別擴充套件,則它們將按字母順序排列。

  7. 非標準擴充套件(以 “X” 開頭)將在所有標準擴充套件之後列出。 如果列出了多個非標準擴充套件,則它們將按字母順序排列。

以下是一個遵循該順序的字串示例

rv64imadc_zifoo_zigoo_zafoo_sbar_scar_zxmbaz_xqux_xrux

/proc/cpuinfo 中的 “isa” 和 “hart isa” 行

/proc/cpuinfo 中的 “isa” 行描述了核心識別的並在所有 hart 上實現的 RISC-V ISA 擴充套件的最低公分母。“hart isa” 行則相反,描述了核心在特定 hart 上識別的擴充套件集,即使這些擴充套件可能不存在於系統中的所有 hart 上。

在這兩行中,擴充套件的存在僅保證硬體具有所描述的功能。在擴充套件的功能可以被使用者空間程式完全使用之前,可能需要額外的核心支援或策略更改。類似地,對於 S 模式擴充套件,出現在這些行中的一個並不保證核心正在利用該擴充套件,或者該功能將在由此核心管理的 guest VM 中可見。

相反,這些行中缺少擴充套件並不一定意味著硬體不支援該功能。 執行的核心可能無法識別該擴充套件,或者可能已故意將其從列表中刪除。

未對齊的訪問

使用者空間支援未對齊的標量訪問,但它們的效能可能較差。 僅當支援 Zicclsm 擴充套件時,才支援未對齊的向量訪問。

指標掩碼

透過 PR_SET_TAGGED_ADDR_CTRLPR_GET_TAGGED_ADDR_CTRL prctl() 操作提供對使用者空間中指標掩碼(Supm 擴充套件)的支援。 預設情況下,指標掩碼已停用。 要啟用它,使用者空間必須呼叫 PR_SET_TAGGED_ADDR_CTRL,並將 PR_PMLEN 欄位設定為應用程式所需的掩碼/標籤位數。 PR_PMLEN 被解釋為下限; 如果核心無法滿足請求,則 PR_SET_TAGGED_ADDR_CTRL 操作將失敗。 實際的標籤位數由 PR_GET_TAGGED_ADDR_CTRL 操作在 PR_PMLEN 中返回。

此外,當啟用指標掩碼(PR_PMLEN 大於 0)時,支援標記地址 ABI,其介面和行為與 AArch64 的文件相同 (AArch64 標記地址 ABI)。