问题描述
我正在开发 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__)
在相关地点