【发布时间】:2017-01-13 18:56:21
【问题描述】:
当__builtin_object_size(ptr, 1) 用于未优化编译的代码 (-O0) 时,它始终返回 -1。为了获得实际的对象大小,代码必须至少使用-O1 进行编译。我也想在-O0 启用它,但到目前为止我无法找到启用它的选项。我检查了使用选项-Q --help=optimizers、-Q --help=common 和-Q --help=c 执行的gcc 生成的输出,发现-O1 添加了哪些选项。不幸的是,当我手动将它们添加到命令行时,__builtin_object_size 仍然返回 -1。
您知道在-O0 编译时是否可以以某种方式启用此功能?
我在 Linux/x86_64 上使用 gcc 4.8.4。
作为参考,我添加了用于测试的代码:
#include <stdio.h>
#include <stdlib.h>
inline void f(const char* ptr)
{
printf("%d\n", (int)__builtin_object_size(ptr, 1));
}
int main()
{
char* buf = malloc(10);
f(buf);
return 0;
}
【问题讨论】:
-
您好,您是否尝试将
-fsanitize=object-size标志传递给编译器? -
如果没有 -O2,您需要使用类型 0:
__builtin_object_size(ptr, 0),而不是 1。1 仅用于 _FORTIFY_SOURCE=2
标签: linux gcc optimization options