通过 getauxval 检测 Power8 核心加密?

2024-02-14

我使用的是 GCC112,它是运行 Linux 的小端 Power8 机器。 Power8有核心加密 https://www.ibm.com/developerworks/library/se-power8-in-core-cryptography/index.html提供 AES、SHA 和一些其他有用的功能。我正在尝试使用以下命令确定运行时功能的可用性getauxval。用例是为“最小”功能的机器构建发行版,我们需要在运行时换入更快的功能。

的转储hwcaps.h如下所示,但它缺少 Power8、AES、SHA 等的特定位。然而,我相信Power8是ISA 2.07,而ISA 2.07有位PPC_FEATURE2_ARCH_2_07.

我不清楚的是,Power8 核心加密是否可选,就像 ARMv8 下的 ARM 加密一样。我找不到明确说明要求的文件,而且我没有会员资格开放电源 https://openpowerfoundation.org访问 ISA 文档。 (另一种可能性是,已说明但我在文档中错过了)。

是否可以使用getauxval查询功能的运行时环境?如果不是,那么我们如何确定运行时功能的可用性? CPU 探测是唯一可用的替代方案吗?

也许更笼统地说,我们如何确定 Power6、Power7 和 Power8 运行时环境?


auxv.h大部分都是空的。头文件包括hwcaps.h.

$ cat /usr/include/bits/hwcap.h
...

/* The bit numbers must match those in the kernel's asm/cputable.h.  */

/* Feature definitions in AT_HWCAP.  */
#define PPC_FEATURE_32              0x80000000 /* 32-bit mode. */
#define PPC_FEATURE_64              0x40000000 /* 64-bit mode. */
#define PPC_FEATURE_601_INSTR       0x20000000 /* 601 chip, Old POWER ISA.  */
#define PPC_FEATURE_HAS_ALTIVEC     0x10000000 /* SIMD/Vector Unit.  */
#define PPC_FEATURE_HAS_FPU         0x08000000 /* Floating Point Unit.  */
#define PPC_FEATURE_HAS_MMU         0x04000000 /* Memory Management Unit.  */
#define PPC_FEATURE_HAS_4xxMAC      0x02000000 /* 4xx Multiply Accumulator.  */
#define PPC_FEATURE_UNIFIED_CACHE   0x01000000 /* Unified I/D cache.  */
#define PPC_FEATURE_HAS_SPE         0x00800000 /* Signal Processing ext.  */
#define PPC_FEATURE_HAS_EFP_SINGLE  0x00400000 /* SPE Float.  */
#define PPC_FEATURE_HAS_EFP_DOUBLE  0x00200000 /* SPE Double.  */
#define PPC_FEATURE_NO_TB           0x00100000 /* 601/403gx have no timebase */
#define PPC_FEATURE_POWER4          0x00080000 /* POWER4 ISA 2.00 */
#define PPC_FEATURE_POWER5          0x00040000 /* POWER5 ISA 2.02 */
#define PPC_FEATURE_POWER5_PLUS     0x00020000 /* POWER5+ ISA 2.03 */
#define PPC_FEATURE_CELL_BE         0x00010000 /* CELL Broadband Engine */
#define PPC_FEATURE_BOOKE           0x00008000 /* ISA Category Embedded */
#define PPC_FEATURE_SMT             0x00004000 /* Simultaneous
                                                  Multi-Threading */
#define PPC_FEATURE_ICACHE_SNOOP    0x00002000
#define PPC_FEATURE_ARCH_2_05       0x00001000 /* ISA 2.05 */
#define PPC_FEATURE_PA6T            0x00000800 /* PA Semi 6T Core */
#define PPC_FEATURE_HAS_DFP         0x00000400 /* Decimal FP Unit */
#define PPC_FEATURE_POWER6_EXT      0x00000200 /* P6 + mffgpr/mftgpr */
#define PPC_FEATURE_ARCH_2_06       0x00000100 /* ISA 2.06 */
#define PPC_FEATURE_HAS_VSX         0x00000080 /* P7 Vector Extension.  */
#define PPC_FEATURE_PSERIES_PERFMON_COMPAT  0x00000040
#define PPC_FEATURE_TRUE_LE         0x00000002
#define PPC_FEATURE_PPC_LE          0x00000001

/* Feature definitions in AT_HWCAP2.  */
#define PPC_FEATURE2_ARCH_2_07     0x80000000 /* ISA 2.07 */
#define PPC_FEATURE2_HAS_HTM       0x40000000 /* Hardware Transactional
                                                 Memory */
#define PPC_FEATURE2_HAS_DSCR      0x20000000 /* Data Stream Control
                                                 Register */
#define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
#define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
#define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */

我想说的是getauxval()将是做到这一点的最佳方式;这HWCAP & HWCAP2值正好用于确定硬件特性。您的列表中缺少的是PPC_FEATURE2_VEC_CRYPTO,这表明存在向量加密指令,这听起来像是您需要的指令。

附带说明:您可能不想检测处理器实施,但是处理器features。具体来说,检查单个功能,而不是尝试检查提供该功能的进程。 (例如,检测VEC_CRYPTO直接,而不是尝试检查 POWER8,并假设这意味着加密功能)。

详细一点,Linux 的 cputable 条目指定了HWCAP/HWCAP2价值观。以POWER8为例:

#define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
                 PPC_FEATURE2_HTM_COMP | \
                 PPC_FEATURE2_HTM_NOSC_COMP | \
                 PPC_FEATURE2_DSCR | \
                 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
                 PPC_FEATURE2_VEC_CRYPTO)

那是来自arch/powerpc/include/asm/cputable.h https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/powerpc/include/asm/cputable.h在内核中(它还提供了可以在 aux 向量中设置的实际 hwcap 位)。

最后,我相当确定您不需要成为 OpenPOWER 基金会成员即可下载 ISA(最新的是 3.0B)——您只需要在网站上有一个帐户即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 getauxval 检测 Power8 核心加密? 的相关文章

  • 如何自定义 DataTable 列的排序

    我需要对数据表列的值进行排序 该列包含字符串 整数或混合文本 例如 数据表列包含如下值 23 18 12 store 23 store a1 1283 25 如果我使用对值进行排序Dataview sort 方法会按此顺序产生 12 128
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • Linq Where 本地计数器关闭在 VS watch 中的结果不同

    我尝试删除前 3 个元素array与 LinQWhere扩展功能 这是一个例子 var array new 1 2 3 4 5 6 7 8 9 var count 3 var deletedTest1 0 var test1 array W
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • CMake - 将预构建库链接到 C# 项目

    我正在使用 CMake 构建 C 库 该库依赖于已构建的库 dll 我似乎无法让图书馆链接到我的图书馆 我尝试过使用target link libraries mylib external lib 我也尝试过暴力破解 reference e
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 宏观评价[重复]

    这个问题在这里已经有答案了 可能的重复 未定义的行为和序列点 https stackoverflow com questions 4176328 undefined behavior and sequence points 我无法理解以下宏
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 为什么在预提交挂钩中执行 git add 后索引没有更新?

    我有一个预提交钩子 检查我的版本文件是否需要更新 修改所述文件 对此文件执行 git add 这允许我将更新的版本文件添加到同一提交中 我遇到的唯一问题是 在钩子运行后 工作树和 HEAD 会使用新版本文件进行更新 但索引不会 我需要手动暂
  • Firebase 推送通知在某些设备上无法正常工作

    对于推送通知 我使用 FCM 我在 VIVO V3 手机中遇到一些问题 相同的代码适用于其他设备 黑莓 华为 三星 适用于以下所有场景我已经测试了 3 个场景 当应用程序位于前台时 当应用程序处于后台时 当应用程序完全杀死时 前 2 个条件
  • ConsoleAppender 实例化不起作用:具有私有访问权限

    我的 ConsoleAppender 类实例化不起作用 import org apache logging log4j core appender ConsoleAppender public class Application priva
  • 如何在 PHP 中将 PDF 版本 1.5 转换为版本 1.4

    如何在 PHP 中将 PDF 版本 1 5 转换为版本 1 4 有人能指出我正确的方向吗 我有类似的需求 发现Ghostscript可以修改PDF版本 文档在这里 http ghostscript com doc current Use h
  • 如何使用setCamera(MediaRecorder)?

    根据Android SDK MediaRecorder setCamera可以用于回收现有的相机实例进行视频捕获和预览 而无需重置预览 我无法找到任何示例 并且我所有的尝试都是徒劳的 我要么得到错误的状态异常 要么 MediaRecorde
  • 从 ASP.NET 应用程序写入 IIS 日志

    我想让我的 ASP NET 应用程序将行写入日志中的某个位置 IIS 是否提供任何内置方式来记录 ASP NET 日志消息 我在想可能有一种方法可以捕获对 System Diagnostics Debug WriteLine 的调用 但我找
  • SQLite 外部查询返回内部查询中找不到的结果

    我只是想知道是否有人遇到过 SQLite 3 7 4 中的情况 其中查询将返回一组结果 而当它成为子查询时 结果完全不同 我在更复杂的查询中发现了问题 但这里有一个更简单的示例 演示了相同的行为 数据库设置 CREATE TABLE tes
  • 如何使用 Paramiko 从 SFTP 服务器仅下载最新文件?

    我想编写连接到我的大学 SFTP 服务器并下载最新文件和练习的脚本 到目前为止 我已经对 Paramiko 示例中的代码进行了一些更改 但我不知道如何下载最新的文件 这是我的代码 import functools import parami
  • Laravel 多态多对多关系数据透视表与另一个模型的关系

    I have the following table structure as shown in the diagram 简而言之 它由几个多对多的多态关系组成 如下所示 many resources可以有很多sources和数据透视表so
  • C11 GCCthreads.h 未找到?

    下面的代码 include
  • JDialog:删除标题栏,保留边框

    是否可以从 JDialog 中删除标题栏 但保留边框 基本 SSCCE 如下所示 package test import javax swing JDialog import javax swing JFrame import javax
  • 通过 createPattern() 使用精灵表

    我似乎找不到任何有关如何执行此操作的可靠信息 所以我想知道是否有人可以为我指出正确的方向 我有一个大的精灵表 我们称之为textures png 每个纹理都是 64x64 像素 我需要能够根据这些纹理创建图案 createPattern 是
  • 找不到类型或命名空间名称“OpenIddictDbContext<,>”

    我有个问题 今天早上我打开我的项目并收到错误 找不到类型或命名空间名称 OpenIddictDbContext 您是否缺少 using 指令或程序集引用 netcoreapp1 1 当我恢复并构建项目时发生此错误 这很奇怪 因为我确实有 O
  • 使用 Python 的 headless-selenium-for-win

    我从这个github项目中找到了一个无头IE无头硒求赢 https github com kybu headless selenium for win releases 其中有以下文件 desktop utils exe headless
  • 使用 GEKKO python 时的负自由度

    我正在尝试解决上述优化问题 我的代码如下 它有效 但我得到了负自由度问题 而且客观价值也是负数 这是我没想到的 我期待着积极的一面 我不明白为什么会发生这种情况 也不知道如何解决这个问题 有人可以给我一个建议吗 Code Import pa
  • Ruby Array - 使用下一个和之前的元素进行反向迭代

    如何使用当前元素的下一个和之前的元素反向迭代数组 是否可以使用each cons with reverse each 对的 这是可能的 1 2 3 4 5 6 reverse each each cons 3 before current
  • 如何使用一组通用键正确散列字典以实现重复数据删除目的?

    我有一些日志数据 例如 logs id 1234 error None fruit orange id 12345 error None fruit apple 每个字典都有相同的键 id error and fruit 在本例中 我想要删
  • 如何使用 Visual Studio Code 创建并链接另一个网页?

    目前 我正在遵循在线教程 该教程使用 1 个 index html 文件和 1 个 app js 文件 仅生成 1 个页面 但是 我想要多个页面 只需单击一个按钮即可来回链接 如何拥有多个页面 我是否必须在同一个index html 文件中
  • 使用 MAMP 和 php 脚本发送电子邮件

    您好 我正在我的 Mac 上运行 MAMP 以在本地托管一个网站 我想使用 php 脚本发送电子邮件 我在网上查看的内容告诉我有关电子邮件的 php 脚本 但我无法发送电子邮件 我猜这与 MAMP 设置有关 或者可能我必须对 php ini
  • 通过 getauxval 检测 Power8 核心加密?

    我使用的是 GCC112 它是运行 Linux 的小端 Power8 机器 Power8有核心加密 https www ibm com developerworks library se power8 in core cryptograph