【发布时间】:2017-06-07 03:57:57
【问题描述】:
我正在阅读this 关于如何修复 Valgrind 中的错误的问题。唯一建议的解决方案是应用this 补丁。
我从未应用过补丁,但我发现this 关于该主题的问题,但我不明白如何将其应用到我的案例中。
【问题讨论】:
-
谷歌“git应用补丁”?
我正在阅读this 关于如何修复 Valgrind 中的错误的问题。唯一建议的解决方案是应用this 补丁。
我从未应用过补丁,但我发现this 关于该主题的问题,但我不明白如何将其应用到我的案例中。
【问题讨论】:
priv/guest_amd64_helpers.c
@@ -3101,7 +3101,8 @@ void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st )
SET_ABCD(0x0000000d, 0x756e6547, 0x6c65746e, 0x49656e69);
break;
case 0x00000001:
- SET_ABCD(0x000306c3, 0x02100800, 0x7ffafbff, 0xbfebfbff);
+ /* Don't advertise RDRAND support, bit 30 in ECX. */
+ SET_ABCD(0x000306c3, 0x02100800, 0x3ffafbff, 0xbfebfbff);
break;
case 0x00000002:
SET_ABCD(0x76036301, 0x00f0b6ff, 0x00000000, 0x00c10000);
这个补丁很简单。它只更改一个文件priv/guest_amd64_helpers.c。更改的行在函数void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st ) 中。 - 前缀行表示要删除此行。 + 前缀行表示要添加此行。没有前缀- 或+ 的其他行是要定位的上下文。所以找到这个块,然后在你的priv/guest_amd64_helpers.c 中删除并添加这些行。这是一种直接的手动方式。
对于通用的 git 补丁或提交,如果您的代码由 git 存储库管理,我们也可以通过 git 命令应用它。您问题中的最后一个链接描述了如何 git 应用补丁。命令git am 也可以完成这项工作。这是git cherry-pick 应用此提交的方法。
cd <your_repo>
git fetch https://github.com/svn2github/valgrind-vex master
git cherry-pick 1ab61656f71e94ce12b68de87f1e28cf3dc0c18c
如果不想保留 1ab6165 的作者信息,可以使用git cherry-pick -n 1ab616;git commit 代替。
补丁是一个格式化文件,它描述了哪些文件被更改以及哪些行被添加或删除。您可以手动应用它,也可以通过命令自动应用它。还有一种常用的方法。将priv/guest_amd64_helpers.c 下载到本地磁盘并与您的版本进行比较,例如通过 Beyond Compare。关注相关块并将其合并到您的版本中。
【讨论】: