【问题标题】:gcc: which option enables object size tracking and __builtin_object_size?gcc:哪个选项启用对象大小跟踪和__builtin_object_size?
【发布时间】: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


【解决方案1】:

这是不可能的,gcc 不会运行在 -O0 计算 __builtin_object_size 的结果所需的分析传递。

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多