【问题标题】:GCC Compiler, Plugins and structuresGCC 编译器、插件和结构
【发布时间】:2018-04-18 18:57:42
【问题描述】:

我有这样的场景:

int open_ext2 () {}
int close_ext2 () {}
int read_ext2 () {}
int write_ext2 () {}


const struct fs_callbacks FS = {
    open_file: open_ext2,
    close_file: close_ext2,
    read_bytes: read_ext2,
    write_bytes: write_ext2
};

void main(){
    FS.close_file();
}

当我查看 gimple 表示时(使用 -fdump-tree-all 编译) 我看到这样的东西:

D.1796 = close_ext2;
D.1796 ();

我没有得到的是分配open_file: open_ext2的位置

我的问题

  • GCC 是如何做到这一点的?
  • 它发生在什么阶段?
  • 有没有办法找出映射标签 -> 成员函数?

【问题讨论】:

  • 它可能被优化掉了,因为它没有被使用
  • gimple 告诉我它被使用了。
  • 与其编辑问题以添加解决方案,不如将其发布为答案!不禁止回答自己的问题(甚至可以选择直接在Ask a Question 页面回答问题)
  • 我修改了帖子并发布了答案。

标签: c gcc gcc-plugins


【解决方案1】:

找到答案

gcc 选项-fdump-tree-original-raw 转储信息

使用 GCC 插件:

  • 使用通行证PLUGIN_FINISH_DECL
  • 查看 GCC 源代码中的函数 debug_variable 文件:gcc/tree-dfa.c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2021-06-27
    • 2012-09-08
    相关资源
    最近更新 更多