【问题标题】:debug low level gcc intermediate code representations调试低级 gcc 中间代码表示
【发布时间】:2019-05-22 15:26:09
【问题描述】:

关于this question,我还有一个问题。

我设法重现了它,我不再在这里复制粘贴代码,因为您可以找到代码。我只将编译的输出粘贴到我的计算机上。

% gcc -std=c11 -O3 -g -Wall -Wextra -Werror -USUPPRESS_BUG  -c  msg_gcc.c
msg_gcc.c: In function 'function_under_test':
msg_gcc.c:30:9: error: 'strncpy' output may be truncated copying 128 bytes from a string of length 128 [-Werror=stringop-truncation]
         strncpy(name, name_in_queue, SERVERNAME_LEN);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
-root-@ @...| test | stub
% gcc --version
gcc (GCC) 8.2.1 20181127
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

-root-@ @...| test | stub
% cat /proc/version
Linux version 5.0.7-arch1-1-ARCH (builduser@heftig-20167) (gcc version 8.2.1 20181127 (GCC)) #1 SMP PREEMPT Mon Apr 8 10:37:08 UTC 2019
-root-@ @...| test | stub

我希望我能了解编译器在哪个阶段检测到此类库问题。我知道代码被转换成许多中间语言,比如泛型、gimple、ssa、rtl、组合器等,但我不知道在这些表示中的哪一个中,代码会从这个编译命令中检查类似这样的问题.

如果我想调试中间表示并发现此问题的存在,我应该传递哪些参数 gcc 以便在生成此警告之前尽可能地停止中间语言的生成?

【问题讨论】:

    标签: c gcc intermediate-language


    【解决方案1】:

    您的错误/警告似乎来自here。 如果我理解正确,这是来自 SSA 表单生成阶段。

    另外,this 问题可能会提供有用的提示,说明如何为gcc 转储不同的中间表示。我知道如何为clang 执行此操作,但您的问题似乎是针对gcc 的。

    【讨论】:

    • 你的意思是,当它到达 SSA 阶段时,ssa 会被传递给 GCC 中包含的某个语义分析工具来检查 'strncpy' output may be truncated 吗?我如何知道它是什么工具以及该工具具有什么功能?
    • 大约有60个文件tree-ssa-*。它们是标准库的一部分吗?标准库是编译器的一部分?
    • 我问是因为我有兴趣了解语义检查是如何在该级别完成的,不一定是 gcc 是如何做的。如果您可以详细说明 clang 使用的语义检查的逻辑/算法,那就很有趣了。
    • 文件tree-ssa-* 不是标准库函数的实现。通常这些函数作为 libc 的一部分单独实现(gcc 的版本是 glibc,clang 继承自用于编译它的编译器)。我指出的文件是专门处理这些函数的实现,因为编译器会识别这些函数并尝试进行额外的检查或尝试通过用内在函数替换它来优化它。
    • 啊,它试图用as-if rule 之后的一些更简单的内联序列替换对标准库的一些调用,并模拟标准库的行为——正确吗?
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多