Oracle Linux 中的 Valgrind 安装错误

问题描述

我正在开发 Oracle Linux Server 6.5 版。

海湾合作委员会版本 4.4.7

我正在尝试安装 Valgrind valgrind-3.17.0,但最终出错。您能否就以下问题提出建议?提前致谢。

以下是我遵循的步骤:

./configure

运行./configure后查看日志,发现一句话:

checking if amd64 assembler kNows the RDSEED instruction... no

进行安装

priv/guest_amd64_helpers.c:3799: Error: no such instruction: `rdseed %r11d'
make[3]: *** [priv/libvex_amd64_linux_a-guest_amd64_helpers.o] Error 1
make[3]: Leaving directory `/usr/src/valgrind-3.17.0/VEX'
make[2]: *** [install] Error 2
make[2]: Leaving directory `/usr/src/valgrind-3.17.0/VEX'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/usr/src/valgrind-3.17.0'
make: *** [install] Error 2```



解决方法

听起来您的汇编器无法识别 rdseed 指令,可能是因为它是一个非常旧的版本。

GCC 4.4.7 已经有大约 10 年的历史了,所以如果你的汇编器和 binutils 是类似的年份,那么这是可以预料的:该指令直到 2012 年左右才被发明。

我认为您需要升级工具链甚至整个操作系统。这可能是您使用如此古老的工具遇到的最少问题。

(看起来他们在执行 configure 时确实检查了汇编程序支持,所以原则上他们可以避免在汇编程序不支持时使用该指令,但他们不支持。可能是在在某些时候,他们决定放弃对这些旧的汇编程序的支持,但并没有费心从 configure 中删除测试,也没有使该测试的失败成为致命错误。)

,

这看起来像是一个错误,您应该在 valgrind bugzilla 中提交问题。

同时,您可以修改源文件guest_amd64_helpers.c 通过替换

#  if defined(__x86_64__)

#  if defined(__do_not_use_this_it_is_broken_on_my_system__)

在相关地点