在EuroLLVM 2014 上,Kostya Serebryany 提出了一种向量溢出检测的方法。在幻灯片 12 上,他提供了GCC 修订版 207517的链接,您可以在其中看到branches/google/gcc-4_8/libstdc++-v3/
。
我想知道我可以在哪个 GCC 版本上使用容器溢出错误检测?如果它只在主干中,它在 Clang 3.9 版本中可用还是也在主干中?
1 回答
消毒剂矢量注释在原始 gcc 中不可用,更改只是 google 的 gcc 分支的一部分(发布于 gcc.gnu.org)。分支说明:https ://www.gnu.org/software/gcc/svn.html
google/main
这个分支包含谷歌本地补丁,这些补丁被分阶段贡献给主干。其中一些补丁要么处于审查过程中,要么尚未提出。这个分支的目的是作为一个登台平台,允许与外部开发人员协作。此分支中的补丁预计只会保留在这里,直到它们在主干中被审查和接受。该分支由 Diego Novillo 维护
将 AddressSanitizer 注释添加到向量的提交:
https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=207517 “对于 Google b/8513090,将 AddressSanitizer 注释添加到 std::vector”:
我们可以从提交中获取注解的名称:
// When sanitizer annotataions are off, avoid bazillion of no-op
// functions that blow up debug binary size.
#define __sanitizer_vector_annotate_new()
#define __sanitizer_vector_annotate_delete()
#define __sanitizer_vector_annotate_increase(a)
#define __sanitizer_vector_annotate_shrink(a)
现在 GNU 的主干版本 vector.tcc 或 stl_vector.h 中没有 sanitizer 注释(搜索“sanitizer”):
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/vector.tcc https://github.com/gcc-mirror/gcc/blob/master /libstdc%2B%2B-v3/include/bits/stl_vector.h
邮件列表 gcc-patches 中的线程:https ://gcc.gnu.org/ml/gcc-patches/2014-05/msg02180.html “检测 std::vector 中的“容器溢出”错误”,来自:Konstantin Serebryany, 2014 年 5 月 26 日。