RISC-V Linux 用户 ABI¶
/proc/cpuinfo 中的 ISA 字符串排序¶
ISA 字符串中 ISA 扩展名称的规范顺序在非特权规范的第 27 章中定义。该规范使用模糊的措辞,例如“应该”,当涉及到排序时,因此出于我们的目的,以下规则适用
单字母扩展名首先出现,按规范顺序排列。规范顺序是“IMAFDQLCBKJTPVH”。
所有多字母扩展名将用下划线与其他扩展名分隔。
其他标准扩展(以“Z”开头)将排在单字母扩展名之后,在任何更高特权的扩展名之前进行排序。
对于其他标准扩展,紧随“Z”之后的第一个字母通常表示最密切相关的字母扩展类别。如果命名了多个“Z”扩展,它们将首先按类别排序,按上述规范顺序,然后在类别内按字母顺序排序。
标准管理程序级扩展(以“S”开头)将列在标准非特权扩展之后。如果列出了多个管理程序级扩展,它们将按字母顺序排序。
标准机器级扩展(以“Zxm”开头)将列在任何较低特权的标准扩展之后。如果列出了多个机器级扩展,它们将按字母顺序排序。
非标准扩展(以“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 模式扩展,在这些行之一中的存在并不能保证内核正在利用该扩展,或者该功能将在由该内核管理的来宾 VM 中可见。
相反,在这些行中缺少扩展并不一定意味着硬件不支持该功能。正在运行的内核可能无法识别该扩展,或者可能已故意将其从列表中删除。
未对齐的访问¶
用户空间支持未对齐的标量访问,但它们的性能可能较差。仅当支持 Zicclsm 扩展时,才支持未对齐的向量访问。
指针屏蔽¶
通过 PR_SET_TAGGED_ADDR_CTRL
和 PR_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)。