241 lines · plain
1.. include:: ../../disclaimer-zh_CN.rst2 3:Original: :ref:`Documentation/arch/arm64/elf_hwcaps.rst <elf_hwcaps_index>`4 5Translator: Bailu Lin <bailu.lin@vivo.com>6 7================8ARM64 ELF hwcaps9================10 11这篇文档描述了 arm64 ELF hwcaps 的用法和语义。12 13 141. 简介15-------16 17有些硬件或软件功能仅在某些 CPU 实现上和/或在具体某个内核配置上可用,但18对于处于 EL0 的用户空间代码没有可用的架构发现机制。内核通过在辅助向量表19公开一组称为 hwcaps 的标志而把这些功能暴露给用户空间。20 21用户空间软件可以通过获取辅助向量的 AT_HWCAP 或 AT_HWCAP2 条目来测试功能,22并测试是否设置了相关标志,例如::23 24 bool floating_point_is_present(void)25 {26 unsigned long hwcaps = getauxval(AT_HWCAP);27 if (hwcaps & HWCAP_FP)28 return true;29 30 return false;31 }32 33如果软件依赖于 hwcap 描述的功能,在尝试使用该功能前则应检查相关的 hwcap34标志以验证该功能是否存在。35 36不能通过其他方式探查这些功能。当一个功能不可用时,尝试使用它可能导致不可37预测的行为,并且无法保证能确切的知道该功能不可用,例如 SIGILL。38 39 402. Hwcaps 的说明41----------------42 43大多数 hwcaps 旨在说明通过架构 ID 寄存器(处于 EL0 的用户空间代码无法访问)44描述的功能的存在。这些 hwcap 通过 ID 寄存器字段定义,并且应根据 ARM 体系45结构参考手册(ARM ARM)中定义的字段来解释说明。46 47这些 hwcaps 以下面的形式描述::48 49 idreg.field == val 表示有某个功能。50 51当 idreg.field 中有 val 时,hwcaps 表示 ARM ARM 定义的功能是有效的,但是52并不是说要完全和 val 相等,也不是说 idreg.field 描述的其他功能就是缺失的。53 54其他 hwcaps 可能表明无法仅由 ID 寄存器描述的功能的存在。这些 hwcaps 可能55没有被 ID 寄存器描述,需要参考其他文档。56 57 583. AT_HWCAP 中揭示的 hwcaps59---------------------------60 61HWCAP_FP62 ID_AA64PFR0_EL1.FP == 0b0000 表示有此功能。63 64HWCAP_ASIMD65 ID_AA64PFR0_EL1.AdvSIMD == 0b0000 表示有此功能。66 67HWCAP_EVTSTRM68 通用计时器频率配置为大约100KHz以生成事件。69 70HWCAP_AES71 ID_AA64ISAR0_EL1.AES == 0b0001 表示有此功能。72 73HWCAP_PMULL74 ID_AA64ISAR0_EL1.AES == 0b0010 表示有此功能。75 76HWCAP_SHA177 ID_AA64ISAR0_EL1.SHA1 == 0b0001 表示有此功能。78 79HWCAP_SHA280 ID_AA64ISAR0_EL1.SHA2 == 0b0001 表示有此功能。81 82HWCAP_CRC3283 ID_AA64ISAR0_EL1.CRC32 == 0b0001 表示有此功能。84 85HWCAP_ATOMICS86 ID_AA64ISAR0_EL1.Atomic == 0b0010 表示有此功能。87 88HWCAP_FPHP89 ID_AA64PFR0_EL1.FP == 0b0001 表示有此功能。90 91HWCAP_ASIMDHP92 ID_AA64PFR0_EL1.AdvSIMD == 0b0001 表示有此功能。93 94HWCAP_CPUID95 根据 Documentation/arch/arm64/cpu-feature-registers.rst 描述,EL0 可以访问96 某些 ID 寄存器。97 98 这些 ID 寄存器可能表示功能的可用性。99 100HWCAP_ASIMDRDM101 ID_AA64ISAR0_EL1.RDM == 0b0001 表示有此功能。102 103HWCAP_JSCVT104 ID_AA64ISAR1_EL1.JSCVT == 0b0001 表示有此功能。105 106HWCAP_FCMA107 ID_AA64ISAR1_EL1.FCMA == 0b0001 表示有此功能。108 109HWCAP_LRCPC110 ID_AA64ISAR1_EL1.LRCPC == 0b0001 表示有此功能。111 112HWCAP_DCPOP113 ID_AA64ISAR1_EL1.DPB == 0b0001 表示有此功能。114 115HWCAP_SHA3116 ID_AA64ISAR0_EL1.SHA3 == 0b0001 表示有此功能。117 118HWCAP_SM3119 ID_AA64ISAR0_EL1.SM3 == 0b0001 表示有此功能。120 121HWCAP_SM4122 ID_AA64ISAR0_EL1.SM4 == 0b0001 表示有此功能。123 124HWCAP_ASIMDDP125 ID_AA64ISAR0_EL1.DP == 0b0001 表示有此功能。126 127HWCAP_SHA512128 ID_AA64ISAR0_EL1.SHA2 == 0b0010 表示有此功能。129 130HWCAP_SVE131 ID_AA64PFR0_EL1.SVE == 0b0001 表示有此功能。132 133HWCAP_ASIMDFHM134 ID_AA64ISAR0_EL1.FHM == 0b0001 表示有此功能。135 136HWCAP_DIT137 ID_AA64PFR0_EL1.DIT == 0b0001 表示有此功能。138 139HWCAP_USCAT140 ID_AA64MMFR2_EL1.AT == 0b0001 表示有此功能。141 142HWCAP_ILRCPC143 ID_AA64ISAR1_EL1.LRCPC == 0b0010 表示有此功能。144 145HWCAP_FLAGM146 ID_AA64ISAR0_EL1.TS == 0b0001 表示有此功能。147 148HWCAP_SSBS149 ID_AA64PFR1_EL1.SSBS == 0b0010 表示有此功能。150 151HWCAP_SB152 ID_AA64ISAR1_EL1.SB == 0b0001 表示有此功能。153 154HWCAP_PACA155 如 Documentation/arch/arm64/pointer-authentication.rst 所描述,156 ID_AA64ISAR1_EL1.APA == 0b0001 或 ID_AA64ISAR1_EL1.API == 0b0001157 表示有此功能。158 159HWCAP_PACG160 如 Documentation/arch/arm64/pointer-authentication.rst 所描述,161 ID_AA64ISAR1_EL1.GPA == 0b0001 或 ID_AA64ISAR1_EL1.GPI == 0b0001162 表示有此功能。163 164HWCAP2_DCPODP165 166 ID_AA64ISAR1_EL1.DPB == 0b0010 表示有此功能。167 168HWCAP2_SVE2169 170 ID_AA64ZFR0_EL1.SVEVer == 0b0001 表示有此功能。171 172HWCAP2_SVEAES173 174 ID_AA64ZFR0_EL1.AES == 0b0001 表示有此功能。175 176HWCAP2_SVEPMULL177 178 ID_AA64ZFR0_EL1.AES == 0b0010 表示有此功能。179 180HWCAP2_SVEBITPERM181 182 ID_AA64ZFR0_EL1.BitPerm == 0b0001 表示有此功能。183 184HWCAP2_SVESHA3185 186 ID_AA64ZFR0_EL1.SHA3 == 0b0001 表示有此功能。187 188HWCAP2_SVESM4189 190 ID_AA64ZFR0_EL1.SM4 == 0b0001 表示有此功能。191 192HWCAP2_FLAGM2193 194 ID_AA64ISAR0_EL1.TS == 0b0010 表示有此功能。195 196HWCAP2_FRINT197 198 ID_AA64ISAR1_EL1.FRINTTS == 0b0001 表示有此功能。199 200HWCAP2_SVEI8MM201 202 ID_AA64ZFR0_EL1.I8MM == 0b0001 表示有此功能。203 204HWCAP2_SVEF32MM205 206 ID_AA64ZFR0_EL1.F32MM == 0b0001 表示有此功能。207 208HWCAP2_SVEF64MM209 210 ID_AA64ZFR0_EL1.F64MM == 0b0001 表示有此功能。211 212HWCAP2_SVEBF16213 214 ID_AA64ZFR0_EL1.BF16 == 0b0001 表示有此功能。215 216HWCAP2_I8MM217 218 ID_AA64ISAR1_EL1.I8MM == 0b0001 表示有此功能。219 220HWCAP2_BF16221 222 ID_AA64ISAR1_EL1.BF16 == 0b0001 表示有此功能。223 224HWCAP2_DGH225 226 ID_AA64ISAR1_EL1.DGH == 0b0001 表示有此功能。227 228HWCAP2_RNG229 230 ID_AA64ISAR0_EL1.RNDR == 0b0001 表示有此功能。231 232HWCAP2_BTI233 234 ID_AA64PFR0_EL1.BT == 0b0001 表示有此功能。235 236 2374. 未使用的 AT_HWCAP 位238-----------------------239 240为了与用户空间交互,内核保证 AT_HWCAP 的第62、63位将始终返回0。241