2017-01-22 365 views
1

我在阅读this有关如何修复Valgrind中的错误的问题。唯一建议的解决方案是应用this补丁。如何应用github补丁?

我从来没有申请过补丁,我发现this问题的主题,但我不明白如何将它应用到我的情况。

+0

'man git-apply'? – matt

+1

Google“git apply patch”? – 2017-01-22 17:07:38

回答

1
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)中。 A前缀-表示该行将被删除。 A +前缀行表示要添加此行。没有前缀-+的其他行是要查找的上下文。所以找到大块,然后删除并在您的priv/guest_amd64_helpers.c中添加这些行。这是一种直接的手工方式。

至于通用的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。专注于相关的块并将其合并到您的版本中。