2

我正在开发 Oracle Linux Server 6.5 版。

GCC 版本 4.4.7

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

以下是我遵循的步骤:

。/配置

当我在运行./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```



4

2 回答 2

2

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

GCC 4.4.7 大约有 10 年的历史,所以如果您的汇编程序和 binutils 具有相似的年份,那么这是可以预料的:该指令甚至直到 2012 年左右才被发明。

我认为你需要升级你的工具链,也许你的整个操作系统。这可能是您使用这些古老工具所遇到的最少问题。

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

于 2021-06-02T21:03:13.910 回答
1

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

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

#  if defined(__x86_64__)

经过

#  if defined(__do_not_use_this_it_is_broken_on_my_system__)

在相关地点

于 2021-06-02T20:57:55.900 回答